FIR数字滤波器在DSP芯片C2000上的实现

FIR数字滤波器在DSP芯片C2000上的实现

一、DSP是什么?

如果单从DSP这三个缩写字母来看,DSP可以指两个方面的内容,数字信号处理技术(Digital Signal Processing)以及数字信号处理器(Digital Signal Processor)。DSP微处理器的主要功能偏重于数字信号处理领域,因此,在DSP上实现数字信号处理的相关算法与技术,是学习DSP过程中十分重要的一个方面。
在数字信号处理领域,数据平滑,数字滤波,域间变换分析等都是常用的算法,这些都属于经典数字信号处理算法。经典数字信号处理算法主要的应用也主要是数字滤波技术和快速傅里叶变变换技术,这两个技术的发展和应用是数字信号处理技术上的两个里程碑。
本文主要介绍在DSP芯片TMS320F2808上FIR数字滤波器的设计与实现。 用一句概括FIR数字滤波器实现过程的话就是对两个数组进行卷积运算。

二、原始信号

本试验中的原始信号是通过AD采集到的,共有三路通道,每路通道包含600个采样点,共1800个采样点,三路通道功能相同,传感器配置不同,最右侧的第三路没有连接传感器,每路通道中,包含发射标志信号和反射回波信号两种有效信号,前者是发射标志信号,后者是反射回波信号。
在这里插入图片描述

三、配置Filter Designer

1.在MATLAB界面APP窗口中找到Filter Designer工具箱单击打开;
在这里插入图片描述
2.设置Filter Designer参数;
本试验需要设计一个FIR带通滤波器,保留频率为150khz-250khz之间的信号,所以左侧响应类型选择带通,设计方法选择FIR,滤波器阶数选择最小阶,Fs为采样频率,可根据需要设置,也可以改动测试效果,选择效果最好的值。Fpass1与Fpass2之间是允许通过的频率范围,Fpass1与Fstop1之间以及Fpass2与Fstop2是逐渐衰减的频率范围,低于Fstop1或高于Fstop2是截止的频率范围,通带纹波Apass默认是1dB,阻带衰减保持默认为60dB和80dB,也可以按照自己的需要修改。
在这里插入图片描述

3.生成C语言头文件;
在DSP芯片中实现FIR滤波时,需要将滤波器系数添加到CCS工程中,主要方法有两种,一种是直接将matlab生成的系数写复制在CCS代码中,另一种就是将生成的系数以c语言头文件的形式添加至工程,主函数调用该文件即可。
此处以第二种头文件的形式添加至FIR项目中。头文件生成方式如下:点击菜单栏的Targets选项中的“Code Composer Studio”,如下图3:
在这里插入图片描述

点击后出现如下界面,如下图所示;
图4  头文件生成界面
参数说明:

numerator为系数数组名,默认即可,numerator length为系数数组长度,为静态常量,名字默认即可。

在CCS环境中是以short型整数形式进行FIR滤波,在计算卷积过程中为防止溢出,此处的Export as 处可选择16位的无符号整形数据。
生成后头文件中就包含了滤波器参数,以数组的形式保存。详细代码见本文后。头文件保存路径可以根据自己需要选择,方便自己找到即可。
生成结束可能会有一条错误提示,意思是C语言头文件已创建在这个目录下,但是,无法找到Code Composer Studio的正确安装来加载该文件,这个不要紧,点击确定后自动关闭,然后将生成的头文件,复制到CCS工程目录下即可。
图5  错误提示
生成的文件以记事本的方式打开,结果如下图所示
在这里插入图片描述
从图中可以知道CCS工程中还要包含"tmwtypes.h"这个头文件,需要复制到工程路径下。这个文件可以在MATLAB的安装路径中找到,并且头文件路径也帮我们指了出来,如下图:
在这里插入图片描述

四、核心算法

根据前面的介绍可知,FIR滤波要在DSP上实现的核心算法就是对要进行滤波的数组与MATLAB生成的数组进行卷积计算,卷积计算通俗的说就是两个多项式相乘取系数,下面给出核心算法的C语言版本,以及卷积计算用到的MATLAB产生的数组。

for(n=0;n<Length+BL;n++)               //卷积计算	Length为要滤波数组的长度,BL为MATLAB生成数组的长度
{
      yn=0;
      for(m=0;(m<BL)&&(m<n);m++)
          yn+=B[m]*input[n-m];
      output[n]=yn;				//output为计算完成输出的数组

}

卷积计算用到的MATLAB产生的数组

#include "tmwtypes.h"
const int BL = 51;
const uint16_T B[51] = {
        0,      0,      0,      0,      0,      0,      0,    261,    627,
      816,    697,    320,      0,      0,     68,    520,    680,     99,
        0,      0,      0,      0,      0,   2029,   4780,   5869,   4780,
     2029,      0,      0,      0,      0,      0,     99,    680,    520,
       68,      0,      0,    320,    697,    816,    627,    261,      0,
        0,      0,      0,      0,      0,      0
};

在实际使用中只需按照自己的需求设置滤波器参数,并生成头文件,将自己需要滤波的数组与MATLAB得到的数据进行卷积运算,并存放到一个新的数据中就能实现对原始数据的滤波。

五、结果分析及检验

在这里插入图片描述
这是AD采集到的原始波形,与上图中的原始信号相同,只是对其进行了放大处理,横坐标是采样点,纵坐标是幅值,此时采样率为2M,采样点之间的间隔是0.5μs,前两个红线框中大约各有4个采样点,其周期为2μs,即频率为500k,不在我们想保留的频率范围内。后面红线框中大约有12个采样点,其周期为6μs,即频率为167k,在我们想保留的频率范围内。
通过FIR滤波之后(卷积计算),得到了FIR滤波之后的波形,如下图所示:
在这里插入图片描述
前红线框中大约有13个采样点,其周期为6.5μs,即频率为153k,在我们想保留的频率范围内。后面红线框中大约有12个采样点,其周期为6μs,即频率为167k,与上一张图片对比,信号得到了比较好的保留,幅度有所下降包含两方面的原因,一是在进行卷积运算之前对原始数据和MATALB产生的数组进行了缩小,否则数组会产生溢出,另一个是幅度实际上是不同频率信号的叠加,使用带通滤波器,滤除杂波频率,自然而然的会降低幅度。

六、总结

使用FIR滤波可以方便的帮我们滤除掉不需要的部分,保留有效成分,但是FIR滤波器会存在一个问题就是,滤波后信号将会不可避免地产生明显的线性时延,相位与频率是成正比的,延时就与频率无关了,是常量,群时延特性很好波形不会失真的厉害,如果给定FIR滤波器有N个抽头,那么延时是(N - 1) / (2 * Fs), 这里Fs是采样频率,延时是一定的。非要刨根问底,一大堆公式,不好解释,直接上图。
在这里插入图片描述
本试验使用的MATLAB生成的卷积数组长度是51, 所以N=51
(51-1)/(2*2000000)=12.5μs
在图中对应的应该是25个采样点的延时,如下图所示:
在这里插入图片描述

参考资料:
[1]: https://blog.csdn.net/SSG18829575503/article/details/80971003?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159256209219724843336025%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159256209219724843336025&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_ctr_v3-2-80971003.ecpm_v1_rank_ctr_v3&utm_term=DSPFIR滤波信号处理
[2]: DSP原理及应用技术——基于TMS320F2812的仿真与实例设计

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值