嵌入式工程师-DSP--基于Matlab在DSP中实现数字滤波FIR
1、在matlab中生成FIR滤波参数
1.1、选择FIR滤波器的原因
FIR 滤波器与 IIR 滤波器相比 , 具有严格的线性相位 , 幅度特性可任意等优点。FIR 滤波器的单位抽样响应是有限长的 ,故一定是稳定的 ,他又可以用快速傅里叶变换(F FT)算法来实现过滤信号 ,可大大提高运算效率F IR 滤波器与 IIR 滤波器相比 , 具有严格的线性相位 , 幅度特性可任意等优点。FIR 滤波器的单位抽样响应是有限长的 ,故一定是稳定的 ,他又可以用快速傅里叶变换(F FT)算法来实现过滤信号 ,可大大提高运算效率。
1.2.数学基础
对于数字滤波器,描述系统特性用差分方程 。 设其输入序列为 x(k),输出序列为 y(k),则它们之间的关系可以用差分方程来表示:
y(k)+b1 y(k-1)+…+bMy(k-M)
=a0 x(k)+a1 x(k-1)+…+an x(k-N) (1)
其 中 ,y(k)系 数 一 般 取 1;b1,…bM 及 a0,…aN 为 常 系 数 ;
对于特定的系统,M 和 N 为常数, 分别代表输出最高阶数和输入最高阶数。

1.3.滤波系数确定方法

1.4.利用利用 FDA Tool 设计 FIR 滤波器
指定 FIR 滤波器为低通滤波器(Lowpass), 指定阶数为 30 ,采样频率 Fs 为 5 000 H z, 截止频率为 400 Hz 。打开 FDATool 界面(在 Matlab 命令窗输入 fdatool), 选 FIR(Window ), 用 Hamming 窗方法 ;菜单 Edit - >ConvertStructure ,选 Direct Form FIR ,即滤波器结构为直接 I 型 ;菜单 Analysis 用来选择不同的分析显示方式 , 如幅度响应 、相位响应 、脉冲响应 、阶跃响应 、滤波器系数等 。指定完设计参数后单击按钮 Design Filter , 生成滤波器系数 。FDATool 界面如图 1 所示

2、matlab产生的FIR的参数导入到DSP中
- DSP 中有两种方式 ,一种把滤波器系数输入到一个 C 头文件 ,在所建工程中添加该 C 头文件 ,另一种直接把生成的滤波器系数加到 DSP存贮器中 。
-
选择菜单 Targets - >Export to Code Composer Studio(tm) IDE ,打开 Export to C Header File 对话框 ,选择Cheader file,指定变量名(滤波器阶数和系数向量),输出数据类型可选浮点型或 32 b , 16 b 整型等 , 根据自己安装选择目标板板号和处理器号 , 单击 OK ,保存该头文件 ,需指定文件名(filtercoeff. h)和路径(保存在 c:\ti\myprojects\fir 工程中)。
-
2.1 matlab 向目标 DSP 传送数据
生成.dat文件,在dug模式下直接加载到DSP的内存地址。
If they are similar, then you can simply use the 'Load Memory' feature in the Memory view to specify and load the *.dat file


2.2 DSP实现FIR
1.程序流程图

2.程序解释
首先初始化 DSP 寄存器 ,分配存储单元 ,并定义一些变量名称, 接着在数据存储区中开辟一个 N 单元的缓冲区,存放由 MATLAB 设计出的 N 个滤波系数 [5]。 接下来读入采样值,并存入相应存储器 A,然后开始滤波运算。 具体运算步骤
如下:
1)累加器 ACC 清零,初始化两个准备相乘的存储单元 A与 B 的计数值 K 和 L;
2) 将第 K 个采样值 AK 与滤波器系数序列第 L 个数 BL相乘(K+L=N+1),并将乘积送入累加器进行累加;
3)将第 K-1 个采样值 AK-1 存入 AK 单元,此时 AK 中的原数值被覆盖;
4)重复(2)~(3)直至共完成 N 次乘加运算;
5)输出处理结果。
滤波运算采用 FFT 算法 。 DSP 控制器特有的反序间接
寻址,为 FFT 算法的实现提供了方便。 间接寻址方式还可以
实现增/减 1 或增/减一个变址量 ,这就很容易实现各种查表
方法。
3.程序例程

更多推荐


所有评论(0)