首先大概说一下这个工具的使用。
假设我们需要设计一个滤波器:
采样率Fs为30.72MHz。
通带Fpass: 9 MHz,
阻带Fstop: 10MHz
带内波动: Apass: 0.1
带外抑制: Apass: 80
定点化,将系数归一化,设置如下图,确保输入通带的波形和输出波形幅值基本不变。
生成的COE文件可以直接被XILINX的 IP核使用。
如果上述生成滤波器系数的步骤,可以通过matlab代码来实现,则会更加的事半功倍。
例如,假如有一个这样的需求
采样率Fs为80MHz。
通带Fpass: 9+n0.5 MHz, (0<=n<=40)
阻带Fstop: 10+n0.5MHz (0<=n<=40)
带内波动: Apass: 0.1
带外抑制: Apass: 80
需要生成41组COE,每次都通过fdatool工具来进行生成,那将是繁琐的。而我们可以通过以下代码来简化工作:
figure(1); Apass = 0.1; Astop = 80; Fs = 30.72; Fpass = 9; Fstop = 10; dev = [(10^(Apass /20)-1)/(10^(Apass /20)+1) 10^(-Astop/20)]; [n,fo,ao,w] = firpmord([Fpass Fstop] ,[1 0],dev,Fs); b = firpm(n,fo,ao,w,{20}); bb = round(b*2^15); plot(bb); grid; hold on; I = find(bb < 0); bb(I) = 65536 + bb(I); c = [ dec2hex(bb)]; 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);
上面的代码与fdatool生成的定点化系数完全一致。
全部0条评论
快来发表一下你的评论吧 !