dsp-基于fir的语音信号滤波(编辑修改稿)内容摘要:

ir1(n,[w1 w2],window)。 //使用标准频率响应的加窗设计函数 fir1 freqz(b,1,512)。 //数字滤波器频率响应 t = (0:100)/Fs。 s = sin(2*pi*t*5)+sin(2*pi*t*15)+sin(2*pi*t*30)。 //混和正弦波信号 sf = filter(b,1,s)。 //对信号 s进行滤波 基于 FIR 的语音信号滤波 第 15 页 共 34 页 图 32 滤波前后的波形 运行程序后,使用 DSP 的集成开发环境 CCS 可以将输入数据与滤波结果显示出来,通过与使用 MATLAB 的 SIMULINK 功能仿真出的滤波结果进行比较,可以验证用 DSP芯片 C54x 实现的该 FIR 滤波器的滤波过程是否正确。 利用 MATLAB 的滤波器设计函数 fir1 设计了一个具有线性相位的数字低通 FIR 滤波器,得到了该滤波器的滤波系数及幅频特性曲线、相频特性曲线,并且用 MATLAB 的仿真工具 SIMULINK 仿真了该 FIR滤波器的滤波过程;通过线性缓冲区法对 FIR 滤波器在 DSP 芯片 C54x 的实现做了理论上的分析。 用 MATLAB 语言可方便、快捷地设计具有线性相位的 FIR 滤波器,而且对于参数的修改也十分方便。 用 MATLAB 仿真工具可以清晰地仿真出 FIR 滤波器的滤波过程,有利于理解滤波过程,且可以判断滤波结果的正确性。 利用 DSP 芯片实现 FIR滤波器,不仅具有准确度高、执行速度快等特点,而且用程序可移植性好 ,实用性强可以十分方便地改变滤波器特性。 在实际应用中,只需要按照要求修改滤波器的参数,并对程序作微小的改动,即可实现不同要 求的 FIR 滤波器。 基于 FIR 的语音信号滤波 第 16 页 共 34 页 4 程序编写及调试结果 程序 BSP .set 0。 //当前使用 McBsp0。 McBsp0 内存映射寄存器 SPSA0 .set 038h。 //定义子地址寄存器映射位置 SPSD0 .set 039h。 //定义子块数据寄存器映射位置 DRR10 .set 021h。 //接收数据寄存器 1 映射位置 DRR20 .set 020h。 //接收数据寄存器 2 映射位置 DXR10 .set 023h。 //发送数据寄存器 1 映射地址 DXR20 .set 022h。 //发送数据寄存器 2 映射地址。 McBsp1 //内存映射寄存器 SPSA1 .set 048h SPSD1 .set 049h DRR11 .set 041h DRR21 .set 040h DXR11 .set 043h DXR21 .set 042h。 McBsp Subaddressed Registers SPCR1 .set 00h。 //定义 SPCR10 的映射子地址 SPCR2 .set 01h //定义 SPCR20 的映射子地址 RCR1 .set 02h //接收控制寄存器 1 映射子地址 RCR2 .set 03h //接收控制寄存器 2 映射子地址 XCR1 .set 04h //发送控制寄存器 1 映射子地址 XCR2 .set 05h //发送控制寄存器 2 映射子地址 SRGR1 .set 06h //采样率发生器寄存器 1 映射子地址 SRGR2 .set 07h //采样率发生器寄存器 2 映射子地址 基于 FIR 的语音信号滤波 第 17 页 共 34 页 MCR1 .set 08h //多通道控制寄存器 1 映射子地址 MCR2 .set 09h //多通道控制寄存器 2 映射子地址 RCERA .set 0ah //接收通道控制寄存器 1 映射子地址 RCERB .set 10bh //接收通道控制寄存器 2 映射子地址 XCERA .set 0ch //发送通道使能寄存器 A 映射子地址 XCERB .set 0dh //发送通道使能寄存器 B 映射子地址 PCR .set 0eh //引脚控制寄存器映射子地址 .if BSP = 0 //条件汇编,因为 5402有两个同步缓冲口如果 BSP=0则使用同步缓冲口 0 SPSA .set SPSA0 //由于同步缓冲口采用子地址寻址方式 SPSD .set SPSD0 RDRR .set DRR10 RDXR .set DXR10 .endif .if BSP = 1 //条件汇编,因为 5402有两个同步缓冲口如果 BSP=1则使用同步缓冲口 1 SPSA .set SPSA1 SPSD .set SPSD1 RDRR .set DRR11 RDXR .set DXR11 .endif //以下程序是写数据的子程序也就是宏 WR_SUB_REG .macro val,addr //写 McBsp 控制寄存器 stm addr,SPSA //将 ADDR 的地址写入 SPSA nop //空操作 stm val,SPSD //将配置值 写入 SPSD nop //空操作 基于 FIR 的语音信号滤波 第 18 页 共 34 页 .endm //以下程序是读数据的子程序也就是宏 RD_SUB_REG .macro addr,acc //读 McBsp 控制寄存器 stm addr,SPSA //将 ADDR 的地址写入 SPSA nop //空操作 ldm SPSD,acc //送入累加器保存 nop //空操作 nop nop .endm WAITTRX .macro //等待串口中断宏 WAITR? RD_SUB_REG SPCR1,A and 11, A bc WAITR?, AEQ .endm PROGREG .macro progword //DSP 与 AD50 的二次通讯 (将其最后一位置为 1 便可 ) stm 01h,RDXR WAITTRX stm progword,RDXR WAITTRX .endm //以下程序是等待延时子程序 wait .macro STM 0400h, AR0 RPT *AR0 基于 FIR 的语音信号滤波 第 19 页 共 34 页 NOP .endm .mmregs .global _c_int00 .sect .vectors //以下是中断向量表 RESET b _c_int00 nop nop .space 19*4*16 BRINT0 b recv nop nop BXINT0 rete nop nop nop .space 10*4*16 //以下是主程序 .text _c_int00 ld 0h,DP //设置数据页指针为第 0 页 stm 0ff00h,SP //设置堆栈指针地址为 20xxH ssbx INTM //关闭所有中断 ssbx SXM //禁止符号扩展方式位。 请看 ST1 寄存器 st 7FFFh,SWWSR //设置等待寄存器全都设置为 7 等待 st 0E8h,PMST //设置处理器工作方式状态寄存器 st 1007h,CLKMD //设置时钟方式寄存器,工作频率为 20M(工作频率取决于 (高四位 +1*10M? 基于 FIR 的语音信号滤波 第 20 页 共 34 页 stm 1000h,AR1 stm 1000h,AR2 //初始化 DSP McBsp 串口 mcbsp_init rsbx CPL //选用数据页指针( DP)直接寻址方式 nop //cpl latency nop //cpl latency nop //cpl latency WR_SUB_REG 0000H,SPCR1 //初始化串行口配置寄存器 1 WR_SUB_REG 0200H,SPCR2 //初始化串行口配置寄存器 2 WR_SUB_REG 000CH,PCR //初始化引脚控制寄存器 WR_SUB_REG 0000H,SPCR1 //初始化串行口配置寄存器 1 WR_SUB_REG 0000H,SPCR2 //初始。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。