一、摘要在信号处理中,滤波占有十分重要的地位。
数字滤波是数字信号处理的基本方法。
数字滤波与模拟滤波相比有很多优点。
它除了可避免模拟滤波器固有的电压漂移、温度漂移和噪声等问题外,还能满足滤波器对幅度和相位的严格要求DSP 芯片实现数字滤波具有稳定性好、精确度高、不受环境影响等优点。
数字滤波器分为有限冲激响应滤波器FIR 和无限冲激响应滤波器IIR ,由于FIR 是全零点的滤波器,因而系统总是稳定的。
这对于系统综合是很重要的。
本实验采用TI 公司的TMS320C5409型号的DSP 芯片实现具有线性相位的FIR 低通数字滤波。
二、利用Matlab 获取滤波器系设h(n)(n=0,1,2,…,N 一1)为滤波器的冲激响应,输入信号为x(n),则FIR 滤波器就是要实现下列差分方程:1()()()N k y n h k x n k -==-∑上式就是FIR 滤波器的差分方程。
FIR 滤波器的最主要的特点是没有反馈回路,因此它是无条件稳定系统。
它的单位脉冲响应h(n)是一个有限长序列。
由上面的方程可见,FIR 滤波箅法实际上足一种乘法累加运算,它不断地输入样本x(n),经延时做乘法累加,再输出滤波结果y(n)。
FIR 滤波器的一个分支的延时线,把每一节的输出加权累加,得到滤波器的输出。
结构如图1所示,它由一条均匀间隔的延迟线上对抽失信号进行加权求和构成。
FIR 滤波器的直接型结构图本实验用MATLAB 的fdatool 功能实现滤波器设计。
具体方法如下:x(n)h(0)h(1)h(2)h(N-1)y(n)(1)输入fdatool,弹出滤波器设计窗口。
输入设计指标,令采样频率为20000Hz,开始衰减的频率为2500Hz截止频率为4600Hz,衰减为50db,软件自动完成设计。
(2)点击File>Export,选择参数,导出滤波器系数,再由导出的参数乘32768后取整数部分转换为十六进制数,即为设计的十六进制系数。
设计的系数如下:0.0042058395684075245 0089H-0.0075151837349766307 -00F5H-0.035418063175322867 -0487H-0.059588974025311756 -079DH-0.035994625237031161 -0498H0.062526635535184144 0800H0.20563298596047033 1A51H0.31249419559483949 27FCH0.31249419559483949 27FCH0.20563298596047033 1A51H0.062526635535184144 0800H-0.035994625237031161 -0498H-0.059588974025311756 -079DH-0.035418063175322867 -0487H-0.0075151837349766307 -00F5H0.0042058395684075245 0089H得出的结果是一个16阶的FIR低通滤波器。
三、滤波器系数验证滤波器的系数验证及软件仿真选用MATLAB的sptool功能实现。
Sptool是MATLAB信号处理工具箱中自带的交互式图形用户界面工具,它包含了信号处理箱中的大部分函数,可以方便快捷地自动完成对信号、滤波器及频谱的分析、设计和浏览。
本实验中具体步骤如下:(1)在MATLAB命令窗口中输入以下命令,生成混频信号,信号中包含了低频500Hz和高频8000Hz。
Fs=20000;t=(1:100)/Fs;in=sin(2*pi*t*500)+sin(2*pi*t*8000);(2)在命令窗口中输入sptool,进入仿真界面,在File>Import中导入输入信号in,采样频率Fs,命名sig1,在Filter下的选项中选择New新建滤波器,方法与二相同,点击Apply,生成输出信号,命名为output。
、(3)在Signals的View下观察输入、输出的时域波形输入时域波形输出时域波形(4)在Spectra下点击creat,选择FFT方式,Apply生成频域波形输入信号频谱输出信号频谱由仿真可看出,滤波器使信号中500Hz的低频分量通过,抑制了8000Hz的高频分量,实现了低通滤波,滤波器设计正确。
四、DSP实时滤波器代码合成过程程序设计的总体思路是:启动AD模块对输入的模拟信号进行模数转换,每采集到一个数据就送人DSP滤波运算,运算结果送DAC转换为模拟量。
不断地重复上述过程,在DAC7625的输出端就得到滤波后的模拟信号。
为了精确地控制ADS7864的采样率,使用DSP内部的定时器控制采样时间间隔T,设置定时器的定时时间等于采样时间间隔T,并让它工作在中断方式,则定时器每过T时间就向CPU发出中断请求,CPU响应中断请求,转去执行中断服务程序,在中断服务程序中读取A/D转换结果,对转换结果进行滤波运算,并将运算结果送D/A转换器转换为模拟量。
因此,程序分为A/D转换、定时器中断、中断服务程序、D/A转换等几个模块。
五、实时滤波器软件流程和硬件组成框图及核心代码陈述1、定时器初始化代码如下,设置中断频率prd 为00C7h 即十进制199,tcr 为082Eh 即令TDDR第四位为14,十进制为15,由中断周期计算公式公式TINT 频率=11111+⨯+⨯PRD TDDR tc算出,其中tc 为时钟周期,DSP 中的时钟频率为60MHz ,由此算的采样频率Fs=20000Hz 。
stm #0010h,tcr ;TSS 置1,便于接下来的设置stm #00C7h,prd ;置位prd 以设置中断频率,十进制为199 stm #082Eh,tcr ;tcr 初始化,令TDDR 的低四位为14,10进制为152、中断服务程序如下,每处理一个数据调用一次jump 子程序,由a 逐次-1计数。
jump: SUB #1h,a rsbx xf rpt #5 nop主程序开始 等待定时中断堆栈设置 寄存器设置 启动A/D 转换定时器初始化 开中断 中断服务程序开始读取A/D 转换结果启动A/D 转换进行滤波运算转换结果有效?运算结果送D/A 转换器返回主程序 YNportr 07fffh,*ar2rpt #5nopssbx xfnopportr 0ffffh,*ar5nopnopstl a,*ar5;暂存累加器A的值nopnopcall filter_startnopnopld *ar5,anopnopportw *ar2,0bfffhnopnopRete(2)滤波程序如下,由A/D转换来的数据存在寄存器ar2中,经公式1()()()Nky n h k x n k-==-∑处理后生成滤波后的数据存放在寄存器ar3中,送到D/A转换。
filter_start:LD *ar2,AnopnopnopnopSFTA A,6nopnopnopnopstl A,*ar3nopnopnopnopRPT #K_A-1-1MAR *ar3-0%MPY *ar3+0%,#f15,B LD B,AMPY *ar3+0%,#f14,B ADD B,AMPY *ar3+0%,#f13,B ADD B,AMPY *ar3+0%,#f12,B ADD B,AMPY *ar3+0%,#f11,B ADD B,AMPY *ar3+0%,#f10,B ADD B,AMPY *ar3+0%,#f9,B ADD B,AMPY *ar3+0%,#f8,B ADD B,AMPY *ar3+0%,#f7,B ADD B,AMPY *ar3+0%,#f6,B ADD B,AMPY *ar3+0%,#f5,B ADD B,AMPY *ar3+0%,#f4,B ADD B,AMPY *ar3+0%,#f3,B ADD B,AMPY *ar3+0%,#f2,B ADD B,AMPY *ar3+0%,#f1,B ADD B,AMPY *ar3+0%,#f0,B ADD B,ASFTA A,-4STH A,*ar2NOPfilter_end:RET六、实时滤波器结果展示低频输入输出波形高频输入输出波形示波器通道一接A/D输入端,通道2接D/A输出端,由信号发生器在输入端输入正弦信号,改变输入频率观察实际滤波结果。
实际滤波结果如下:开始衰减频率:2.2kHz截至衰减频率:3.8kHz结果显示2.2kHz之前信号几乎无衰减,3.8kHz之后信号基本衰减到0,故实际过渡带为2.2kHz~3.8kHz。
用软件方法从CCS上查看滤波程序运行后的结果,方法为点击View Graph Time/Frequency…,按图12所示填入相应参数,看频域图要把Display type 选择为FFT Magnitude。
输入信号和滤波后输出信号的时域图和频域图如图13所示。
观测信号波形的属性设置七、误差分析设计的滤波器开始到截止的波段为2.5kHz~4.6kHz,实际开始衰减的频率为2.2kHz偏低;实际截止频率为3.8kHz偏低;原因可能有:1、滤波器参数设计误差2、DSP芯片硬件精确度不足引起误差3、滤波程序设计时采样频率设计不当引起误差八、感想本次实验让我收获了很多。
首先,通过实时滤波器参数设计,让我对数字信号处理中的FIR滤波器有了更深入的了解,也加强了对MATLAB的信号处理功能的运用能力;由于实时滤波器用的是汇编语言实现,这深化了我对DSP芯片内部各模块的理解及各种寄存器的运用。