fir fpga 不同截止频率_利用FPGA的IP核实现FIR滤波器

利用FPGA的IP核实现FIR滤波器

自己在Chinaaet的第一篇博客,呵呵~

记录一下,利用Altera提供的IP核进行FIR滤波器的设计流程,以及中途遇到的一些坑。主要是按照杜勇老师编写的《数字滤波器的MATLAB与FPGA实现:Altera/Verilog版》 进行的。

一、首先是设计指标:

采用最优化设计方法(firpm),设计一个阶数为16阶(长度为17)的线性相位低通FIR滤波器,截止频率为500hz,fs=2000hz。,系数量化位数为12bit,输入数据位宽为12bit,输出数据位宽为25Bit,系统时钟为2khz。

二、设计流程:

(1)利用MATLAB设计滤波器系数,浮点数类型。

(2)Matlab测试滤波器性能,输入观察输出。

(3)利用FPGA的FIR滤波器IP核设计滤波器。

(4)编写testbench,测试滤波器性能。输入Matlab产生的激励文本文件,

输出硬件处理后的信号,写入文本文件中。

(5)Matlab分析硬件处理后保存在文本文件中的信号。

三、设计步骤:

1,利用MATLAB设计滤波器系数。代码如下:

function hn=Fir_Coefficient_Design

N=17;      %滤波器长度

Sample_Freq=2000;   %采样频率

fc=500;    %低通滤波器的通带截止频率

B=12;      %量化位数

Cut_Off_Freq=[0 500 700 Sample_Freq/2];

Cut_Off_Freq=Cut_Off_Freq./(Sample_Freq/2); %归一化

Fir_Amplitude=[1 1 0 0];

Fir_Coefficient=firpm(N-1,Cut_Off_Freq,Fir_Amplitude);

hn=Fir_Coefficient;

freqz(Fir_Coefficient,1,1024,Sample_Freq);

注意MATLAB中频率归一化是针对fs/2,即采样率的一半。

接下来将滤波器系数写入文本文件中,

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

for k=1:length(Fir_Coefficient)

fprintf(fid,'%.14f',Fir_Coefficient(k));

if(k~=length(Fir_Coefficient) )

fprintf(fid,'\r\n');

end

end

fclose(fid

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值