【问题标题】:Confusion in MATLAB filter roll offMATLAB滤波器滚降中的混乱
【发布时间】:2017-07-31 11:52:31
【问题描述】:

我在matlab中有如下代码:

L = 10000;
Power = -100;
A = 10^0.5;
Fs = 25e6;
fc1 = 100;
fc2 = 1e3;
fc3 = 10e3;
fc4 = 100e3;
fc5 = 1e6;
a1 = 2*pi*fc1/Fs;
a2 = 2*pi*fc2/Fs;
a3 = 2*pi*fc3/Fs;
a4 = 2*pi*fc4/Fs;
a5 = 2*pi*fc5/Fs;

x = wgn(1,L,Power);
y1 = zeros(1,L);
y2 = zeros(1,L);
y3 = zeros(1,L);
y4 = zeros(1,L);
y5 = zeros(1,L);
y = zeros(1,L);
for i = 2:L,
    y1(i) = (1-a1)*y1(i-1) + a1*x(i);
    y2(i) = (1-a2)*y2(i-1) + a2*x(i)/A;
    y3(i) = (1-a2)*y3(i-1) + a3*x(i)/A^2;
    y4(i) = (1-a2)*y4(i-1) + a4*x(i)/A^3;
    y5(i) = (1-a2)*y5(i-1) + a5*x(i)/A^4;
    y(i) = y1(i) + y2(i) + y3(i) + y4(i) + y5(i);
end
fft1 = fft(y);
fft1 = fft1(1:length(y)/2+1);
psd1 = (1/(Fs*length(y)))*abs(fft1).^2;
psd1(2:end-1) = 2*psd1(2:end-1);
freq = 0:Fs/length(y):Fs/2;
figure(3);
semilogx(freq,10*log10(psd1))
grid on

Ts = 40e-9;
z = tf('z',Ts);
H1 = a1/(1-(1-a1)*z^-1);
H2 = (a2/A)/(1-(1-a2)*z^-1);
H3 = (a3/A^2)/(1-(1-a3)*z^-1);
H4 = (a4/A^3)/(1-(1-a4)*z^-1);
H5 = (a5/A^4)/(1-(1-a5)*z^-1);
H = (H1 + H2 + H3 + H4 + H5);
figure(5);
bode(H),grid

此代码的目的是模拟闪烁噪声,其功率谱密度的斜率为 10dB/dec。
为了建模,有一个滤波器,其输出为y(i),输入x(i),在这种情况下为高斯白噪声。在滤波器的波特图(标记为图 5)中,我可以看到它具有 10dB/dec 的滚降,如我所愿。
但是,当我检查输出噪声(在这种情况下为 y(i))功率谱密度(标记为图 3)时,我看到 20dB/dec 的滚降。
有人可以解释一下我做错了什么以及为什么我无法获得 10dB 的功率谱密度滚降吗?

【问题讨论】:

  • 通过调试器运行它看起来会对您有所帮助。

标签: matlab signal-processing


【解决方案1】:

您的波特图使用一个传递函数,它是 5 个相似子滤波器的总和,每个子滤波器都使用一个系数 ai。在您的实现中,您同样应该有 5 个具有常规结构的子过滤器。但是,在复制每一行时,您已经为y3y4y5 留下了一些系数以使用a2。您应该通过简单地替换相应的a3a4a5 来获得预期的结果,如下所示:

for i = 2:L,
    y1(i) = (1-a1)*y1(i-1) + a1*x(i);
    y2(i) = (1-a2)*y2(i-1) + a2*x(i)/A;
    y3(i) = (1-a3)*y3(i-1) + a3*x(i)/A^2;
    y4(i) = (1-a4)*y4(i-1) + a4*x(i)/A^3;
    y5(i) = (1-a5)*y5(i-1) + a5*x(i)/A^4;
    y(i) = y1(i) + y2(i) + y3(i) + y4(i) + y5(i);
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 2011-02-15
    • 1970-01-01
    相关资源
    最近更新 更多