40m
QIL
Cryo_Lab
CTN
SUS_Lab
TCS_Lab
OMC_Lab
CRIME_Lab
FEA
ENG_Labs
OptContFac
Mariner
WBEEShop

40m Log 
Not logged in 


Message ID: 522
Entry time: Fri Jun 6 11:19:13 2008

Author: 
Caryn 
Type: 
Summary 
Category: 
PEM 
Subject: 
Filtering MC_L and MC_F with PEM:ACC and microphone 


Tried to filter MC_L and MC_F with acc/seis data and microphone data using wiener filter (levinson)
Used get_mic_data.m and miso_filter_lev.m to make SISO filter for 2 minutes of IOOMC_F data. Used PEMAS_MIC signal as noise input data. Filters calculated at initial time were applied to later data in 1 hour intervals.
microphone filter did not seem to filter MC_F very well in high frequency range using this filtering procedure.
residual is larger than est (see MC_F pdf)
Used do_all_time_lev.m to make graph of max(rms(residual)) to N(order) for different times.(note for each N, filter was calculated for initial time and then applied to data at other times).
relation of max(rms(residual)) to N(order) is time sensitive (noteon graph, time interval is 1hour) (see MC_F pdf)
Presumably, max(rms(residual)) should decrease as N increases and increase as time increases since the filter probably becomes worse with time. I think the reason this isn't always true in this case is that the max(rms(residual)) corresponds to a peak (possibly a 60Hz multiple) and the wiener filter isn't filtering out that peak very well.
Used get_z_data.m and miso_filter_lev.m to make MISO filter for 2 minutes of IOOMC_L used the following signals as noise input data
PEMACC_MC1_X
PEMACC_MC2_X
PEMACC_MC1_Y
PEMACC_MC2_Y
PEMACC_MC1_Z
PEMACC_MC2_Z
PEMSEIS_MC1_Y
Filter was applied to later data in 2hour intervals.
Used do_all_time_lev.m to make graph of max(rms(residual)) to N(order) for different times.(note for each N, filter was calculated for initial time and then applied to data at other times).
acc/seis filter seemed to filter MC_L OK for 128,256,512Hz srates. 64 Hz wasn't ok for certain N's after a period of time.
residual is smaller than est for srates not 64Hz (see MC_L pdf)
residual is larger than est for 64Hz at N=1448 for later times (see MC_L pdf)
relation of max(rms(residual)) to N is not as time sensitive for higher sample rates (noteon graph, time interval is 2hours) (see MC_L pdf). Perhaps the levinson 64Hz sample rate filter doesn't do as well as time passes for these signals. When the filter didn't do well, the max(rms(residual)) seemed to increase with N.
For 512Hz sample rate filter the max(rms(residual)) decreased with time. If the max(rms(residual)) were an indication of filter performance, it would mean that the 512Hz filter calculated at the initial time was performing better later as hours passed by! Perhaps max(rms(residual)) isn't always great at indicating filter performance.
Programming notes
I had to modify values in do_all_time_lev.m to get the program to loop over the srates,N's,times I wanted
do_all_time_lev.m is not as clean as do_all_lev.m
for making the plots do_all_lev.m (which isn't really a procedure and is messy) has some examples of how to plot things from do_all_time_lev.m. 





function [s] = miso_filter_lev(N,srate,rat,z)
%MISO_FILTER_LEV(N,srate,z) uses miso_firlev to get levinson
% FIR Wiener filter of order N1, using impulse response of
% N/srate. z is a structure gotten from the get_data function.
% z(end) is the signal which is filtered using z(i) for all i.
% 'rat' is the fraction of z which will be put into filter
% funtion. The data from z is downsampled using srate and
% detrended. Let rat=1. I don't have that part working yet.
... 107 more lines ...


function[z,t0,duration]=get_mic_data(t,d_t,d)
%get_mic_data gets data for'C1:IOOMC_F', 'C1:PEMAS_MIC,
% Example: z = get_mic_data('now',120,60)
% start time is 't d_t' so d_t should be given in seconds. t should be given
% as a number like 893714452. d is duration in seconds. get_mic_data saves
% data to a file in current directory named 'temp_mic'. You will be asked to
% save file as 'mic_(start_time)_(duration)'.
duration = d;
... 32 more lines ...


function[r] = do_all_time_lev(n,t0,int,duration,N,srate,rat,order,time,MC_L,MC_F,sample_rate)
%do_all_time explores how filter performance changes with time, sample rate,
%and order of filter. Outputs data,noise estimate, structure of max
%rms error and other info. It uses get_data, miso_filter_lev, and miso_filter_int and retrives
%MC_Ldata or MC_Fdata for multiple times, calculates a miso_filter for initialtime data
%file, applies filter to the other data files, and keeps track of the...
%max(rms(residual)) for each filter. n+1 is number of data files. int is time interval between
%data files, t0 is start time, duration is duration of each data file, srate
%is the sample rate for which filter is calculated, n_N is number of orders
%of the filter you want the program to calculate,int_N is interval by which N
... 215 more lines ...


function[r] = do_all_lev(n,t0,int,duration,n_N,int_N,n_srate,int_srate,rat,MC_L,MC_F)
%do_all_lev explores how filter performance changes with time, sample rate,
%and order of filter. Outputs data,noise estimate, structure of max
%rms error and other info. It uses get_data, miso_filter_lev, and miso_filter_int and retrives
%MC_Ldata or MC_Fdata for multiple times, calculates a miso_filter for initialtime data
%file, applies filter to the other data files, and graphs the rms of the cost
%function vs time. n+1 is number of data files. int is time interval between
%data files, t0 is start time, duration is duration of each data file, srate
%is the sample rate for which filter is calculated, n_N is number of orders
%of the filter you want the program to calculate,int_N is interval by which N
... 283 more lines ...


function[r] = do_all_plot(r,x,v)
%do_all_plot plots variables contained in r(structure from
%do_all_time_lev).Plots error(r.B.y) vs x. x can be
%'s'(srate),'N'(order),'t'(time),'p'(impulse response). v can be 's','N','t'.
%example: do_all_plot(r,'s','t') makes a plot of error vs srate for
%different times.
kk=1
err_N_srate=0
... 388 more lines ...


function [s] = miso_filter_int(s,y)
%miso_filter_int inputs a filter and a structure array of data sets y, applies filter to data, and
%outputs a structure with fields: ppos(signal frequ spectrum),perr(cost
%function frequ spectrum),pest(signal estimate frequency
%spectrum),f(frequency),target(signal),est_darm(noise estimate),t(time).
%data file for which filter has been calculated is s (obtained using miso_filter).
%y consists of data structures which will be filtered using
%filter from s. Then the power spectrum of the difference between signal and filtereddata is
%graphed for all the data files of y for comparison too see how well filter performs
%over time. Note if you want to create a y, take z1,z2,z3,etc. structures
... 120 more lines ...
