This past week, I've been working on moving forward with the basic cavity model I developed last week (for future reference, that model was FP_3, and I am now working on FP_4) and refining the suspensions. I added three degrees of freedom to my simulation (such that it now consists of yaw, pitch, displacement, and side-to-side motion) and am attempting to integrate them with the OSEMS. I have also added mechanical damping for all degrees of freedom, and am adding electric damping and feedback. Concerning that, are all of the degrees of freedom locally damped in addition to being actuated on by the control system? Or does the control system do all of the damping itself? The first is the way I'm working on setting it up, but can easily change this if needed.
The next iteration of FP (FP_5) will replace my complicated OSEM --> Degrees of Freedom and vice versa system with the matrix system (see the poster Jenne and Jamie made, "Advanced Suspension Diagnostic Procedure"), as well as adding bounce/roll, yaw/y coupling, various non-damping filters as needed (i.e. the a2f filters), and noise sources. However, I'll only move on to that once I'm sure I have FP_4 working reasonably well. For now at least, the inputs/outputs look fine, and some of the DOF show resonance peaks. I'll become more concerned about where these resonance peaks actually are once I add damping.
Attached is a screenshot my work in progress. Only one of the suspensions has a basic feedback/damping loop going (as a prototype). It looks complicated now, but will simplify dramatically once I have damping worked out. Pink inputs are noises (will probably replace those with noise generators in FP_5) and green inputs are the OSEMS. The red output is the displacement of the cavity from resonance. The blue boxes are suspensions.
Most of my work has been on continuing to develop the Simulink model of the differential arm length control loop.
I have filled in transfer functions for the digital components after looking up the configuration of filters and
gains on the control screens. Filters that were active at the time included 1:50 and 1000:10 on C1LSC_YARM and
C1LSC_POY11 with a gain of 0.1. Jamie also introduced me to foton so that I could obtain the transfer functions
for the necessary filters. I have also continued to work on obtaining the open loop gain and length response
function from the model. The majority of the work now is to refine what I've accomplished so far. Adding details
to the arm cavity and the optics is one potential area for improvement.
I have also spent some time looking at real-time calibration methods from GEO and a proposal for a similar system
on LIGO in P040057-x0 from the DCC. While the work for this project may follow a different path for a real-time
calibration, having a sense for what's been accomplished so far should be helpful in working on a new system.
This week I've been working on refining my simulation and getting it ready to be plugged into the control system. In particular, I've added a first attempt at a PDH control system, matrix conversion from OSEMs to DOF and back, and all necessary DAC/ADC/AA/AI/whitening/dewhitening filters. Most of these work well, but the whitening filters have been giving me trouble. At one point, they were amplifying the signal instead of flatting it out, such that my simulation started outputting NaN (again).
This was wholeheartedly depressing, but switching out the whitening filters for flat ones seemed to make the problem go away, but brought another problem to light. The output to input ratio is minuscule (as in 10^-300/10^243, see Attachment 3 for the resulting bode plot between a force on the suspension pt in the x-direction and my two outputs - error signal and length signal, which is pretty much what you would expect it to be). I suspect that its related to the whitening filter problem (perhaps the dewhitening filter is flattening the signal instead of amplifying?). If that is the case, then switching the whitening/dewhitening filters ought to work. I'll try today and see what happens. The white/dewhite filters together result in a total gain of 1, which is a good fundamental test, but could mean absolutely nothing (i.e. they could both be wrong!). Judging from the fact that we want to flatten out low frequency signal when it goes through the whitening filter, the filters don't look switched (see Attachment 4 for a bode plot of white and dewhite).
The only other source of problems (given that the suspensions/local damping have been debugged extensively throughout this process - though they could bug out in conjunction with the cavity controls?) is the PDH system. However, separating each of the components showed that the error signal generated is not absurd (I haven't tested whether it makes sense or not, but at any rate it doesn't result in an output on the order of 10^-300).
In summary, I've made progress this week, but there is still far to go. Attachment 1 is my simulation from last week, Attachment 2 is my simulation from this week. A talk with Jamie about the "big picture" behind my project helped tremendously.
I am continuing work on simulating the DARM control loop. There is now a block for the length response
function that allows one to recover the h(t) GW input to the model. However, in order to add this
block I had to add some artificial poles to the length response function beacuse Simulink gave me errors
when the transfer function had more zeros than poles. The artificial poles are at 10^6 Hz and higher, so
that they should not affect the response function at the lower frequencies of interest. This approach
appears a bit computationally unstable though because without changing any parameters and re-running
the simulation, a different magnitude for h(t) would be calculated sometimes. A different method may be
necessary to get this working more accurately.
By looking through the C1LSC Simulink model and the C1LSC control screens, Jenne helped me determine
which digital filters are active while the interferometer is locked. To do this, open the C1LSC control
screen, then open the trigger matrix. Inside the trigger matrix window there is a button titled Filter
Module Triggers which opens another window that indicates which filters are triggered for a given channel,
and what values trigger them. For the y arm servo filters FM2, 3, 6, 7, 8 are triggered while in lock and
FM4 and 5 are controlled manually; I am including all of these in the model now.
I have changed the way I manipulate the output from the model for analysis, using Rana's advice. I also
improved the plotting code, now using a custom Bode plot instead.
Attached is a screenshot of the Simulink model as it currently stands, and an older implementation of the
open loop gain. I am in the process of updating the servo filters now, and what is shown in the plot does
not include all the filter modules for the servo filter.
Here's a screenshot of what's going on inside the cavity (Attachment 1). The PDH/mixer system outputs 0 for pretty much everything except really high numbers, which is the problem I'm trying to solve now. I assumed that the sidebands were anti-resonant, calculated reflection coefficient F(dL) = Z * 4pi * i/(lambda), where Z = (-r_1 + r_2*(r_1^2 + t_1^2)/(1 - r_1*r_3)), then calculated P_ref = 2*P_s - 4sqrt(P_c*P_s) * Im(F(dL)) * sin(12.5 MHz * t) (this is pictured in Attachment 2), then mixed it with a sin(12.5MHz * t) and low-passed it to get rid of everything but the DC term (this is pictured in Attachment 3), which is the term that then gets whitened/anti-aliased/passed through the loop.
Since my last update I have modified the DARM control loop model to the extent that it resembles the
measured open loop transfer function much more closely. The phase especially is much more accurate, with
a phase margin of about 35 degrees at the unity gain frequency of 156 Hz. Right now I'm normalizing to
the unity gain frequency still to adjust the gain properly. Using the length response function from the
model, I can calibrate the error signal as well to find the simulated h(t) output. There were a number of
computational problems in calculating the length response function, but I eventually found a work-around.
Attached is an updated plot of the open loop transfer function and the length response function of the model.
This week Jamie showed me around the real-time Simulink models as well. The one specific to my project
is c1cal.mdl. It takes the output in the form of the error and control signals from c1lsc.mdl as its
input and produces the calibrated signal as output. In order to produce the calibrated signal we need the actuation
function and the inverse of the sensing function for the model as it stands now. We also built, installed,
and restarted the c1cal model because no data was showing up in data viewer, but the problem remained
after this attempt.
Jamie and I also started on calibrating the interferometer in the traditional way. Jamie aligned the beam
splitter and the input test masses so we could take free-swinging Michelson measurements. However, taking
the data with the nds system appears to be giving different results than what is showing up in data viewer.
The goal of this measurement is to get a value for the peak to peak amplitude of the Michelson error signal.
This week, I worked on transferring my Simulink simulation to the RCG. I made all relevant library parts, now under "SASHA library" in the main Simulink library browser. My main concern has been noises - I've added some rudimentry shot noise, amplitude noise, phase noise, and intensity noise. I have yet to add local oscillator noise, and plan to upgrade the existing noises to actually have the PSD they should (using equations from Rana's and Robb Ward's theses). I'm fairly certain this can be achieved by applying the correct transfer function to white noise (a technique I learned from Masha this week!), so the RCG should be able to handle it (theoretically).
I've also been tweaking my main simulation. After a brief (but scary) attempt at adding optical levers, I decided to shelve it in order to focus on noises/RCG simulating. This is not permanent, and I plan to return to them at some point this week or next. My main problem with them was that I knew how to get from optical lever input to pitch/yaw, but had no idea how to get from pitch/yaw to optical lever input. If I had a complete basis for one in terms of the other, I'd be able to, but I don't think this is the way to go. I'm sure there is a good way to do it (it was done SOMEHOW in the original simulation of the suspensions), I just don't know it yet.
In the aftermath of the optical lever semi-disaster, my simulation is once again not really outputting anything, but since it actually worked before adding the optical levers, I'm pretty sure I can get it to work again (this is why its important to use either git or BACKUPS, >.< (or both)).
We also wrote our progress reports this week. Mine includes some discussion on the basics of cavities/the mechanics of the suspensions/brief intro to PDH, and I'll add a section on noises in the next draft. Maybe this'll be of some use to someone someday? One can only hope.
A lot of my time this week was spent struggling with implementing my neural network code in Simulink in order to experiment with using neural network control systems, as Rana suggested. Perhaps I'm inept at S-Functions, but I decided try to use the Model Reference Controller block in Simulink instead of my own code, and experiment with using that to control a driven, damped harmonic oscillator with noise. The block consists of two neural networks, one which is trained on a model of the plant to simulate the plant, and one that it trained on a reference model (which, in my case, is just input -> gain 0 -> output since my desired signal for now is 0. So far, I have managed to adjust the parameters enough to stop the neural network controller from outputting too much force (this causing the amplitude of the oscillator to increase with each iteration), but outputting enough to keep the plant oscillating with a maximal displacement of 2 m/s (with 30 neurons, 100 reference time delays, and 100 plant output time delays). I will continue to work on this, especially with added noise sources, and see how feasible it is to train such a controller to actually perform well.
As far as classification, I took up that project again, and realized that I have been approaching it the wrong way the whole time - instead of using a neural network to classify an entire time series, I could just classify it online using a recurrent neural network. This, however, meant that my data (which used to be in packets of 900 seconds) had to be parsed through to generate time-dependent desired output vectors. I did this last night, and have been trying various combinations of neuron numbers, time delays, and learning parameters this morning. Below is my current best result for mean square error with time, obtained with 1 neuron in the hidden layer, 50 time delays (so that there are actually 51 neurons feeding into the hidden layer, and a subnetwork of 50 neurons connected to 50 neurons, and learning parameter 0.7). The peak is due to the fact that a large amount of sharp earthquakes occur around that time, essentially giving the neural network a surprise, and causing it to rapidly learn. However, I suspect this sharp rise would decrease if I were to stop decimating my data by a factor of 256, and using all of the inputs as they come in (this, however would be drastically slower). Currently, I have a massive loop running which tries different combinations of neurons and time delays.
In terms of other lab stuff, Jenne and I ordered parts to make a cable for Gurlap-1, and I updated the pin map for Gurlap-1. Also, I wrote my progress report.
This week I've looked into finding an accurate sensitivity for the geophones in the STACIS. I found that when placing a geophone and accelerometer side by side, and using the sensitivity values I had from spec sheets, the readings were very different (see eLog 7054: http://nodus.ligo.caltech.edu:8080/40m/7054).
I cut the shunt resistor off one of the STACIS geos and found it to be 4000 Ohm, which is one of the standard values for this geophone model. When it is connected to the geophone the net resistance is 2000 Ohm (I took a more careful measurement, I took the geophone out). Then the internal coil resistance should be 4000 Ohm, if they are connected in parallel. However, the geophone spec sheet does not have a sensitivity value for this exact scenario, so I'll have to find a different way to determine the calibration (maybe by putting it next to a seismometer with a known sensitivity). So I know for sure that the sensitivity value I was originally using is wrong, because it assumed an internal coil resistance of 380 Ohm, but I have to check if the value I found by forcing the geophones to agree with the accelerometers (eLog 7054 --> 0.25 (m/s)/V) is correct.
I've also been looking again at the open loop gains of the STACIS (see eLog 7058: http://nodus.ligo.caltech.edu:8080/40m/7058). Attached is what TMC, which makes the STACIS, says it should look like (with a 4000 lb load on the STACIS). Today I am taking the open loop gains into higher frequencies to get a better comparison, but the plots look quite similar to what I have so far. So if it is an unstable open loop gain, then it's at least not new.
To take the free swinging Michelson measurements for the interferometer calibration Jamie aligned the beam splitter with ITMX and ITMY. I recorded the GPS time (1027827100 and for several hundred seconds later) when the Michelson was aligned in order to look at the correct data. I then copied the python script nds-test.py from Jamie, and modified it to take and plot data from C1:LSC-AS55_Q_ERR_DQ offline. I used dataviewer to verify that C1:LSC-AS55_Q_ERR_DQ and C1:LSC-AS55_Q_ERR were recording the same signal, and to check that I was taking the correct data with NDS. Taking data online worked as well, but it was easier to use a time when the Michelson was known to be free-swinging and take data offline. Attached is some sample data while free-swinging, with time in GPS time.
This week, I brought my c1lsp model online and fixed up some the medm screens for c1spx. Along the way, I ran into a few interesting problems (and learned a bit about bash scripting and emacs! :D). The screens for the main TM_RESP matrix are not generating automatically, and the medm screens don't want to link to the channels, for some reason. I don't have this problem with the other matrices (i.e. C2DOF and SEN_OUT), so I think it has something to do with TM_RESP being a filter matrix (which the others are not). In addition, the noise overview medm screens for c1spx are practically nonexistent - someone just copied the file for the SUS-ETMX screens into the master directory for c1spx, so they need a complete overhaul. I am willing to do this, but Jamie told me to focus my attentions elsewhere.
So I went back to noise generation. I've been using Matlab to figure out how to recreate the various noise sources (laser amplitude noise, local oscillator phase/amplitude noise, and 60 Hz/ADC. Frequency noise will be added some time this week and seismic noise should be already covered in Jamie's suspension model) in my c1lsp model. I'm doing it the way the RCG does it - by applying a filter to white noise. I'm generating white noise by just using a random number generator and pwelch-ing it to get the power spectral density.
For the filters themselves, I picked z, p, k such that it shaped the white noise PSD to look like the PSD of the noise in question. This was fairly straightforward once I figured out how zeroes and poles affected PSD. Once I'd picked zpk, I applied a bilinear transform to get a discrete zpk out, then converted to a second order section to make computation faster. I then applied that to the white noise (matlab has a convenient "sosfilt" function) and pwelch-ed/graphed it to get the result.
Attached is my attempt at filtering white noise to look like 60 Hz. noise. I can't seem to find a way to pick z and p such that the peak is more narrow (i.e. other than having two complex conjugated poles at 60 Hz.). I took the spectrum of 60 Hz. noise from a terminated ADC channel (Masha kindly let me borrow one of her GURALP channels).
EDIT: I also remembered that I've been looking for how to get a good power spectrum for the rest of the noises. Jenne referred me to Kiwamu's work on this, and I'm mostly going off elog #6133. If you have any other good elogs/data on noises, please feel free to send them my way.
I then measured the PSD of the sensors on the real suspended optics and a PSD of the suspension model. It looks like the OSEMs on the suspension model are only reading white noise, which probably means a lost connection somewhere (Attachment 2 is what the model SHOULD produce, Attachment 3 is what the model ACTUALLY produces). I perused Jamie's model, but couldn't find anything. Not sure where else to check, but I'll continue thinking about it/trying to fix it.
The main thing that I did this week was write a C block that, given static weights, would classify seismic signals (into one of three categories - Earthquake, Truck, Quiet). I have successfully debugged the C block so that it works without segmentation faults, etc, and have made various versions - one that uses a recurrent neural network, and one that uses a time-delayed input vector (rather than keeping recurrent weights). I've timed my code, and it works very fast (to the point where clock() differences in <time.h> are 0.000000 seconds per iteration). This is good news, because it means that operations can be performed in real-time, whether we are sampling at 2048 Hz, or, as Rana suggested, 256 Hz (currently, my weights are for 256 Hz, and I can decimate the incoming signal which is at 2048 Hz right now).
In order to optimize my code, since at the core it involves a lot of matrix multiplications, I considered how the data is actually stored in the computer, and attempted to minimize pointer movement. Suppose you have an array in C of the form A[num_row][num_col] - the way this array is actually stored on the stack or heap is row_1 / row_2 / row_3 / ... / row_num_row, so it makes sense to move across a matrix from left to right and then down (as though reading on a page). Likewise, there's no efficient algorithm for matrix multiplication which is less that O(N^2) (I think), so it's essentially impossible to avoid double for loops (however, the way I process the matricies, as mentioned before, minimizes this time).
The code is also fast because, rather than using an actual e^-u operation for the sigmoidal activation function, it uses a parametrized hyperbola - this arithmetic operations are the only ones that occur, and this is much faster than exponentiation (which I believe is just computer by Taylor series in the C math library..)
The weight vectors for this block are static (since they're made from training data where the signal type is already known). I am not currently satisfied with the performance of the block on data read from a file, so I am retraining my network. I realized that what is currently happening is that, given a time-dependent desired output vector, the network first trains to output a "quiet" vector, then a "disturbance" vector, and then retrains again to output a "quiet vector" and completely forgets how to classify disturbance. Currently, I am trying to get around this problem by shifting my earthquake data time-series, so that when I train in batch (on all of my data), there is probably an earthquake at all time points, so that the network does not only train on "quiet" at certain iterations. Likewise, I realized that I should perform several epochs (not just one) on the data - I tried this last night, and training performance MSE decreased by a factor of 1 per iteration (when on average, it's about 40, and 20 at best).
After I input the static weight vectors (which shouldn't take long since my code is very generalized), the C block can be added to the c1pem frame, and a channel can be made for the seismic disturbance class. I've made sure to keep with all of the C block rules when writing my code (both in terms of function input/output, and in terms of not using any C libraries).
As for neural networks for control, I talked to Denis about the controller block, and he realized that we should, instead of adding noises, at first attempt to use a reference plant with a lower Q pendulum and a real plant with a higher Q pendulum (since we want pendulum motion to be damped). I've tried training the controller block several times, but each time so far the plant pendulum has started oscillating greatly. My current guess at fixing this is training more.
Also, Jenne and I made a cable for Guralp 1 (I soldered, she explained how to do it), and it seems to work well, as mentioned in my previous E-log. Hopefully it can be used to permanently keep the seismometer all the way down the arm.
As Rana pointed out (http://nodus.ligo.caltech.edu:8080/40m/7112), the geophone/accelerometer noise lines from my last eLog (http://nodus.ligo.caltech.edu:8080/40m/7109) were dominated by ADC noise. I checked this today by terminating the ADC channels with 50 Ohm terminators and measuring the noise. The ADC noise line is included on the plot below, and it is clearly dominating the sensor noise data.
I set the accelerometer gain to 100, and will hook up the geophones to the SR560 pre-amp today- this should put both signals above the ADC noise, and I can calculate the sensor noises without the ADC noise being significant.
I have also begun to make some progress in understanding the pre-amp circuitry, and I will post a schematic when I've sketched it all.
Another issue that seems increasingly relevant to me is the power supply to the high voltage amplifier. It appears to go into the high voltage board from the power supply, then into the geophone pre-amp, then back into the high voltage board (see block diagram below). I tested this by inputting a signal after the pre-amp, with the geophones disconnected- the signal only drives the PZT if the pre-amp is plugged in, so the power that returns from the pre-amp must be powering some chips on the high voltage amplifier.
Power flow through the STACIS :
This is somewhat inconvenient, because it means if I want to provide external feedback (with accelerometers, for example) or actuation (such as feedforward), which I want to input after the geophone pre-amp, the pre-amp still needs to be plugged in for the high voltage amplifier to work and drive the PZTs. I am cataloging all of the pins on the high voltage amplifier and pre-amp so I can figure out how to reroute the power and cut out the geophone pre-amp entirely if necessary. I'll include a pin diagram with the pre-amp circuit sketch.
This week I spent most of my time learning about how the interferometer is calibrated and working on the calibration itself. I also looked more into the Pound-Drever-Hall technique.
Continuing work on the free-swinging Michelson measurements, I changed the signal that I was using to C1:LSC-ASDC_OUT_DQ. This is a proper power signal so that the peak-to-peak amplitude of this error signal can be directly read off the graph. The motivation to measure this amplitude is that it must be known in order to calibrate the actuation of the input and end test masses.
Next I looked into using DTT to make some measurements. I ran the Michelson restore script in the IFO Configure screen to adjust the optics to be near alignment. Then I tweaked the precise settings in the IFO Align screen of pitch and yaw for the ITMX, ITMY, and BS. The goal with this was to minimize the magnitude of the C1:LSC-ASDC_OUT_DQ signal. After it was well-aligned, back in DTT I sent in a sine wave excitation and used a Triggered Time Response measurement to see the output. As a first test I put the excitation signal in the ASDC channel and I was able to plot the resulting OUT signal in DTT. The amplitude was different than I input due to gains between the excitation and the point of measurement, but this can easily be accounted for by adjusting the amplitude in DTT accordingly.
The next step is to work on measurements of a single arm cavity, introducing excitations there and measuring the response.
Today I spent time locking the YARM in order to calibrate the arm cavity. Here's what I did:
1. Misalign all optics other than the beam splitter, ITMY, ETMY and PZT2
2. Restore BS, ITMY, ETMY, and PZT2
3. Open Dataviewer and run /users/Templates/JenneLockingDataviewer/Yarm.xml from the Restore Settings. This opens the signals C1:LSC-POY11_I_ERR (the Pound-Drever-Hall error signal for this measurement) and C1:LSC-TRY_OUT (the light transmitted through ETMY) in the plot window.
4. Adjust ITMY and ETMY pitch and yaw using the video screens looking at AS and ETMYT as a first, rough guide. It can be helpful at first to increase the gain on the YARM servo filter module in the C1LSC control screen to about 0.3 and decrease it back down to 0.1 as the beam becomes better aligned. You know when to decrease this gain when fuzzy, small oscillations appear on the C1:LSC-TRY_OUT signal. If the mode cleaner is locked you should see a bright spot on the AS camera.
5. Tinker with pitch and yaw while looking at the AS screen until you see a reasonably good circular spot without other fringes extending from a bright center.
6. The overall goal is to maximize C1:LSC-TRY_OUT because the power transmitted through EMTY is proportional to the power within the cavity. A decent target value is 0.85 and today I was able to get it to just over 0.80 at best. At first there will probably be small spikes in C1:LSC-TRY_OUT. You want to adjust pitch and yaw until the deviation in the signal from zero is no longer just a spike, but a sustained, flat signal above zero. By this time there should be light showing up on the ETMYT camera as well.
7. Once that happens, continue to successively adjust ITMY and ETMY doing the pitch adjustments on both first, and then the yaw adjustments, or vice versa. You can also tweak the PZT2 pitch and yaw. Once you've got C1:LSC-TRY_OUT as large as possible, you've locked the cavity.
I saved the pitch and yaw settings I ended up with for ITMY, ETMY, BS and PZT2 in the IFO_ALIGN screen. Before the end of the day I think Jenne restored the rest of the previously misaligned optics because they were restored when I got back from dinner.
I also worked on calibrating the YARM. I opened up DTT using C1:LSC-POY11_I_ERR as the measurement channel and C1:SUS-ITMY_LSC_EXC as the excitation channel. I ran a logarithmic swept sine response measurement with 100 points and an amplitude of 25. The mode cleaner kept losing its lock all day, and if this happened while making this measurement I tried to pause the sweep as quickly as possible. I analyzed the the transfer function and the coherence function that the sweep produced, and thought that some of the odd behavior was due to losing the lock and getting back to a slightly different locked state when resuming the measurement. The measured transfer function and coherence plots are attached below. Both the transfer function and the coherence look good above roughly 30 Hz, but do not look correct at low frequencies. There's also a roll-off in the measured transfer function around 200 Hz, while in the model the magnitude of the transfer function drops only after the corner frequency of the cavity, around several kHz. I have attached a plot of the roughly analogous transfer function from the DARM control loop model (the gains are very large due to the large arm cavity gain and the ADC conversion factor of 2^16/(20 V) ). The measured and the modeled transfer functions are slightly different in that the model does not include the individual mirrors, while the excitation was imposed on ITMY for the measurement.
The next steps are to figure out what's happening in DTT with the transfer function and coherence at low frequencies, and to understand the differences between the model and the measurement.
Once you've got C1:LSC-TRY_OUT as large as possible, you've locked the cavity.
Both the transfer function and the coherence look good above roughly 30 Hz, but do not look correct at low frequencies. There's also a roll-off in the measured transfer function around 200 Hz, while in the model the magnitude of the transfer function drops only after the corner frequency of the cavity, around several kHz. I have attached a plot of the roughly analogous transfer function from the DARM control loop model (the gains are very large due to the large arm cavity gain and the ADC conversion factor of 2^16/(20 V) ). The measured and the modeled transfer functions are slightly different in that the model does not include the individual mirrors, while the excitation was imposed on ITMY for the measurement.
The cavity is actually "locked" as soon as the feedback loop is successfully closed. One easy-to-spot symptom of this is that, as you mentioned elsewhere in your post, TRY is a ~constant non-zero, rather than spikey (or just zero). Once you've maximized TRY, you've got the cavity locked, and the alignment optimized.
We didn't get to this part of "The Talk" about the birds, the bees, and the DTTs, but we'll probably need to look into increasing the amplitude of the excitation by a little bit at low frequency. DTT has this capability, if you know where to look for it.
It would be great to see the model and your measurement overlayed on the same plot - they're easier to compare that way. You can export the data from DTT to a text file pretty easily, then import it into Matlab and plot away. Can you check and maybe repost your measured plots? I think they might have gotten attached as text files rather than images. At least I can't open them.
Here's the same plots in pdf format now. I originally posted them as jpg because I couldn't open the resulting pdf from DTT on rosalba, but I could open the jpg. I'll look into overlaying the measured and modeled curves as well.
I forgot to post this last night, but I locked the YARM again yesterday and misaligned the other optics. I took measurements on ITMY and ETMY with DTT again as well. At the end of the day I aligned the rest of the optics before I left.
I'm working on locking the Michelson now in order to put an excitation on one of the input test masses and measure the resulting error signal at the anti-symmetric port. I aligned the beams from ITMX and ITMY by looking at the AS camera with the video screens, but the fringes were not destructively interfering. Jenne advised that I look at the gain on the MICH servo filter modules in the LSC screen. We flipped the sign on the gain (it was 0.120 and it is now -0.120) and the fringes destructively interfered as desired after this change.
For purposes of documentation, I locked the YARM earlier in the morning before moving on to the Michelson. The purpose of this was to put another excitation on C1:SUS-ETMY_LSC_EXC and then measure the error signal on C1:LSC-POY11_I_ERR.
Today I worked on locking the Michelson. Here's what I did:
Open Data Viewer and Restore Settings /users/Templates/JenneLockingDataviewer/MICH.xml. This opens the C1:LSC-ASDC_OUT and C1:LSC-AS55_Q_ERR plots.
Check the LSC screen to verify that the path between the Servo Filter Modules and the SUS Ctrls are outlined in green. If not turn on the OUT button within the Filter Servo Modules, enable LSC mode, and turn on the SUS Ctrls for the BS.
Misalign all optics other than BS and one of ITMX and ITMY. The ITMY was already well-aligned from my work on locking the YARM, so I actually chose to misalign ITMY at first.
Restore BS and ITMX. Use the AS camera on the video screen as your guide when aligning ITMX.
Adjust pitch and yaw of ITMX until a bright, circular spot appears near the middle of the AS camera.
Now restore ITMY and adjust pitch and yaw until a second circular spot appears on the AS camera.
Adjust both ITMX and ITMY until both bright spots occupy the same location. If the spots remain bright when they are in the same location you are locking onto a bright fringe actually, and need to flip the sign of the gain on the MICH servo filter modules. I had to do this today in fact, as discussed in ELOG 7145.
If the sign is correct, the two beams should interfere destructively and the formerly bright spots will form a comparatively dark spot. The shape of the spot will likely be two bright lobes separated by a dark middle.
C1:LSC-ASDC_OUT should be a roughly flat signal, and the goal now is to minimize the magnitude of this signal. The smaller this signal, the darker the AS camera should look. Decent target values for C1:LSC-ASDC_OUT are around 0.10 to 0.05.
Once I did this, I made measurements by exciting C1:SUS-ITMY_LSC_EXC and measuring with C1:LSC-AS55_Q_ERR. I ran a logarithmic swept sine response from 1 to 1000 Hz again, with an envelope amplitude dependence. Again I looked at the measured transfer function and coherence. I was able to get good coherence, but it was somewhat erratic in that it dipped low at high frequency multiple times.
I tried to make ringdown measurements at the IMC using the DC falling edge as the trigger. Input to the MC was switched off by changing the polarity of the MC servo. But it does not seem to give the needed data as there seem to be several DC falling edges as soon as the polarity is switched. We should think about a better trigger or try to setup data recording from the oscilloscope seamlessly.
Also an ethernet cable has been connected to the router from the oscilloscope at the MC trans, but has not been set up to record data yet.
Here is the open loop gain of the XARM loop.
The reference is from the pre-upgrade era. We get the extra phase delay because we have two anti-aliasing filters. One is the hardware filter at about 7kHz for 16kHz sampling. This filter should have been replaced to the one for 64kHz sampling but it has not yet happened. The second one is the software anti-aliasing filter applied when down sampling from 64kHz to 16kHz. So we have double AA filters, which are the culprits for the extra phase delay.
We should either replace the hardware AA filter to the 64kHz one (preferred way), or change the software AA filter to a less aggressive one (easier temporary fix).
Here is the noise spectrum of the X-arm error signal along with the TRX DC power fluctuations.
The spectra were taken while the whitening filters for POX11 were OFF.
EDIT (Integrity Fairy): Shall we assume these units are "Intergalactic translational qubits/sqrt(Hz)"?
0) Did a bunch of alignment to get beams roughly centered on ETMY and ITMY and maximize power. Adjusted the aperture and focus on ETMY camera to get nice image. Camera needs to be screwed in tightly and cables given some real strain relief, Steve.
1) snapshots not working on many MEDM screens. Who's on top of this?
2) save/restore not working for PZT2 sliders
3) changed power and filter triggers on yarm to match xarm
4) yarm filters copied from xarm (need to handtune RGs)
5) DTT wasn't working on rossa. Used the Date/Time GUI to reset the system time to match fb and then it stopped giving 'Test Timed Out'. Jamie check rossa ntpd.
6) Removed the high 3.2 Hz RG filter. We don't have any sharp features like that in the spectrum.
---then added it back. The 3.2 Hz comes and goes depending on what Yoichi is doing over in the MC area. Leaving it in by default, but lowering the Q from 2 to 1.5.
7) Attached is the noise spectra, coherence, and loop gain model for this yarm condition. For the plant model, I assume a pendulum (f=1 Hz, Q = 9) and a cavity pole of 1600 Hz. Gain is scaled to set the UGF at 165 Hz (as guessed by looking at the servo gain peaking frequency). This cheezy model doesn't include any of the delays from DAC, AA, or AI. Eric and Sasha should have something more useful for us by Friday.
8) Change the DQ channels: need XARM and YARM IN1 at 16k. e.g. XARM_ERR, etc.
9) To get the DTT plots to make thumbnails in the elog, I print a .ps file and then use 'epstopdf' to make the PDF.
This week I've been focusing mainly on two things: 1) Designing a port for the STACIS that will allow external actuation and/or local feedback and 2) Investigating the seismic differential motion along the interferometer arms.
The circuit for the port is just a signal summing junction (in case we want to do feedforward and feedback at the same time) with BNC inputs for the external signal and switches that allow you to turn the external signal or feedback signal on/off. I'll test this on a breadboard and post the schematic if it works. I looked at the noise of the geophone pre-amp and DAC, which would be the feedback and external signal sources, respectively. According to Rolf Bork, the DAC noise is 700 nV/rtHz, and I measured the pre-amp board's minimum noise level at 20*10^-6 V/rtHz (which seems quite high). Both these noises are higher than the op-amp noise for my circuit (I'm considering the op-amp LT1012), which according to the specs is 30 nV/rtHz. This confirms that my circuit will not be the limiting noise source.
Along with Den, I calibrated the seismometers in the lab and measured the displacement differential arm motion (see eLog 7186: http://nodus.ligo.caltech.edu:8080/40m/7186). I'm trying to find a transfer function for the seismic stacks (and pendulum, but that's simpler) so I can calculate the differential motion in the chamber. After doing this offline, I'll make new channels in the PEM to look at the ground and chamber differential motion along the arms online.
I also am looking at the noise of the geophones with their shunt resistor (4k resistor across the coil) removed, to see if it improves the noise at low frequencies. My motivation for this was that the geophone specs show a better V/m/s sensitivity at low frequencies when the shunt resistor is removed, so the actual signal may become larger than the internal noise at these frequencies.
5) DTT wasn't working on rossa. Used the Date/Time GUI to reset the system time to match fb and then it stopped giving 'Test Timed Out'. Jamie check rossa ntpd.
ntp is now installed on all the workstations. I also added it to the /users/controls/workstation-setup.sh script
Over the past week I have been continuing to finalize the daily summary pages, attempting to keep the total run time under half an hour so that they can be run frequently. I have had many hang ups with the spectrograms and am currently using second trends (with this method, the entire script takes 15 minutes to run). I also have a backup method that takes 3 minutes of data for every 12 minutes, but could not implement any interpolation correctly. This might be a future focus, or the summary pages could be configured to run in parallel and full data for the spectrograms can be used. I configured Steve's tab to include one page of images and one page of plots and fixed the scripts so that it corrects for daylight savings time (at the beginning of the running, the program prints 'DST' or 'Not DST').
Right now, I am focusing on making coherence plots in a spectrogram style (similar to the matlab 'coh_carpet' function) and a spectrogram depicting Gaussianity (similar to the plots made by the RayleighMonitor). I have also been working on my final paper and presentation.
This week I took more data for the calibration of YARM. The summary of measurements taken is:
1. Peak-to-peak on Michelson
2. Michelson open loop
3. Excite ITMY and measure on AS55_Q_ERR
4. Excite ITMY and measure on POY11_I_ERR
5. Excite ETMY and measure on POY11_I_ERR
6. YARM open loop
Then I worked on comparing these measurements to the Simulink model of the interferometer control loop. The measured open loop transfer function of the YARM matched well with the model above about 20 Hz, after the gain was scaled properly to fit the data. Next is to fit the length response function of the model and the measurements, and then use DTT to calibrate the arm cavity's power spectrum.
I just wrote a short description of how to run the daily summary pages and the configuration process for making changes to the site. It can be found in /users/public_html/40m-summary and is named README.txt. If I need to clarify anything, please let me know! The configuration process should be relatively straightforward, so it will be easy to add plots or change them when there are changes at the 40 meter.
I modified my Simulink model of the YARM to match the new filter modules Rana installed on YARM. I also scaled the open loop transfer function of the model to fit the measured open loop transfer function at the unity gain frequency, as shown in the figure below. From this I produced the length response function correctly scaled, also shown below. Then I applied the calibration factor to the YARM data measured in /users/Templates/Y-Arm_120815.xml. Both the uncalibrated and calibrated spectra are included below.
To taste the strangeness of the current 40m PRC, I locked the PRMI with the guide of Koji.
We first aligned MICH by mostly tweaking ITMX, assuming that ITMY is in a good place as the Y-arm locks. MICH lock was stable.
Then we restored the IFO to the PRM_SBres mode. With a bit of alignment work on PRM and gain tweaking, the PRMI locked.
Also the PRMI was not so stable. Especially, when the alignment fluctuates, the optical gain changes and the loop becomes temporarily unstable. We took POP_DC as the guide for the gain change and normalized the PRCL error signal with it. To do this smoothly, we first changed the input matrix to route the PRCL error signal, which is REFL33_I, so that the signal also goes to the MC filter bank. Then with dtt, we monitored the spectra of the PRCL_IN1 and MC_IN1. We tweaked the value of the element in the normalization matrix for the MC path until the two spectra look the same (at this moment, the normalizing factor for the PRCL path was still zero). During this process, we noticed that the MC path signal (normalized by POP_DC) is noisier at above 500Hz. This was because the POP_DC has a large noise at high frequencies. So we put a low pass filter (100Hz 2nd order Butterworth) to the POP_DC filter bank to reduce the noise. Then the two spectra looked almost the same. The correct normalization factor found in this way was 0.03. So we put this number in the normalization matrix for PRCL. It did not break the PRMI lock.
After the normalization is turned on, the PRMI lock became somewhat more stable. However, the POP_DC was still fluctuating a lot, especially when the alignment is good. So I made a boost filter: 5Hz pole Q=2, 15Hz zero Q=1.5. I also made this filter automatically triggered when the PRMI is locked. This made the PRMI lock acquisition quicker. However, still the POP_DC fluctuation is large. It seems that the alignment of PRC is really fluctuating a lot.
The current UGF of PRMI is about 150Hz with the phase margin over 50deg.
Tonight, I worked on the X-arm locking again. I did not have any significant progress, but observed several issues and will give some suggestions for future work here.
What I did tonight was basically re-alignment of the X-arm (because Rana touched the PZT mirrors for the Y-arm alignment, the X-arm alignment was screwed up). Then I measured the open loop gain. Of course it was almost identical to the one posted in this entry. It reminded myself of how small the phase bubble is. This means we have to finely adjust the gain to set the UGF at the right frequency, i.e. 100Hz. So I decided to do the signal normalization using the TRX power. Using the MC path method described here, the appropriate normalization coefficient was determined to be 1.6, when the XARM gain is set to 0.05. Using burtgooey, I updated the burt snapshot used by the X-arm restore script.
Now I observed the following things:
When the normalization is used, the lock itself is stable, but the lock acquisition takes loner (i.e. fails more often).
I don't know the exact reason, but here is my guess: Usually, the error signal is divided by the square root of the transmitted power to widen the linear range of the PDH error signal. However, what I'm doing here is dividing the error signal with the power itself, not the sqrt. This might distort the error signal in a not-friendly-for-lock way ? I don't know.
I checked the c1lsc FE code. There seems to be the sqrt(TRX) and sqrt(TRY) signals computed in the code. However, these are not used for the normalization.
Now, there are two requirements. When dragging the mirrors into the resonance, we want to normalize the error signal with sqrt(TRX). When the mirrors reach the resonance, the gain of the loop must be normalized by TRX. How do we smoothly connect those two states ? Someone should spend some time on this. Maybe I will work on this in Japan.
We really need a time delay in the filter trigger
The automatic filter trigger is awesome. However, the [0^2:5^2] filter, which is an integrator, takes time to switch on and off. Every time the cavity passes by a resonance, this filter gets turned on and off slowly, giving some large transients. This transient combined with the bad coil balance of ETMX sometimes made the optical lever of ETMX crazy. This can be avoided by turning on this filter a few seconds after the power reaches the threshold. As Rana suggested, we should be able to put an arbitrary time delay to the filter trigger.
Someone should balance the coils
The coil balance of ETMX is bad and causing the above mentioned problem. I tweaked the coil balance by injecting a sinusoidal signal (10Hz) into ETMX pos and trying to minimizing the spectral peak in the optical lever signals. Of course, this is a cheesy work. Someone should put more serious effort on this.
A civilized interferometer should have an auto-alignment capability
After my alignment work, the X-arm power got to about 0.7. (This is probably because the MC transmission power has been low for the past 5 hours or so (attachment 1)).
In anyway, after the cavity locked to the TEM00 mode, the alignment has to be automatically improved by dithering. It is anachronism to sit down and click on the MEDM screen until the power gets big enough.
I've noticed that we're experiencing this bug which was previously seen at LHO. We cannot enter 10 digit GPS times into the time fields for DTT due to a limit in TLGEntry.cc, which Jim Batch fixed in September of last year. Seems like we're running an old version of the GDS tools.
I checked the Lidax tool (which you can get from the GDS Mainmenu). It does, in fact, allow 10 digit entries.
MC and PMC vis:
MC REFL Unlocked = 4.4
MC REFL Locked = 0.67
1 - Locked/Unlocked = 85%
PMC REFL Unlocked = 0.270
PMC REFL Locked = 0.013
1 - Locked/Unlocked = 95%
I checked (by looking through recent trends) that the zero level is zero on both channels. I tried to do a proper mode scan, but we have lost the PSL fast channels during the upgrade sadly. Also, the DC signal for the PMC REFL needs some gain. Unlocked level should be more like 3-5 V.
Also used the instructions from this page to add Google's sources to rosalba's apt-get list and then installed Chrome.
We are discussing venting first thing next week, with the goal of
diagnosing what's going on in the PRC.
Reminder of the overall vent plan:
Since we won't be prepared for tip-tilt installation (item 2), we should
focus most of the effort on diagnosing what's going on in the PRC. Of
the other planned activities:
(1) dichroic mirror replacement for PR3 and SR3
Given that we'll be working on the PRC, we might consider going ahead
with this replacement, especially if the folding mirror becomes
suspect for whatever reason. In any case we should have the new
mirrors ready to install, which means we should get the phase map
(3) black glass beam dumps:
Install as time and manpower permits. We need to make sure all needed
components are baked and ready to install.
(4) OSEM mount screws:
Delay until next vent.
(5) new periscope plate:
Delay until next vent.
(6) cavity scattering measurement setup
Delay until next vent.
I cleaned up my directory (/users/masha) today. A lot of the files are just code that I experimented with, but the important files for training the classification neural network are in "neural_network_classification". The "EarthquakeData" subdirectory contains my entire dataset. Files of the form "GenerateRNNInput" are used to create input vector sets to the network, while files of the "*NeuralNetworkClassification* actually run the code that generates the neural network vectors for the classification code block in the c1pem model.
Also, the folder "feed_c", which can also be found in Den's directory, contains the neural network controller code we played around with.
Friday / pre-vent:
[done] Align the MC mirrors for the incident beam so that the mirrors can be the alignment reference [Koji]
[in progress] Center spots on MC mirrors [Jenne]
Put beam attenuator optics (PBS + waveplate) on PSL table, realign input beam to MC mirror centers
[In progress] See if we can design a set of nuts and bolts to use at bottom of tiptilt optic ring, to do small adjustments of pitch alignment [Steve]
After doors open:
Use CCD (Watek, with AGC on) to take images of everything we can think of, to see current status of clipping
Check that we get through the Faraday without clipping
Move PZT1 and MMT mirrors to get good spot positions on PR3, PR2. Make sure we're clearing the Faraday's housing
Install dichroic optics, perhaps completely readjust pitch alignment of those tiptilts (we will measure the spares later, and call that good enough for our phase mapping).
Use some kind of oplev setup to check pitch alignment of PR2, PR3.
Tweak (if necessary) PR2 & PR3 pitch to go through center of PRM, BS, hit center of ITMY
Check that we're not clipping on the BS cage anywhere
Use CCD to take images with Sensoray of everything we can think of, to confirm we don't have clipping anywhere. Want to see the edges of the beam on the targets, which would mean that the beam is hitting the center of the optic. If necessary, we'll stay open an extra day to get good camera images everywhere, so we have a good record of what's going on inside.
Note: While having good arm alignment would be good, we're willing to sacrifice some arm alignment to have good DRMI alignment, since we're re-venting and installing the new active tiptilts in another month or so.
Things I'm leaving for Jamie-the-Vent-Czar to plan:
Order of door opening
Beam dump assembly and placement
We're discussing the plan for the next vent. Now that we have all the tip-tilt stuff in hand, we should get ready for the big TT installation vent ASAP. The question is what remains to be done, and when can we be ready
Stuff that needs doing:
* characterize TTs, check electrical connection of quadrupus cables, bake cables and base plates - a week or so (not including baking)
* phase map of LaserOptik mirrors (decide on needed resolution) - a week or so?
* get ready to swap G&H mirrors with LaserOptik mirrors (PR2, PR3, SR2, SR3)
* assembly of black glass beam dumps - one afternoon
* green periscope moving - day or so to make sure greens are resonant in arms, so we have something to align to
* redraw of REFL path?? (rotate 2nd refl mirror to reflect beam to the east, then add mirror to get beam out of IOO chamber viewport), cut hole in BS oplev table's box, install black beam tube
* FI camera mount - make sure it's here, baked
* active TT pitch damping plan
* passive TT weight addition and pitch alignment plan
* camera plan for taking in-chamber photos without touching the tables
* look at layout of ITMY table. POY pick-off too close to main beam. Can we move POY pick-off to BS table?
* remount black glass baffles on SOS cages.
Stuff to bake:
* Quadrupus cables
* TT base plates
* FI mirror mount for FI camera
* stuff to add to active TTs
* stuff to add to passive TTs
I see 4+ possible paths for us to take, in terms of a possible vent in the next few weeks:
No Vent - Just do FPPRMI, using AS55
Mini Vent - Fix REFL path, nothing else. ~1 day at atmosphere
Medium Vent - Fix REFL path, swap G&H mirrors for LaserOptik mirrors (so also resuspend passive TTs, maybe add pitch adjustment option). ~1 week or so at atmosphere - do this rather than Mini if Jan's Finesse calc says the G&H mirrors are too rough
Mega Vent - Fix all the things, do all the things. Long time at atmosphere
The "+" is to take into account all the possible variations on "medium vent". The No, Mini and Medium options assume we'll do the Mega option later, just not immediately.
Just in case we want to retrofit the Tip/Tils with Beryllium Copper wire, here are links to a few sources which have a supply of the right composition and temper:
I don't think its worth it to do something to modify them unless we get a real reduction in the hysteresis - need a benchtop test setup ASAP.
i just heard a rather large exploding sound in the control room.
I tried to locate the source and found the projector is not illuminating the wall anymore.
There is a slight smell of burning, but nothing is smoking.
Probably the lamp ended its life.
Rana and I just talked about the projector life time an hour ago! It must have been hearing!
i just heard a rather large exploding sound in the control room.
I tried to locate the source and found the projector is not illuminating the wall anymore.
There is a slight smell of burning, but nothing is smoking.
We should try purchase a projector with LED this time...longer lifetime! I guess the price of replacing the lamp in the one we have will be more or less same as a new one!
...Nah. The projector is pretty new (t<1yr) and this is the first time to have the lamp busted after the installation last year in Jan.
We just should purchase two bulbs.
First Contact Training with Margot
- A new projector lamp installed.
- The old lamp lasted 8751 "equivalent lamp hours".
- The old lamp was found being shattered inside. It contains mercury.
So next time you hear the explosion sound of the lamp, establish the ventilation of the room and escape for an hour.
I calculated thermal noise in mode cleaner (MC) mirrors and compared it with the measured MC noise. Thermal noise won't be a significant noise source for MC.
There is an idea of using MC and a refcav to measure coating thermal noise. One laser is frequency locked to MC, another laser is locked to an 8" refcav. Then the two transmitted beams are recombined so that we can readout the frequency noise. In this case, the transmitted beam from MC is a better reference (less frequency noise) than the beam from refcav. However, we need to make sure that we understand the noise sources, for example brownian noise, thermoelastic noise in both substrates and coatings, in MC more thoroughly.
I used Rana's code for MC's technical noise sources from, svn. The same plot can be found in appendix C of his thesis. Then I added my calculation to the plot. Jenne pointed me to 40m:2984 for the spot size and the cavity length. The spot radius on MC1 and MC3 is ~ 1.5mm, and ~3.4 mm@MC2, The round trip length is ~27m, thus the frequency fluctuation due to thermal noise is lower than that of refcav by 2-3 orders of magnitude. I calculated Brownian noise in coatings, Brownian noise in substrate, Thermoelastic noise in substrate. I assumed that the coatings are SiO2/Ta2O5, quarter stacks, coatings thickness for MC1/3 = 5um, for MC2 = 8um. The code can be found in the attachment.
Total thermal noise on MC (Brownian + Thermoelastic on substrate and coatings of MC1-MC3) is plotted in dashed red. It is already below 10^-5 Hz/rtHz at ~20 Hz. This is sufficiently low compared to other noise sources. Beat signal from CTN measurement with 8" cavities is plotted in pink, the estimated coating brownian noise is plotted in a yellow strip. They are well above the measured MC noise between 100 Hz to a few kHz. Measuring coating thermal noise on 8" refcav seems plausible with this method. We can beat the two transmitted beams from IMC and refcav and readout the beat signal to extract the displacement noise of refcav. I'll discuss this with Koji if this is a good surf project.
[the internal thermal noise in the original plotted is removed and replaced with the total thermal noise plot instead]
note:I'm not sure about the current 40m MC configuration. The parameters used in this calculation are summarized in mcnoiseS2L1.m (in the svn page).