马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 cjsb37 于 2013-4-29 08:55 编辑
请教大家一个问题,两个滤波器级联,如果都工作在相同的采样频率下,总的频率响应可以直接在频域相乘得到;
但是在数字上、下变频中,由于各滤波器工作在不同的采样频率下,因次总的频率响应不能直接在频域相乘得到,
那要怎么算呢。
下面是我写的一小段程序,程序很简单,就是两个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;
|