原创 【博客大赛】直接型FIR的FPGA设计(一)

2012-4-21 14:45 3526 9 10 分类: FPGA/CPLD

FIR滤波器可以说是FPGA数字信号处理设计的敲门砖。记录直接型FIR设计的流程与方法。

(一)MATLAB设计需求的FIR滤波器

使用MATLAB中的FDATool,在命令行输入fdatool:

01.jpg

之后便弹出fdatool滤波器设计工具:

02.jpg

随后我们可以在界面中设计我们需要的滤波器特性,如本示例将用窗函数法设计一个截止频率15k采样率48k的FIR低通滤波器,设置好各项参数后,点击Design Fitter,得下图滤波器设计完成:

03.jpg

最后,我们将生成MATLAB设计文件,用于我们的设计仿真。在菜单栏中file->Generate MATLAB Coder,便可生成我们需要的m文件。

m文件中包含了函数fir_Design(),函数开始时对滤波器各项参数进行设置,最后生成了我们所需FIR滤波器的系数。代码如下:

function config_parameter = fir_Design();
%*******************************************************
% file     : fir_Design.m
% desp     : FIR matlab design code
% author   : lovejlx2006@163.com
% date     : 2011.5.3
% version  : 0.1
%*******************************************************
%FIR_DESIGN Returns a config parameter object.

%
% M-File generated by MATLAB(R) 7.6 and the Signal Processing Toolbox 6.9.
%
% Generated on: 27-Apr-2011 21:38:49
%

% FIR Window Lowpass filter designed using the FIR1 function.

% All frequency values are in Hz.

Fs = 48000;  % Sampling Frequency

Fpass = 15000;              % Passband Frequency
Fstop = 16000;              % Stopband Frequency
Dpass = 0.057501127785;     % Passband Ripple
Dstop = 6.3095734448e-005;  % Stopband Attenuation
flag  = 'scale';            % Sampling Flag

% Calculate the order from the parameters using KAISERORD.
[N,Wn,BETA,TYPE] = kaiserord([Fpass Fstop]/(Fs/2), [1 0], [Dstop Dpass]);

% Calculate the coefficients using the FIR1 function.
b  = fir1(N, Wn, TYPE, kaiser(N+1, BETA), flag);


in_word_len = 8;
coef_word_len = 16;
addr_word_len = ceil(log2(length(b)/2));
out_word_len = in_word_len + ceil(log2(length(b)));

b_fixed = round(b*(2^(coef_word_len-1)-1));
% output magnitude and phase
figure
freqz(b);

%Hd = dfilt.dffir(b);

config_parameter.Fs = Fs;
config_parameter.coef_float = b;
config_parameter.coef_fixed = b_fixed;
config_parameter.coef_len = length(b);
config_parameter.in_word_len = in_word_len;
config_parameter.coef_word_len = coef_word_len;
config_parameter.addr_word_len = addr_word_len;
config_parameter.out_word_len = out_word_len;
config_parameter.simdata_len = 100*length(b);
end
% [EOF]

文件中自己添加部分是为了给FPGA设计定义参数,便于之后我们做算法仿真时调用该函数。并输出了FIR滤波器的频率特性:

04.jpg

 

文章评论1条评论)

登录后参与讨论

用户418919 2012-4-25 13:51

好的,支持!
相关推荐阅读
jlx_cuc 2014-06-06 18:19
你真的会socket编程吗(1)
最近的项目都围绕着TCP socket在进行着,VC下的socket,Linux下的socket,感觉很简单,但是却发现其实下面的几个同事对于socket这个东西还只是“会”,但并不一定懂。 ...
jlx_cuc 2014-05-16 18:44
操作系统-读书笔记(1)
最近在业余阅读时找到一本《自己动手编写操作系统》觉得不错,视角很新颖,是有关操作系统书籍中为数不多的看了不想睡觉的读本。   由于这本书的出版时间较早,书中引导盘还使用的是软盘,所以在跟随...
jlx_cuc 2014-05-08 17:13
“改变”后的一丝体会
有两个月没写博客了,现在正是开学之际,有必要对前面两个月的工作做做记录。   经历过从北京到苏州的工作地点转换,生活和工作上的体会和收获颇丰。到苏州来以后会觉得,原来的一些看法还是太过狭隘...
jlx_cuc 2014-05-08 17:13
最终我又不要脸的回来了——成为一名“管理者”后的心得
之前的很长一段时间都没再更新过这个博客,一直在EDN潜水,一直在做伸手党。原因有两个,一个是忙,一个是懒。 最终我还是不要脸的回来了。还是想以后好好把这个博客经营下去,也好等咱们的娃长大了给它...
jlx_cuc 2013-07-11 17:13
【博客大赛】写给“即将入学”的硕士研究生们
原本题目定的是《写给即将入学的硕士研究生们》,后来想了想便加上了双引号。先来说说这个双引号。   早在一个多月前全国考研的最后结果便出来了,对于考上研的同学们来说,马上就要开始自己的研究生...
jlx_cuc 2013-04-08 23:22
【博客大赛】老罗和他的锤子之我的见解
事先说明,个人感觉我的观点还算是中立观点,并不是要感叹老罗和锤子有多好,也不想批评它们是否一无是处。只是想在时隔这么就没来EDN,恰巧又遇到锤子的发布这个时间点,发表些个人的感想和见解。 ...
我要评论
1
9
关闭 站长推荐上一条 /2 下一条