|  | 
 
| 
本帖最后由 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;
 
 
 
 
 
 
 | 
 |