Filtering FIRCLS1 and evaluate kernel and its power spectrum
1 次查看(过去 30 天)
显示 更早的评论
Dear all,
I would like to filter my data using FIRCLS1. Unfortunately I did not get out filtered data. Filter properties are:
order = round (8*srate/cutoff); % length of the filter kernel in the time domain
cutoff_cls1 = 0.3; % normalized cutoff value corresponding to nyquist
pb_ripple = 0.0002; % upper bound: bandpass (PB) ripple (Durchlassbereich: oberhalb der Grenzfrequenz von 3Hz)
sb_ripple = 0.0002; % lower bound: bandstop (SB) ripple (Bandsperre unterhalb der Grenzfrequenz von 3Hz))
Ideal filter response:
shape_cls = [1 1 0 0]; % y-axis
frex_cls = [0, cutoff_cls1 * 10 , cutoff_cls1 * 10, srate/2] / (srate/2); % z-axis
Generate filter kernel
filtkern_cls1 = fircls1 (order,cutoff_cls1, pb_ripple, sb_ripple);
FFT to inspect the power spectrum of the kernel
hz_filtkern_cls1 = linspace (0, (srate/2), (pnts_first_last (1,:)/2) + 1);
filtkernX_cls1 = abs (fft (filtkern_cls1, pnts_first_last (1,:)));
Some plotting
% % evaluate filter kernel and its power spectrum
%
figure (7), clf
subplot (221)
plot ((-order / 2 : order/2) /srate, filtkern_cls1, 'k', 'linew', .5);
xlabel ('time [sec]')
title ('filter kernel (fircls1)')
%
% % plot the ideal filter
%
figure (7),
subplot (222); hold on;
plot (frex_cls * srate/2, shape_cls, 'r', 'linew', 1)
set (gca, 'xlim', [0 6])
set (gca, 'ylim', [0 2])
%
% % plot the power spectrum of the filter kernel
%
plot (hz_filtkern_cls1, filtkernX_cls1 (1:length (hz_filtkern_cls1)), 'k')
xlabel ('frequency (Hz)')
ylabel ('gain')
title ('filter kernel spectrum')
hold off;
%
Apply the filter to the signal
for i=1:numel(data)
data(i).filt_first_last_cls1 = filtfilt(filtkern_cls1, 1, data(i).acc_pelvis_first_last);
end
further plotting
subplot (2, 2, [3 4])
plot (data(1).timevec_first_last, data(1).filt_first_last_cls1)
set (gca, 'xlim', [200 215])
xlabel ('time (sec)')
ylabel ('amplitude')
title ('filtered acceleration signal pair1_FIRCLS1')
The result is not I would expect. The power spectrum of the kernel ends at 300 Hz instead of 3 Hz (see black line; ther red one is the the ideal filter response. Subsequently data is not filterd as prefered:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/927749/image.jpeg)
Does anyone has a suggestion?
Kind regards,
Jonas
1 个评论
Star Strider
2022-3-15
Use the freqz function to see the Bode plot of the fillter. That will tell you if it is designed correctly.
回答(1 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Pulsed Waveforms 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!