Board logo

标题: 利用matlab产生FPGA设计用滤波器系数的小技巧 [打印本页]

作者: pengpengpang    时间: 2014-3-9 10:27     标题: 利用matlab产生FPGA设计用滤波器系数的小技巧

用FPGA做数字信号处理时,经常会用到滤波器,而滤波器的系数经常是用MATLAB仿真产生的。通常在verilog文件中,我们会把滤波器的系数定义为参数,例如paramater c0 = 8'h11。可是将MATLAB产生的系数加到verilog文件中确实一件很麻烦的事。不仅要进行格式转换,还要按照verilog参数定义的格式去写每一个语句,很是繁琐。特别是在调试滤波器的时候,经常会尝试不同滤波系数,对信号滤波的效果,这样当阶数比较高的时候,在verilog里修改系数就变长了一件很麻烦的事情。为了方便的修改verilog中定义的滤波器系数,可以利用matlab的输出功能,将每次产生的滤波器系数按照verilog中定义参数的格式将系数写入一文本文件中,这样每次修改系数只需要运行一下matlab程序,然后把产生的文件内容复制粘贴到你的.v文件中就可以了。

下面我把将MATLAB产生的滤波器系数写入文件部分代码简单说明一下:

%打开一个txt文件

fid = fopen('mult_phase_filter_coe.txt','w');

%将产生的49个系数先转化为有符号二进制格式,即如果为负数则最高位取反,即加512

for i="1:49"

if(num(i) < 0)

new_num(i) = num(i) +512;????????%num是之前产生的滤波器系数

else

new_num(i) = num(i);

end

%按verilog定义参数的格式写入txt文件

fprintf(fid,'parameter c%d = 9%ch%x;\n',i-1,39,new_num(i));

end

fprintf(fid,'\n');

fclose(fid);

下图为运行MATLAB程序后在txt文件中按照verilog语法产生的FIR滤波器的系数:
























这样直接复制这些已经按verilog语法参数格式的滤波器系数语句,粘贴到verilog源程序中,就可以了。大大提高了设计效率。
转载自http://blog.sina.com.cn/s/blog_6fe0d70d0100vval.html




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0