DSP实时滤波器.docx
- 文档编号:3784092
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:11
- 大小:362.21KB
DSP实时滤波器.docx
《DSP实时滤波器.docx》由会员分享,可在线阅读,更多相关《DSP实时滤波器.docx(11页珍藏版)》请在冰豆网上搜索。
DSP实时滤波器
1、摘要
在信号处理中,滤波占有十分重要的地位。
数字滤波是数字信号处理的基本方法。
数字滤波与模拟滤波相比有很多优点。
它除了可避免模拟滤波器固有的电压漂移、温度漂移和噪声等问题外,还能满足滤波器对幅度和相位的严格要求DSP芯片实现数字滤波具有稳定性好、精确度高、不受环境影响等优点。
数字滤波器分为有限冲激响应滤波器FIR和无限冲激响应滤波器IIR,由于FIR是全零点的滤波器,因而系统总是稳定的。
这对于系统综合是很重要的。
本实验采用TI公司的TMS320C5409型号的DSP芯片实现具有线性相位的FIR低通数字滤波。
2、利用Matlab获取滤波器系
设h(n)(n=0,1,2,…,N一1)为滤波器的冲激响应,输入信号为x(n),则FIR滤波器就是要实现下列差分方程:
上式就是FIR滤波器的差分方程。
FIR滤波器的最主要的特点是没有反馈回路,因此它是无条件稳定系统。
它的单位脉冲响应h(n)是一个有限长序列。
由上面的方程可见,FIR滤波箅法实际上足一种乘法累加运算,它不断地输入样本x(n),经延时做乘法累加,再输出滤波结果y(n)。
FIR滤波器的一个分支的延时线,把每一节的输出加权累加,得到滤波器的输出。
结构如图1所示,它由一条均匀间隔的延迟线上对抽失信号进行加权求和构成。
FIR滤波器的直接型结构图
本实验用MATLAB的fdatool功能实现滤波器设计。
具体方法如下:
(1)输入fdatool,弹出滤波器设计窗口。
输入设计指标,令采样频率为20000Hz,开始衰减的频率为2500Hz截止频率为4600Hz,衰减为50db,软件自动完成设计。
(2)点击File>Export,选择参数,导出滤波器系数,再由导出的参数乘32768后取整数部分转换为十六进制数,即为设计的十六进制系数。
设计的系数如下:
0.00420583956840752450089H
-0.0075151837349766307-00F5H
-0.035418063175322867-0487H
-0.059588974025311756-079DH
-0.035994625237031161-0498H
0.0625266355351841440800H
0.205632985960470331A51H
0.3124941955948394927FCH
0.3124941955948394927FCH
0.205632985960470331A51H
0.0625266355351841440800H
-0.035994625237031161-0498H
-0.059588974025311756-079DH
-0.035418063175322867-0487H
-0.0075151837349766307-00F5H
0.00420583956840752450089H
得出的结果是一个16阶的FIR低通滤波器。
3、滤波器系数验证
滤波器的系数验证及软件仿真选用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的高频分量,实现了低通滤波,滤波器设计正确。
4、DSP实时滤波器代码合成过程
程序设计的总体思路是:
启动AD模块对输入的模拟信号进行模数转换,每采集到一个数据就送人DSP滤波运算,运算结果送DAC转换为模拟量。
不断地重复上述过程,在DAC7625的输出端就得到滤波后的模拟信号。
为了精确地控制ADS7864的采样率,使用DSP内部的定时器控制采样时间间隔T,设置定时器的定时时间等于采样时间间隔T,并让它工作在中断方式,则定时器每过T时间就向CPU发出中断请求,CPU响应中断请求,转去执行中断服务程序,在中断服务程序中读取A/D转换结果,对转换结果进行滤波运算,并将运算结果送D/A转换器转换为模拟量。
因此,程序分为A/D转换、定时器中断、中断服务程序、D/A转换等几个模块。
5、实时滤波器软件流程和硬件组成框图及核心代码陈述
1、定时器初始化代码如下,设置中断频率prd为00C7h即十进制199,tcr为082Eh即令TDDR第四位为14,十进制为15,由中断周期计算公式公式TINT频率=
算出,其中
为时钟周期,DSP中的时钟频率为60MHz,由此算的采样频率Fs=20000Hz。
stm#0010h,tcr;TSS置1,便于接下来的设置
stm#00C7h,prd;置位prd以设置中断频率,十进制为199
stm#082Eh,tcr;tcr初始化,令TDDR的低四位为14,10进制为15
2、中断服务程序如下,每处理一个数据调用一次jump子程序,由a逐次-1计数。
jump:
SUB#1h,a
rsbxxf
rpt#5
nop
portr07fffh,*ar2
rpt#5
nop
ssbxxf
nop
portr0ffffh,*ar5
nop
nop
stla,*ar5;暂存累加器A的值
nop
nop
callfilter_start
nop
nop
ld*ar5,a
nop
nop
portw*ar2,0bfffh
nop
nop
Rete
(2)滤波程序如下,由A/D转换来的数据存在寄存器ar2中,经公式
处理后生成滤波后的数据存放在寄存器ar3中,送到D/A转换。
filter_start:
LD*ar2,A
nop
nop
nop
nop
SFTAA,6
nop
nop
nop
nop
stlA,*ar3
nop
nop
nop
nop
RPT#K_A-1-1
MAR*ar3-0%
MPY*ar3+0%,#f15,B
LDB,A
MPY*ar3+0%,#f14,B
ADDB,A
MPY*ar3+0%,#f13,B
ADDB,A
MPY*ar3+0%,#f12,B
ADDB,A
MPY*ar3+0%,#f11,B
ADDB,A
MPY*ar3+0%,#f10,B
ADDB,A
MPY*ar3+0%,#f9,B
ADDB,A
MPY*ar3+0%,#f8,B
ADDB,A
MPY*ar3+0%,#f7,B
ADDB,A
MPY*ar3+0%,#f6,B
ADDB,A
MPY*ar3+0%,#f5,B
ADDB,A
MPY*ar3+0%,#f4,B
ADDB,A
MPY*ar3+0%,#f3,B
ADDB,A
MPY*ar3+0%,#f2,B
ADDB,A
MPY*ar3+0%,#f1,B
ADDB,A
MPY*ar3+0%,#f0,B
ADDB,A
SFTAA,-4
STHA,*ar2
NOP
filter_end:
RET
6、实时滤波器结果展示
低频输入输出波形高频输入输出波形
示波器通道一接A/D输入端,通道2接D/A输出端,由信号发生器在输入端输入正弦信号,改变输入频率观察实际滤波结果。
实际滤波结果如下:
开始衰减频率:
2.2kHz
截至衰减频率:
3.8kHz
结果显示2.2kHz之前信号几乎无衰减,3.8kHz之后信号基本衰减到0,故实际过渡带为2.2kHz~3.8kHz。
用软件方法从CCS上查看滤波程序运行后的结果,方法为点击ViewGraphTime/Frequency…,按图12所示填入相应参数,看频域图要把Displaytype选择为FFTMagnitude。
输入信号和滤波后输出信号的时域图和频域图如图13所示。
观测信号波形的属性设置
7、误差分析
设计的滤波器开始到截止的波段为2.5kHz~4.6kHz,实际开始衰减的频率为2.2kHz偏低;实际截止频率为3.8kHz偏低;原因可能有:
1、滤波器参数设计误差
2、DSP芯片硬件精确度不足引起误差
3、滤波程序设计时采样频率设计不当引起误差
8、感想
本次实验让我收获了很多。
首先,通过实时滤波器参数设计,让我对数字信号处理中的FIR滤波器有了更深入的了解,也加强了对MATLAB的信号处理功能的运用能力;由于实时滤波器用的是汇编语言实现,这深化了我对DSP芯片内部各模块的理解及各种寄存器的运用。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 实时 滤波器