MATLAB中用FDATool设计滤波器及使用
- 格式:docx
- 大小:11.32 KB
- 文档页数:1
如何利用matlab和quartus在FPGA中设计FIR滤波器1.在matlab中输入fdatool,调出fir滤波器设计工具
2.如果我要设计一个32阶的低通滤波器,通带为20M。
阻带为25M,采样率为100M,参数如下
3.把滤波器系数导出到matlab的workspace。
在file菜单下选择export选项,弹出如下export选框,点击export,导出到workspace
4.导出后可以在matlab的workspace看到系数,默认名字为Num
5.在matlab中把参数量化fir = round(Num* 2^16); fir为16阶量化后的滤波器参
数。
6.选中fir第一行所有33个数据,复制到一个txt文档中,文档的名字改为xxx.fcf,
如fir_20M.fcf。
7.在quartus里选中fir滤波器ipcore的标志,双击进入设置
8.在第二页参数中选择导入参数importfromfile,选择之前保存的fcf文件即可。
9. 在参数设置中有几个参数是经常要变动的,下图中的coefficientbitwidth是quartus用来近似输入系数的位数,按照我们在matlab上的量化来说,16位就足够了,这里我选择了32位
10. 为了保证输出的数据位数为12位,第三页的输出的截位是经常要调整的参数,当然也可以在这里不做截位,在输出后手动截位也可以。
使用 MATLAB 设计 ISE中 FIR 滤波器系数的方法
1、翻开 MATLAB,在命令行窗口输入“fdatool”,翻开“Filter Designer& Analysis Tool”工具。
以下列图所示:
2、因为 FPGA中滤波器的系数需要为整数,所以需要在此处将系数设置为“Fixed
-point ”种类。
点击上图中红色方框内的按钮,在新出现的页面中将“ Filter arithmetic ”设置为“ Fixed -point ”。
设置达成后以下列图所示:
3、点击上图中红色方框内的按钮,进入滤波器参数设置页面,在此中设置采样
频次( Fs)、通带频次( Fpass)、阻带频次( Fstop )以及阻带衰减( Astop )等参数,并按最下边的“ Design Filter”按钮生成滤波器系数。
以下列图所示,采样频次为 62MHz,通带频次为 2MHz,阻带频次为 4MHz,阻带衰减为 -80dB。
4、而后导出 coe 文件,点击下列图方框中的按钮即可导出coe 文件:
5、在 ISE 中新建一个 FIR 滤波器 IP 核,在第一页设置中将“ Select Source ”改为“ COE File ”,而后在下边选择上一步生成的 coe 文件即可。
c语言使用matlab生成的滤波头文件matlab的fdatool是好东西,不过很多人不知道该怎么使用它生成的C头文件。
这里有个fdatool设计的IIR高通滤波器,采样率400Hz时截止频率1Hz。
设计定型之后,要做些调整。
以下说明中的英文名词有些可能对不上fdatool界面上的原文,请大家意会吧第一步:点击菜单中的Edit->Convert Structure 选择Direct Form I ,SOS,(必须是Direct Form I, II 不行)一般情况下,按照默认设置,fdatool设计都是由二阶部分串联组成的。
这种结构的滤波器稳定性比一个section的要好很多,其他方面的性能也好些。
如果不是的话,点击Convert to second order sections。
这时,滤波器的结构(structure)应该显示为Direct Form I,second order sections第二步:选择quantize filter,精度选择single precision floating point (单精度浮点)之所以不用定点是因为噪声太大,也不容易稳定。
点击菜单中的Targets -> generate c header ,选择export as:single precision floating point (单精度浮点)填写变量名称时,把NUM改成IIR_B,DEN改成IIR_A,其他不用动,保存为iir_coefs.h保存好的文件如下://一大堆注释//然后:/* General type conversion for MATLAB generated C-code */ #include "tmwtypes.h"/** Expected path to tmwtypes.h* C:\Program Files\MATLAB\R2010a\extern\include\tmwtypes.h*//** Warning - Filter coefficients were truncated to fit specified data type. * The resulting response may not match generated theoretical response. * Use the Filter Design & Analysis Tool to design accurate* single-precision filter coefficients.*/#define MWSPT_NSEC 9const int NL[MWSPT_NSEC] = { 1,3,1,3,1,3,1,3,1 };const real32_T IIR_B[MWSPT_NSEC][3] = {{0.8641357422, 0, 0},{1, -2, 1},{0.9949035645, 0, 0},{1, -1.999938965, 1},{0.9985351563, 0, 0},{1, -1.99987793, 1},{0.9996337891, 0, 0},{1, -1.99987793, 1},{1, 0, 0}};const int DL[MWSPT_NSEC] = { 1,3,1,3,1,3,1,3,1 }; const real32_T IIR_A[MWSPT_NSEC][3] = {{1, 0, 0},{1, -1.938049316, 0.9401855469},{1, 0, 0},{1, -1.989501953, 0.9900512695},{1, 0, 0},{1, -1.996887207, 0.9971923828},{1, 0, 0},{1, -1.999084473, 0.9993286133},{1, 0, 0}};第三步:打开iir_coefs.h把MWSPT_NSEC替换成IIR_NSEC, NL、DL数组删除掉,real32_T改成float ,其中有一个#include "twmtypes.h",不要它了,删掉改完的文件如下:#define IIR_NSEC 9//原来叫做MWSPT_NSECconst float IIR_B[IIR_NSEC][3] = {//为什么改为float很明显了吧{0.8641357422, 0, 0},{1, -2, 1},0.9949035645, 0, 0},{1, -1.999938965, 1},{0.9985351563, 0, 0},{1, -1.99987793, 1},{0.9996337891, 0, 0},{1, -1.99987793, 1},{1, 0, 0}};const float IIR_A[IIR_NSEC][3] = { {1, 0, 0},{1, -1.938049316, 0.9401855469 }, {1, 0, 0{1, -1.989501953, 0.9900512695 },{1, 0, 0},{1, -1.996887207, 0.9971923828},{1, 0, 0},{1, -1.999084473, 0.9993286133},{1, 0, 0}};保存文件,然后使用以下代码进行滤波这段代码是根据Direct Form I 2阶IIR滤波的差分方程编写的a0*y[n] = b0*x[n] + b1*x[n-1] + b2*x[n-2] - a1*y[n-1] -a2*y[n-2];//iir_filter.c#include "datatype.h"#include "iir_filter.h"#include "iir_coefs.h"static float y[IIR_NSEC][3];static float x[IIR_NSEC+1][3];int16 iir_filter(int16 in)uint16 i;x[0][0] = in;for(i=0;i<iir_nsec;i++)< p="">{y[0] =x[0]*IIR_B[0]+x[1]*IIR_B[1]+x[2]*IIR_B[2]-y[1]*IIR_A[1]-y[2]*IIR_A[2];y[0] /= IIR_A[0];y[2]=y[1];y[1]=y[0];x[2]=x[1];x[1]=x[0];x[i+1][0] = y[0];}if( x[IIR_NSEC][0]>32767) x[IIR_NSEC][0]=32767;if( x[IIR_NSEC][0]<-32768) x[IIR_NSEC][0]=-32768;return ((int16)x[IIR_NSEC][0]);}//复位滤波器void iir_reset(void){uint16 i,j;for(i=0;i<iir_nsec+1;i++)< p="">{for(j=0;j<3;j++){x[j]=0;}}for(i=0;i<iir_nsec;i++)< p="">{for(j=0;j<3;j++)y[j]=0;}}}//iir_filter.h#ifndef _IIR_FILTER_H__#define _IIR_FILTER_H__int16 iir_filter(int16 x);void iir_reset(void);#endif使用方法:首先写好iir_coefs.h,然后调用iir_filter.c对数据流进行滤波一个伪代码例子:while(运行中){保存到SD卡(iir_filter(读取ADC采样值()));}记得在开始滤波之前重置滤波器iir_reset();</iir_nsec;i++)<></iir_nsec+1;i++)<></iir_nsec;i++)<>。
一、概述Matlab 是一种用于算法开发、数据分析和可视化的高级技术计算语言和交互式环境。
在信号处理领域,Matlab 是一种非常强大的工具,可以用来设计和实现数字滤波器。
本文将重点介绍如何使用 Matlab 过FIR (Finite Impulse Response) 数字滤波器设计。
二、FIR 数字滤波器概述FIR 数字滤波器是一种常见的数字滤波器,它的特点是其单位脉冲响应有限,并且没有反馈。
FIR 滤波器的频率响应可以通过其线性相位特性来描述,因此在许多应用中非常有用。
三、Matlab 中的 FIR 数字滤波器设计工具Matlab 中提供了许多用于数字滤波器设计的工具,其中包括 fdatool 和 fir1 函数。
1. fdatoolfdatool 是 Matlab 中的一个交互式工具,可以帮助用户设计各种类型的数字滤波器。
用户可以通过图形界面选择滤波器类型、滤波器阶数、截止频率等参数,并实时查看滤波器的频率响应和单位脉冲响应。
使用 fdatool 可以快速方便地设计出所需的 FIR 数字滤波器。
2. fir1 函数fir1 函数是 Matlab 中用于设计标准的低通、高通、带通和带阻 FIR数字滤波器的函数。
用户可以通过指定滤波器类型、截止频率、滤波器阶数等参数来调用 fir1 函数,从而得到所需的数字滤波器的系数。
四、利用 Matlab 设计 FIR 数字滤波器的步骤1. 确定滤波器类型首先要确定所需的数字滤波器的类型,包括低通滤波器、高通滤波器、带通滤波器和带阻滤波器。
2. 确定滤波器的频率特性根据具体的应用需求,确定滤波器的截止频率、通带和阻带的大小,以及过渡带的宽度等参数。
3. 计算滤波器的系数根据所需的滤波器类型、频率特性和滤波器阶数等参数,使用 fdaool 工具或 fir1 函数计算出滤波器的系数。
4. 应用滤波器将得到的滤波器系数应用到需要滤波的信号上,即可得到滤波后的信号。
基于MATLAB的滤波器设计由于MATLAB的广泛使用与功能的不断更新,基于MATLAB的滤波器设计方法以其方便快捷的特点,受到了设计者的欢迎。
下面将举例说明基于MATLAB的FIR滤波器的设计。
1 基于FDATool的FIR滤波器设计使用FDATool设计FIR滤波器的具体步骤如下:1、1 滤波器指标若需要设计一个16阶的FIR滤波器(h(0)=0),给定的参数如下:(1) 低通滤波器(2) 采样频率F S为48kHz,滤波器F C为10、8kHz(3) 输入序列位宽为9位(最高位为符号位)在此利用MATLAB来完成FIR滤波器系数的确定。
1、2 打开MATLAB的FDAToolMATLAB集成了一套功能强大的滤波器设计工具FDATool(Filter Design & Analysis Tool),可以完成多种滤波器的设计、分析与性能评估。
单击MATLAB主窗口下方的“Start”按钮,如图B、1所示,选择菜单“ToolBox”→“Filter Design”→“Filter Design & Analysis Tool(FDATool)”命令,打开FDATool,如图B、2所示。
图B、1 FDATool的启动图B、2 FDATool的主界面另外,在MATLAB主命令窗口内键入“fdatool”,同样可打开FDATool程序界面。
1、3 选择Design FilterFDATool界面左下侧排列了一组工具按钮,其功能分别如下所述:●滤波器转换(TransForm Filter)●设置量化参数(Set Quantization Parameters)●实现模型(Realize Model)●导入滤波器(Import Filter)●多速率滤波器(Multirate Filter)●零极点编辑器(Pole-zero Editor)●设计滤波器(Design Filter)选择其中的按钮,进入设计滤波器界面,进行下列选择,如图B、3所示。
科技广场2010.70引言在现代通信系统中,由于信号中经常混有各种复杂成分,很多信号的处理和分析都是基于滤波器而进行的。
但是,传统数字滤波器的设计使用繁琐的公式计算,改变参数后需要重新计算,尤其是高阶滤波器时工作量很大。
利用MAT-LAB信号处理箱可以快速有效地实现数字滤波器的设计与仿真。
MATLAB是MATHWORK公司推出的一套面向科学和数值计算的可视化语言,它集数值分析、矩阵运算、信号处理和图形显示于一体,是一个高度集成系统,具有友好的用户界面和良好的帮助功能。
MATLAB自带的信号处理工具箱( Signal Processing Toolbox)具有强大的信号处理和分析功能,利用MATLAB软件优越的数字分析及仿真功能,对理解数字滤波器及数字滤波具有一定参考价值。
数字滤波器根据其冲击响应函数的时域特性可以分为有限长冲击响应(FIR)和无限长冲击响应(IIR)。
下面以IIR型数字滤波器的设计为例来具体说明MATLAB在数字滤波器设计及系统仿真方面的应用。
1IIR数字滤波器传统设计方法IIR数字滤波器设计的基本思路是:模拟系统与离散系统存在着互相模仿的理论基础,可以用数字滤波器的特性去模仿模拟滤波器的特性,首先设计一个模拟滤波器的传递函数H(s),然后通过复变量s与复变量z之间的变换关系求出数字滤波器的系统函数H(z)。
模拟滤波器到数字滤波器的转换可在时域进行也可在频域实现,时域转换的关键是要使数字滤波器与模拟滤波器时域响应的采样值相等,以保持其瞬态特性不变,常用的是冲击响应不变法。
频域变换法必须使得数字滤波器在-π≤ω≤π范围内的幅频特性与模拟滤波器在-π/T≤ω≤π/T范围内的幅频特性一致,即保证s 平面与z平面上幅频特性的一一单值对应关系,常用的是双线性变换法。
传统设计方法思路清晰,步骤详尽,可参阅公式、手册循章而行。
但由于计算繁琐,设计过程中要改变参数和滤波器类型时都要重新计算。
它需要反复的实验,需要设计者凭借经验设定参数,很多时候要根据设计要求和滤波效果不断调整,以达到设计的最优化。
数字信号处理实验第18次实验实验名称:用FDATool设计数字滤波器学生班级:电信1。
学生姓名:学生学号:指导教师:诸葛一、实验目的(1)掌握MATLAB中图形化滤波器设计与分析工具FDATool的使用方法。
(2)学习使用FDATool对数字滤波器进行设计。
(3)了解FDATool输出滤波器数据的方法。
二、实验原理1.FDATool使用环境在MATLAB命令窗口输入命令 fdatool ,将打开FDATool工作界面。
2.利用FDATool 设计数字滤波器3.设计数据的输出三、 实验任务(1)阅读并输入实验原理中介绍的例题程序,观察输出的数据和图形,结合基本原理理解每项操作的意义。
(2)用FDATool 设计一个椭圆IIR 数字低通滤波器,要求:通带;1,2dB R kHz f p p ==阻带;15,3dB A kHz f s s ==滤波器采样频率kHz F s 10=。
观察幅频响应和相频响应曲线、零极点分布图,并列写传递函数,将滤波器系数存入MATLAB 工作空间。
(3)用FDATool 设计一个切比雪夫I 型IIR 数字带通滤波器,要求:下阻带截止频率;1,2.0dB R p sl ==πω通带低端截止频率;20,3.0dB A s pl ==πω通带高端截止频率;20,5.0dB A s ph ==πω上阻带截止频率;1,6.0dB R p sh ==πω观察幅频响应和相频响应曲线、零极点分布图,并列写传递函数,将滤波器系数存入MATLABText 文件。
(4)用FDATool 设计一个使用Hamming 窗的FIR 数字带阻滤波器,要求:下通带截止频率;5.0,2.0dB R p pl ==πω阻带低端截止频率;40,3.0dB A s sl ==πω阻带高端截止频率;40,5.0dB A s sh ==πω上通带截止频率;5.0,6.0dB R p ph ==πω观察幅频响应和相频响应曲线、零极点分布图,将系数存入MATLAB 工作空间。
[转]将Matlab的fdatool生成的Coefficients导出到Altera FIR Megacore的方法2009-08-25 09:57:52| 分类:默认分类|举报|字号订阅今天和列位交流一下fdatool和FIR MegaCore的一个使用技巧的问题(和这些软件有关的基本概念不在此赘述)。
首先fdatool是Matlab自带的一个数字滤波器的设计分析软件,里面提供了丰富的参数供调整(具体的参阅Matlab的教材),大大降低了数字滤波器的设计难度,同时又可以设计出高质量的滤波器。
fdatool虽然不是最好的滤波器设计软件,但是在Matlab响亮的名号下,得到了广泛的使用。
FIR Megacore是Altera针对其主流FPGA推出的一款商业化的数字滤波器设计软件,可以直接生成HDL代码(可综合的,但是加密了),同时其结构针对Altera自己的FPGA做了各种各样的优化。
尽管fdatool也可以生成可综合的HDL代码,但是没有针对FPGA的M4K、DSP Block做出相应的优化,所以性能和FIR Megacore生成的FIR滤波器有相当的差距。
然而,FIR Megacore的滤波器设计工具相当的简单,只提供了窗函数法,用户只能定义有限的几个参数。
而其他的设计方法,比如矩形系数更好的等纹波法则只能在fdatool里面找到。
所幸的是,FIR Megacore提供了滤波器的Coefficients导入的选项,可以使用第三方工具生成的Coefficients。
这使得我们能够用FIR Megacore来实现fdatool生成的滤波器。
FDATool的介绍FDATool(Filter Design&Analysis Tool)是MATLAB信号处理工具箱里专用的滤波器设计分析工具,MATLAB 6.O以上的版本还专门增加了滤波器设计工具箱(Filter Design Toolbox)。