在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 7511|回复: 6

[原创] 多速率滤波器级联后的----频率响应

[复制链接]
发表于 2012-8-7 11:35:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

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;





发表于 2012-8-8 00:03:11 | 显示全部楼层
可通过冲击脉冲响应进行测试
 楼主| 发表于 2012-8-8 09:05:19 | 显示全部楼层
回复 2# pusher_yxg


    不太明白怎么用冲击响应来测试,能说说具体点吗
 楼主| 发表于 2012-8-17 12:10:15 | 显示全部楼层
回复 2# pusher_yxg


    大侠,我写了个很简单的程序,
fs = 1000;    % 采样频率
N = 2^10;    % 点数
x = [1,zeros(1,N-1)];  %%% 脉冲信号
%%%%%%%%%%%%%%%%%%%%% HBF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
b = [-53 0 313 0 -1155 0 4989 8192 4989 0 -1155 0 313 0 -53]/2^14;
[h,f] = freqz(b,1,1024,fs);
subplot(3,1,1);
plot(f,20*log10(abs(h)));
title('滤波器频率响应');
xlabel('Frequency/Hz');
ylabel('dB');
grid;
%%%%%%%%%%%%%%%%%%%%%%% Filter and Spectrum Analysis %%%%%%%%%%%%%%
y = filter(b,1,x);
subplot(3,1,2);
plot(y);
title('滤波器输出信号');
xlabel('Frequency/Hz');
grid;
Xk = fft(y,N);
mag = abs(Xk)*2/15; % 我看第二张图,输出信号的能量集中在前面15个数据,所以这里分母为15
f = [0:N-1]*fs/N;
subplot(3,1,3);
plot(f(1:N/2),20*log10(mag(1:N/2)));
title('输出信号的频谱');
xlabel('Frequency/Hz');
ylabel('dB');
grid;
可是我发现,最终,输出信号的频谱和滤波器的频率响应形状一样,可是纵坐标并不一样,这是为什么呢,
不一样的话,不能用这个频谱代表滤波器的频率响应吧?
QQ截图20120817113653.jpg
发表于 2012-9-11 22:21:36 | 显示全部楼层
bucuo ....
发表于 2013-10-14 17:21:49 | 显示全部楼层
回复 1# whyyxn


    楼主,
    这个问题你现在清楚了吗?
    能不能详细解释一下
    谢谢!
发表于 2017-9-27 13:49:31 | 显示全部楼层
哎,现在也有这种疑问;
感觉z域本身就蕴含了采样频率的前提的,实在想不通多采样率的z域应该怎么理解
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-21 01:24 , Processed in 0.033390 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表