用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,然后利用上述系数进行滤波后,幅度会衰减一半,需要补偿
审核编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !