Using the techniques employed at LLO, and then by Rana here at the 40m a few weeks ago, Wiener filters have been installed on the inputs of all of the PEM IIR channels which are hooked up to the 110B PEM ADCU. Some slight modifications have taken place to the code, and it's all been checked in to the 40m svn.
I have installed the filters into: All 6 Wilcoxon accelerometers, the Ranger seismometer, and one of the Guralps (GUR1). The other Guralp is currently connected through the ASS/OAF machine's ADC, so it's not used in this test. The filters are all labeled "Wiener", and are FM1 in the C1:ASS-TOP_PEMIIR_## filter banks.
The first figure below is the output of the Wiener Filter calculation program. It shows the uncorrected MC_L (black) and the corrected MC_L (red), using the optimal wiener filter. This is as good as we should be able to do with these sensors in these positions.
The second figure is a DTT shot of me trying out the nifty new filters. They seem to maybe do a teensy bit on the microseism, but otherwise it's a bit unremarkable. Hopefully I'll get better subtraction during the day, when the base level for MC_L is higher. Here, Black is uncorrected MC_L, Red is the corrected MC_L, Blue is the actuation channel, and green is an example seismometer channel to illustrate the ground motion at the time.
For posterity, since it's not all in one elog that I can find, the order of operations to install a Wiener Feed Forward filter is as follows:
1. (When you can borrow the IFO) Take a very careful TF of the plant, between your actuation point and your error signal readout. At the 40m, this means between C1:ASS-TOP_SUS_MC1_EXC and C1:IOO-MC_L, since we actuate by pushing on the MC1 coils. At the sites / future 40m, this would be between the HEPI (or STACIS) and the error signal. The limit of how good your Feed Forward can do will depend heavily on how good this TF is. Coherence should be above ~0.95 for all points. Export this data from DTT as a .txt file, using units "Complex (abs/rad)".
2. Run fitMC12MCL.m (or equivalent wrapper file) to fit the transfer function you just took with some Poles and Zeros. Make sure to edit the wrapper file with your new .txt file's name so you're getting a fresh TF (if you've just taken one).
3. (Again, when you can borrow the IFO) Run getMCdata.m (or equivalent) to fetch witness channel data and error signal data. At the 40m, this usually means C1:IOO-MC_L, and witness sensors which are around the MC chambers. This data should be taken at a time when the cavity is locked, but pretty much on it's own. (i.e. probably shouldn't have Common Mode feedback on the MC - so the MC should be locked, but not the full IFO, for example.)
4. Run c1winoiir.m (the main program here, which contains some of these notes). This will take in the TF data you've fit, and the witness channel data you have, and calculate the optimal combination of Wiener filters for your witness channels. It pre-filters your witness data by your TF, then calculates the Wiener filter. The resulting FIR filters are saved in a file.
5. Run firfit.m This will take the FIR Wiener filters you've just created, and convert them conveniently to IIR filters, in a format to be copied directly into Foton. For each witness channel, you'll get the IIR filter in 2 formats: the first is for copying into the Foton .txt file (ex ASS.txt), and the second is for copying into the Foton gui, in the "Command" box on the filter design screen. The "o" at the end of the copy-able filter indicates to Foton that it is a Z-Plane Online filter. Copy filters appropriately (there should be a line preceding each set of SOS filter formats to indicate which channel this Wiener filter is for...these channel names are extracted from your getMCdata.m)
6. Save your Foton file, and update your Coefficients in MEDM. Enable your outputs to actuators, and watch magic happen!
On the To-Do list:
Check the transfer of signal btwn PEMIIR matrix and the 9x1 'matrix' that sends the signals to the SUS inputs. In the SimuLink, the input to the 9x1 matrix is a bundle of 8 numbers (the 8 outputs of the PEMIIR matrix), but it looks like it only pays attention to the first one. Need to figure out how to make it realize that it's a bundle, not a single number.
Also, the OAF up / down scripts don't seem to be working on any of the control room computers. This needs to be checked in to / fixed (but not tonight....)