发布时间 : 星期四 文章借助matlab生成Altera数字滤波器IP核方法更新完毕开始阅读49fb5b150b4e767f5acfcebf
数字滤波器生成方法
1. Matlab
输入fdatool,打开设置窗口,设置参数。
保存设计文件,后缀名.fda,下次使用时,可以用fdatool工具打开该文件 导出设置参数,先把系数导出到变量空间,file-improt-选择workspace,可以输入保存变量名如num。
也可以把设置保存为.m文件,在matlab编程中直接调用即可。 2. quartus生成IP核
把变量空间的变量num写到txt文件,要采用浮点数保存。
%滤波器的coe文件,由fdatool产生系数变量到变量空间再写到txt文件,送给QUARTUS IP核使用
fid=fopen('BANDPASS_FIR_COE.txt','w');
fprintf(fid,'%d\\n',BANDPASS_FIR);%设置书写格式5.0d表示长度5位十进制,0表示精度,补空格,有正负号显示。':'表示区隔 fclose(fid);
设置IP核直接导入txt文件即可。可以在time response& coefficient values看到浮点数对应的定点数。其实就是将浮点数放大到一定倍数然后取整得到。 3. 使用生成的数字滤波器在matlab中仿真。 利用其中的.m文件对matlab数组进行滤波。
假设需滤波的信号数组为input,滤波器导出的m文件为AD_AFT_FIR.m 则编程如下:
Hd = AD_AFT_FIR; %′?í¨??2¨
output = double(filter(Hd,input)); figure(2) plot(output)
4. Quartus结果与Matlab结果比较 先对matlab建立定点模型。
根据IP核中的定点模型的放大倍数,对num数组进行定点放大。假设IP核的放大倍数为c,则对num数组进行如下处理: a=num; a=a*c;
for i=1:length(a) if a(i)>=0
a(i)=floor(a(i)); else
a(i)=ceil(a(i)); end
得到的a与ip核的定点系数相等,(好像在最大值出两个相差了1.但是对滤波后的结果影响应该不大)
利用数组a,对输入信号input进行滤波 output= double(filter(a,1,input));
output应该和modelsim运行的结果一致