为什么Matlab设计生成的FIR滤波器不能正常应用?

问题描述 投票:0回答:1

代码很简单:

N = 40;
fs = 20 * 10 ^ 9;
freq = [0, 1 * 10 ^ 9, 2 * 10 ^ 9, 3 * 10 ^ 9, 5 * 10 ^ 9, 7.5 * 10 ^ 9, 10 * 10 ^ 9]
mag  = [1, 1,          1,          0.3,        0.1,        0.005,        0.001]

d = fdesign.arbmag('N,F,A', N, freq, mag, fs);
W = [1, 1, 1, 1, 1, 1, 1];
fir = design(d, 'equiripple', 'weights', W, 'SystemObject', true);

sents = ones(1, 300) * amplitude;
rcvds = fir(sents);

% plot
figure(1)
stem(sents_downsampled)
hold on
stem(rcvds)
legend('sents', 'received')

它应该是低通的。我输入的是直流信号。但输出信号极小:

通过查看

freqz
,过滤器似乎设计正确:

matlab signal-processing
1个回答
0
投票

你的滤波器是正确的,用

freqz
检查,你甚至可以给它一个阶跃响应,这就是你的直流信号所做的(直接从0开始的值)。这是结果:

问题是您将数据作为一行提供,因此过滤器应用于每一列。这意味着您最终得到一行,该行中的每一列都被视为要过滤的信号。要修复,请使用此:

sents = ones(1, 300)' * amplitude;

之后,你的情节将如下所示:

© www.soinside.com 2019 - 2024. All rights reserved.