Wednesday, January 15, 2020

Noise Shape Filter to obtain a given PSD


I have experimental PSD data of disturbances in terms of acceleration on a mass. My first problem is that these data are presented as $ (m/s^2)/\sqrt(Hz)$ which is not the PSD unit. Those unit should be adressed to an amplitude spectral density (ASD) which is directly $ ASD = \sqrt{PSD}$. (I am not sure of that either, beacuase in some books the relations takes into account $\sqrt{2}$. However, my idea is to reconvert into a transfer function (TF) the PSD and then use that TF as a filter. Infact, if the TF is fed by a white noise ($ W(f) = 1$) the output of the filter operation is $ H(f)*1$ i.e. the colored noise in frequency domain $C(f)$. Thus $$ PSD =|H(f)|^2 $$ So I can interpolate the given points and use a least square method to obtain the chosen number of coefficients of the TF $$ min(a_z, b_p) \sum_{i} (|H(2\pi j f)|- \sqrt{PSD}|)^2 $$ ( I don't really know how to do this). My other option is to hit and trial whit some tf Below, there is an image of the data. enter image description here


To finish I am leaving here what I have done on Matlab


% TRIAL AND ERROR PROCEDURE
% clear all
% close all


% EL ACT data
% points
x = ([0.06 0.1 0.12 0.2 0.24 0.4 1 2 3 10].*1e-3);
y = ([500 150 100 40 30 20 13 12 12 12].*1e-15).^2; % now is a PSD?
% plot(x,y) %trial and error to make the interpol suitable
%
loglog(x,y)
hold on
loglog(x,y,'o')


%%
xlog = log10(x);
ylog = log10(y);

% fitting
N = 1000;
pp = polyfit(xlog,ylog,3);
freq_log = linspace(xlog(1),xlog(end),N);
ELEM_sensing_ASD_log = polyval(pp,freq_log);

ELEM_sensing_ASD = 10.^ELEM_sensing_ASD_log;
freq = 10.^freq_log;
loglog(freq,ELEM_sensing_ASD) %fitted?

%%%%%%%%%%%%
% Data from Ref
s = tf('s');
H_EL = ((s+2e-5)*(s+3e-5)*(s+3e-4))/((s+2e-6)*(s+5e-6)*(s+1e-5));
Num = cell2mat(H_EL.Numerator);
Den = cell2mat(H_EL.Denominator);

[A,B,C,D] = tf2ss(Num,Den);


%% Simulink
T_filter = 100;
% open('noise_shape_trial_SIM')
sim('noise_shape_trial_SIM')

Simulink


%%

segment_lenth_sample = 1e4;
overlap = 0;
DFT_points = 4e4;
f_sampling = 1000;
[PSD_color,f] = pwelch(color_time); %,segment_lenth_sample,overlap,DFT_points,f_sampling);
loglog(f,(PSD_color))
grid on


No comments:

Post a Comment

digital communications - Understanding the Matched Filter

I have a question about matched filtering. Does the matched filter maximise the SNR at the moment of decision only? As far as I understand, ...