通信人家园

标题: 多速率滤波器级联后的----频率响应  [查看完整版帖子] [打印本页]

时间:  2012-8-7 11:28
作者: whyyxn     标题: 多速率滤波器级联后的----频率响应

请教大家一个问题,两个滤波器级联,如果都工作在相同的采样频率下,总的频率响应可以直接在频域相乘得到;
但是在数字上、下变频中,由于各滤波器工作在不同的采样频率下,因次总的频率响应不能直接在频域相乘得到,
那要怎么算呢。
下面是我写的一小段程序,程序很简单,就是两个2倍抽取的HBF级联,怎么计算总的频率响应呢?
还有如果是插值的话,又该如何计算呢?
clear;
clc;
%%%%%%%%%%%%%%%%%%%%%%  第一个HBF,fs=10e6,2倍抽取 %%%%%%%%
fs = 10e6;
Wp = 1e6;         
Ws = fs/2 - Wp;                     
Rs = 60;         
fcuts = [Wp Ws];
devs = [10^(-Rs/20) 10^(-Rs/20)];
mags = [1 0];
[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fs);
if floor(n/2) == n/2
    n = n;
else
    n = n + 1;
end;
b = fir1(n,Wn,kaiser(n+1,beta),'noscale');
[h1,f1] = freqz(b,1,1024,fs);
subplot(2,2,1);    % 频响
plot(f1,abs(h1));
grid;
subplot(2,2,2);    % 频响(dB)
plot(f1,20*log10(abs(h1)));
grid;
%%%%%%%%%%%%%%%%%%%%%%  第二个HBF,fs=5e6,2倍抽取 %%%%%%%%%
fs = 10e6/2;
Wp = 1e6;         
Ws = fs/2 - Wp;                     
Rs = 60;         
fcuts = [Wp Ws];
devs = [10^(-Rs/20) 10^(-Rs/20)];
mags = [1 0];
[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fs);
if floor(n/2) == n/2
    n = n;
else
    n = n + 1;
end;
b = fir1(n,Wn,kaiser(n+1,beta),'noscale');
[h2,f2] = freqz(b,1,1024,fs);  % 频响
subplot(2,2,3);
plot(f2,abs(h2));
grid;
subplot(2,2,4);    % 频响(dB)
plot(f2,20*log10(abs(h2)));
grid;




通信人家园 (https://www.txrjy.com/) Powered by C114