【发布时间】:2016-08-20 21:08:15
【问题描述】:
我正在研究 MATLAB 中的信号过滤。我写了一个具有 3 个不同频率的信号:
Fs = 8000; %// Sampling frequency
T = 1/Fs; %// Sample time
L = 16000; %// Length of signal
t = (0:L-1)*T; %// Time vector
y = 40*sin(2*pi*50*t) + 500*sin(2*pi*51*t) + 500*sin(2*pi*49*t);
现在我想使用汉宁窗通过带通窗滤波提取 50Hz 信号。
这是我设计过滤器的代码:
function Hd = HannFilter1
Fs = 8000; %// Sampling Frequency
N = 4096; %// Order
Fc1 = 49.5; %// First Cutoff Frequency
Fc2 = 50.5; %// Second Cutoff Frequency
flag = 'scale'; %// Sampling Flag
win = hann(N+1);
b = fir1(N, [Fc1 Fc2]/(Fs/2), 'bandpass', win, flag);
Hd = dfilt.dffir(b);
之后,我使用filter 进行过滤,如下所示:
yfilter = filter(Hd.Numerator,1,y);
NFFT = 2^nextpow2(L);
Y = fft(yfilter,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);
figure;
subplot(2,1,1);
plot(yfilter);
subplot(2,1,2);
plot(f,2*abs(Y(1:NFFT/2+1)))
- 为什么这个滤波器无法提取 50Hz 信号?
- 我在这个模拟中做错了什么?
- 如何滤除 50Hz 信号?
50Hz 信号的最佳采样率是多少?和非常重要的问题!在现实世界中,如平衡系统,主信号约为 20Hz,环境噪音太大,我的解决方案过滤不能给出正确答案。在这种情况下,我该如何使用或选择最佳过滤算法?
如果我的采样率为 8000Hz,而我只能缓冲 20000 个样本,那么如何设计一个窄带通滤波器?
【问题讨论】:
-
这是一个荒谬的自然通带。您检查过滤波器的频率响应吗?
-
是的,过滤响应没问题,我发现了一个有趣的点!当我将 49Hz 和 51Hz 信号的幅度减小到 10(从 500)时,一切正常!为什么?!
-
还有一点!与其他信号密切相关的滤波信号的最大幅度! (49Hz和51Hz)反之,如果49Hz信号幅度增长到2000,(从500),滤波结果幅度一直在增长!!!但主信号(50Hz)幅度是固定的!我要疯了!!!!!!
-
使用
fvtool(Hd)检查过滤器。你会看到你的过滤器大约是。 -1dB @ 49Hz 和 51Hz,这可能不是你想要的。 -
是的!你说得对,但我不能增加过滤器的顺序。如果我将过滤器阶数增加到 65536,结果会有所改善。但是我无法更改过滤器顺序,还有其他方法可以提高过滤器性能吗?另一个问题是为什么其他信号幅度对主信号(50hz)影响很大?我怎样才能减少这种影响?
标签: matlab filtering signal-processing