提示:基于Altera的FIR数字滤波器设计 2021
前言
使用软件版本 quartus ii 18.0
基于Altera的FIR数字滤波器设计
一、FIR滤波器
FIR滤波器是有限长单位冲激响应滤波器,又称为非递归型滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。
二、Altera FPGA实现过程
1.抽头系数
- 打开Matlab,输入fdatool打开滤波器设计工具
(根据自己设计要求选取参数)
- 然后导出抽头系数。
2.IP核配置
在配置界面配置好时钟与抽头系数的形式,然后导入之前生成好的抽头系数。
输出的配置暂时不用动,之后在代码中实现数据位的截断。
3.代码
- 高速ADC
我这里使用的ADC是8位ADC,ADC的时钟设置50KHz。 - 高速DAC
DAC是10位DA,DA的时钟设置50KHz。
//`配置AD DA模块
always @(posedge sys_clk or negedge sys_rst_n)
begin
if(!sys_rst_n)
begin
AD_Clk<=1'b0;
clk_cnt<=32'd0;
end
else
if(clk_cnt==32'd499)//sample 50K
begin
AD_Clk<=~AD_Clk;
DA_Clk<=~DA_Clk;
clk_cnt<=32'd0;
end
else
clk_cnt<=clk_cnt+1'b1;
end
always @ (posedge sys_clk or negedge sys_rst_n)
begin
if(sys_rst_n == 1'b0)
cnt <= 6'd0;
else if(cnt == 6'd999)
cnt <= 6'd0;
else
cnt <= cnt + 1'b1;
end
- IP核配置代码
FIR IP的例化程序代码
。
4.关于数据截断问题
//`
fir_ip fir_ip_inst(
. clk (sys_clk),
. reset_n (sys_rst_n),
. ast_sink_data (AD_Dat_tmp),
. ast_sink_valid (fs_pulse),
. ast_sink_error (2’b0),
. ast_source_data (ast_source_data),
. ast_source_valid (ast_source_valid),
. ast_source_error (ast_source_error)
);
关于信号ast_source_data数据位的截断
可以在singaltap里面观察ast_source_data波形,然后选择保留两三个符号位剩下的为数据位
例如这个,选择[27:18]就可以(根据不同的DA芯片的位数不同,选择的截断长度也不同,这里只是给出一个参考)
总结
以上就是设计FPGA数字滤波器的全过程,很简单。如果上板成功得到的波形是正弦阶梯波的形式,你还需要做一个模拟低通滤波器过滤高频谐波,进行波的整形。(有疑问或者需要工程文件请添加QQ:236395527)