Filter Selection for Noisy Signal

2 次查看(过去 30 天)
Hello,
I am filtering a noisy signal that has a carrier frequency of 800 Hz, but was sampled at a very high frequency, ~250 kHz. I generated the following code, and it filters the signal, but produces a start-up transient (which doesn't filter the beginning of the data). It may just be a feature of the first order filter that I am using (which has a tau). Are there any other filters available that could accomplish my goal (filtering all of the data w/o a transient)? I attached 3 pictures: the first is the entire signal (zoomed out); the second is of the start up transient, and the third is of a portion of the signal that shows I am filtering it (at least in the time domain).
Fc = 800; % filter corner (Hz)
Wc = 2*pi*Fc; % filter corner (rad/sec)
tau = 1/Wc; % filter time constant (sec)
% First order lag
% 1
% G(s) = _____________
% tau*s + 1
num = [1];
den = [tau 1];
printsys(num,den); % analog filter
% Data sampled at 249,600 Hz
Ts = 4.0064e-06
% Convert analog filter to digital
[b,a] = c2dm(num,den,Ts);
printsys(b,a,'z');
den = [a(1) a(2)];
num = [b(1) b(2)];
test = filter(num,den,data);
figure; plot(data); hold on; plot(test, 'r')

采纳的回答

Star Strider
Star Strider 2018-3-26
If you have the Signal Processing Toolbox, use the filtfilt (link) function instead of filter.
  4 个评论
C. Robinson
C. Robinson 2018-3-27
编辑:C. Robinson 2018-3-27
When I tried filtfilt before, my input wasn't of type double, and that was the reason for me not getting a desirable response. I attached two plots; the one entitled Filtered Signal 3 displays filter vs. filtfilt, and the one entitled Filtered Signal 4 displays the filtfilt response on top of the noisy signal (no unwanted transient). I was able to do it with a first order filter. Thanks for your help! I really appreciate it.

请先登录,再进行评论。

更多回答(0 个)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by