【问题标题】:Chebyshev IIR FIlter: Got Coefficients, what next?Chebyshev IIR 过滤器:得到系数,下一步是什么?
【发布时间】:2014-03-14 14:24:26
【问题描述】:

这是我的 Matlab/Octave 程序

clc;
close all;
%BPF of pass 400-600Hz
fs1=300;
fp1=400;
fp2=600;
fs2=700;
samp=1500;
ap=1;   %passband ripple
as=60;  %stopband attenuation
%Normalizing the frequency

wp=[fp1 fp2]/(samp);
ws=[fs1 fs2]/(samp);

[N,wn]=cheb1ord_test(wp,ws,ap,as); %Generates order  and cutoff parameters
[b,a]=cheby1(N,ap,wn); %Generates poles and zeros for the given order and cutoff

printf("b coeffs = %f\n",b);
printf("a coeffs = %f\n",a);

[H,W]=freqz(b,a,256); 
plot(W/(2*pi),20*log10(abs(H))) %Transfer function works correctly, so coefficients are correct

 %100 samples of 500hz
n = 1:100;  
 x=10*cos(2*pi*n*500*(1/samp)); 

printf("Order %d\n",N);    %Depends on required ripple attenuation
figure;

subplot (2,1,1); plot(x);

y=filter(b,a,x); %**Apparently i suspect this does not work**

subplot (2,1,2); plot(y);

当我看到幅度/频率响应时,图表很完美,表明 400 和 600 是我的滤波器截止值。

但是,当我应用 500Hz 的输入信号时,我必须期望看到信号完好无损地通过滤波器(正如我使用巴特沃斯函数时观察到的那样),但输出失真并且几乎不包含任何信号

所以我推断我的错误是使用滤波器函数将切比雪夫系数与输入信号结合起来。

如果这是问题所在,那么我如何将切比雪夫系数应用于输入数字信号?

【问题讨论】:

    标签: matlab signals signal-processing octave


    【解决方案1】:

    对于 cheb1ord 和 cheby1,频率在 0 和 1 之间进行归一化,其中 1 对应于采样频率的一半。你应该得到你的 wp 和 ws 使用

    wp=[fp1 fp2]/(samp/2);
    ws=[fs1 fs2]/(samp/2);
    

    其中 samp 是您的采样频率。

    【讨论】:

    • 谢谢,这解决了我的问题
    【解决方案2】:

    我认为问题在于您的 x 信号:我不太清楚它是什么,但我可以告诉您它不是什么,这是一个 500Hz 的输入信号。

    我会先定义时间向量,然后应用 cos 函数(我假设您以 1500Hz 采样):

    f_input = 500; %Hz
    t = 0:1/samp:1; % Time vector [0,1] sampled at 1500Hz
    x = 10*cos(2*pi*t/f_input); % 500Hz input signal
    

    【讨论】:

    • 实际上我在这里发布的输入信号是错误的,我现在编辑了我的问题,我尝试了你发布的输入 isgnla 但仍然没有运气......
    猜你喜欢
    • 1970-01-01
    • 2014-10-07
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 2016-07-30
    • 1970-01-01
    相关资源
    最近更新 更多