Offset in filtered data when using filtfilt() Function
16 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hello,
when filtering my data using the filtfilt() Function, I get a offset in the filtered data.Can anyone tell me where this offset could come from and how to get rid of it?
Below is the code I use for filterdesign and actual filtering:
fg = 0.1; % Desired Cutoff frequency
fs = 1/(mean(diff(Time))); % Derive sample frequency fs from Time vector
fc = 2*fg/fs; % Calculate normalized cutoff frequency
d = designfilt("lowpassfir", 'PassbandFrequency', fc, 'StopbandFrequency',fc+0.5*fc) % Filterdesign as lowpass filter
filtered_data = filtfilt(d, unfiltered_data);
figure()
plot(Time, unfiltered_data)
hold on
plot(Time, filtered_data)
legend('unfiltered data', 'filtered data')
The figure below shows the result of some example data.
2 Kommentare
Paul
am 19 Nov. 2022
Hi Kletzi,
It will be easier to get help if you post the full code and data that recreastes the example in your question (or something close to it).
Antworten (1)
Paul
am 19 Nov. 2022
Thanks @Jan
The filter, d, does not have unity gain at dc.
fc = 0.4;
d = designfilt("lowpassfir", 'PassbandFrequency', fc, 'StopbandFrequency', 1.5 * fc);
dcgain = sum(d.Coefficients)
filtfilt attenuates the dc component of x by dcgain^2
(20 + .5)*dcgain^2 % 0.5 is the mean of rand
x = rand(1, 200) + 20;
y = filtfilt(d, x);
plot(x, 'b'); hold('on');
plot(y, 'r');
plot(filtfilt(d,20+0.5+0*x),'g');
0 Kommentare
Siehe auch
Kategorien
Mehr zu Digital Filter Analysis finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!