基于MATLAB的FIR半带滤波器系数生成方法

描述

用matlab设计滤波器时,我们会使用到fdatool工具, 首先大概说一下这个工具的使用。 假设我们需要设计一个半带抽取滤波器: 采样率Fs为122.88MHz。 通带Fpass: 10 MHz, 带内波动: Apass: 0.001

输出波形

定点化,将系数归一化,设置如下图,确保输入通带的波形和输出波形幅值基本不变。

输出波形

上述操作等效为以下matlab代码:

Apass = 0.001;
Fpass = 10;
Fsa = 122.88;
 
z = 10 ^ (Apass / 20.0);
ap = (z - 1) / (z + 1);
fs = Fpass * 2 / Fsa;
 
b = firhalfband('minorder',fs,ap);
b = round(b*2^15);
plot(b);
grid;
I = find(b < 0); 
b(I) = 65536 + b(I);
c = [ dec2hex(b)]; 
fid1 = fopen('d:filter1.coe','w');  
fprintf(fid1,';Create by gzy de tool 
'); 
fprintf(fid1,'Radix = 16;
'); 
fprintf(fid1,'Coefficient_Width = 16;
');  
fprintf(fid1,'CoefData = 
');  
for i = 1 : length(b)-1  
    fprintf(fid1,'%s,
',c(i,end-3:end));    
end;  
fprintf(fid1,'%s;
',c(end,end-3:end));   
fclose(fid1);

半带抽取就是利用上述系数进行滤波之后,2个点抽取1个点即可

半带插值就是先插0,然后利用上述系数进行滤波后,幅度会衰减一半,需要补偿

审核编辑:黄飞

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分