文档库 最新最全的文档下载
当前位置:文档库 › 语音信号的数字滤波处理

语音信号的数字滤波处理

语音信号的数字滤波处理
语音信号的数字滤波处理

题目:语音信号的FIR滤波器处理

组员:

班级:

指导教师:

成绩:

摘要:

DSP( Digital Signal Processing) 也就是我们常说的数字信号处理,

它是利用计算机或专用处理设备, 以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理, 以得到符合人们需要的信号形式。数字滤波是语音信号处理、图像处理、模式识别、频谱分析等应用的基本处理算法。在数字信号处理中,滤波具有极其重要的作用。数字滤波是谱分析、通信信号处理等的基本算法,它能够满足滤波器对幅度和相位的严格要求,解决了模拟滤波器所无法克服的电压漂移、温度漂移和噪声等问题,同时用DSP芯片实现数字滤波除了具有稳定性好、精确度高、不受环境影响等优点外,又有很高的可编程性和灵活性。本文采用数字滤波器的设计基础及用窗函数法设计FIR滤波器的方法,用CCS 2.0进行观察效果。

关键词:FIR滤波 MATLAB 窗函数法 CCS

1、设计目的

1.1 掌握 FIR 数字滤波器的设计思路及方法步骤,学会设计各种低通、高通、带通滤波器。

1.2 学会利用DSP 技术课程以及其他有关先修课程的理论和生产实际知识去分 析和解决具体问题。

1.3 熟悉汇编语言,学会用 DSK/DEC5402 CCS

2.0 软件编写C 语言程序和汇编

语言程序。

1.4 培养自己对工程设计的独立工作能力。

2、设计要求

2.1设计一FIR 低通滤波器,实现对语音信号的滤波。 2.2用语音信号去检验该滤波器,查看滤波效果。

根据老师的要求,我们自己拟定了滤波器的指标:Fs=8000hz ,Wp=1500 Hz ,Ws=2000 Hz ,通带波纹为0.01,阻带波纹为0.1,N=37。

3、课程设计内容

通过 DSP 处理器控制 TLC320AD50 采集音频信号,在 CCS 软件中分析音频信号的频谱图,使用 Matlab 设计相应的 FIR 低通数字滤波器得到滤波器H(z)的系数,然后根据这些系数,编写 DSP 程序(C 语言或汇编)对已采集信号进行处理,最后在 CCS 软件中得到处理后音频信号的频谱图,比较滤波前后信号的频谱图。

4.FIR 滤波器的设计

4.1滤波器的设计的原理介绍

FIR 数字滤波器的单位取样响应是时宽有限的,即:2

1n n n ≤≤

一个N 阶的非递归型数字滤波器(FIR 滤波器)的差分方程如公式1-1 所示

()()∑∑-=-=-=-=10

10

)()(N k k N k k n x b k n x k h n y 1-1

差分方程式中的系数k b 等于单位取样响应的序列值h (n ),其系统函数H(z)

可以表示为公式1-2 所示的形式:

()k

N k k z b z H --=∑=1

1-2

H(z)是的多项式,因此它的极点只能在Z 平面的原点上。

FIR 滤波器通常采用窗函数方法来设计。窗设计的基本思想是,首先选择一个适当的理想选频滤波器(它总是具有一个非因果,无限持续时间脉冲响应), 然后街区(加窗)它的脉冲响应得到线性相位和因果FIR 滤波器。我们用()jw e Hd 表示理想的选频滤波器,它在通带上具有单位增益和线性相位,在阻带上具有零 响应。一个带宽wc

为了从)(n hd 得到一个FIR 滤波器,必须同时在两边截取)(n hd 。而要得到 一个因果的线性相位滤波器,它的)(n h 长度为N ,必须满足公式1-3:

()1)(--±=n N h n h 1-3

h (n )可以看做是hd (n )与窗函数w (n )的乘积,如公式1-4 所示:

)()()(n w n hd n h ±= 1-4

这种操作叫做加窗,其中根据w (n )的不同定义,可以得到不同的窗结构。 在频域中,因果FIR 滤波器响应)(jw

e H 由()jw e Hd 和窗响应)(jw e W 的周

期卷积得到,如公式1-5所示:

()

)()(jw jw jw e W e Hd e H ?= 1-5

4.2 FIR 滤波器的基本结构

在式2.1.1中,若所有的ai 均为0,则得FIR 滤波器的差分方程:

(2.2.1)

对式(2.2.1)进行z 变换,可得FIR 滤波器的传递函数:

)()(1

∑-=-=N i i i n x b n y

(2.2.2)

由此可得到FIR 滤波器的结构如下图所示:

4.3 FIR 滤波器的特点

(1)即具有严格的线性相位,又具有任意的幅度;(2)FIR 滤波器的单位

抽样响应是有限长的,因此滤波器性能稳定;(3)只要经过一定的延迟时,任何非因果有限长序列,因而能用因果系统来实现;(4)FIR 滤波器由于单位冲击响应是有限长的,因而可用快速傅立叶变换(FFT )算法来实现过滤信号,可大大提高运算效率

5、FIR 滤波器的Matlab 设计

5.1 FIR 滤波器设计

FIR 滤波器的设计方法很多,文中选取通常使用的用窗函数法。FIR 滤波器的设

计问题在于寻求一系统函数∑-=-=10

)()(N n n z n h z H ,使其响应 jw e z jw z H e H ==)()( 逼近滤波器要求的理想频率响应 )(jw d e H 。

)()()(1

∑-=-==N i i i z b z X z Y z H

5.2 滤波器的Matlab 设计

MATLAB 被称为第四代计算机语言,又称为“草稿纸式”的语言,它具有不

同于其他语言如Fortran 、C 语言等的特点,是边解释边执行的计算机语言。MATLAB 是一款具有强大的矩阵运算、数据处理和图形显示功能的软件,其输出结果可视化,编程效率极高,用极少的代码即可实现复杂的运行,因此它使工程技术人员摆脱了繁琐的程序代码,以便快速地验证自己的模型和算法。

fir1就是采用经典窗函数法设计线性相位FIR 数字滤波器的函数,且具有标准低通,带通,高通,带阻等类型。函数调用格式为:

b=fir1(n,wn[,'ftype',window])

式中,n 为FIR 滤波器的阶数,对于高通,带阻滤波器,n 需取偶数;wn 为滤波器截止频率,范围为0~1(归一化频率)。对于带通,带阻滤波器,wn=[w1,w2](w1

‘ ftype'为滤波器的类型:缺省时为低通或带通滤波器;'high'为高通滤波器;‘stop'为带阻滤波器,'DC-1'为第一频带为通带的多带滤波器;'DC-0'为第一频带为阻带的多带滤波器。

window 为窗函数列向量,其长度为n+1。缺省时,自动取哈明窗。MATLAB 提供的窗函数有boxcar 、hanning 、hamming 、bartlett 、blackman 、kaiser 、chebwin ,调用方式见上节。b 为FIR 滤波器系数向量,长度为n+1。FIR 滤波器的传递函数具有下列形式:

n

z n b z b z b b z b ---+++++=)1()3()2()1()(21

技术指标为:采用25阶低通滤波器,汉明窗(Hamming Window)函数,截止频率为1000Hz ,采样频率为8000Hz ,增益40db 。 框图如下:

MATLAB的人机交互软件设计

6、FIR滤波器的DSP实现

在用定点DSP器件设计数字滤波器时,一个重要的问题就是由于硬件字长精度有限,运算会出现溢出。FIR滤波器可以用较少的阶数获得很高的选择特性,所用的存储单元少、运算次数少,具经济、高效的特点。在相位要求不敏感的场合,如语音通信等,很适合用FIR滤波器。典型DSP系统的构成:

其中的输入信号可以是麦克风输出的语音信号、电话线的已调数据信号,可以是编码后在数字链路上传输或存储在计算机里的摄像机图像信号等输入号。首先进行带限滤波和抽样,然后进行A/D转换成数字比特流,由耐奎斯特样定理可知为了保证信息完整抽样频率至少是输入带限信号最高频率的2倍。之后输入DSP芯片的是以抽样形式表示的数字信号,DSP芯片对输入信号行处理,如进行一系列的乘累加操作,最后经过处理后的数字样值经D/A换成为模拟样值再经过内插和平滑滤波就得到了连续的模拟波形。

相应程序如下:

.title "ex2"

BSP .set 1 ;当前使用McBsp1

;McBsp 内存映射寄存器

SPSA0 .set 038h

SPSD0 .set 039h

DRR10 .set 021h

DRR20 .set 020h

DXR10 .set 023h

DXR20 .set 022h

SPSA1 .set 048h

SPSD1 .set 049h

DRR11 .set 041h

DRR21 .set 040h

DXR11 .set 043h

DXR21 .set 042h

SPSA2 .set 034h

SPSD2 .set 035h

DRR12 .set 031h

DRR22 .set 030h

DXR12 .set 033h

DXR22 .set 032h

;McBsp Subaddressed Registers

SPCR1 .set 00h

SPCR2 .set 01h

RCR1 .set 02h

RCR2 .set 03h

XCR1 .set 04h

XCR2 .set 05h

SRGR1 .set 06h

SRGR2 .set 07h

MCR1 .set 08h

MCR2 .set 09h

RCERA .set 0ah

RCERB .set 0bh

XCERA .set 0ch

XCERB .set 0dh

PCR .set 0eh

.if BSP = 0

SPSA .set SPSA0

SPSD .set SPSD0

RDRR .set DRR10

RDXR .set DXR10

IMASK .set 0010h

.endif

.if BSP = 1

SPSA .set SPSA1

SPSD .set SPSD1

RDRR .set DRR11

RDXR .set DXR11

IMASK .set 0400h

.endif

.asg AR0,FIR_INDEX_P

.asg AR4,FIR_DATA_P

.asg AR5,FIR_COFF_P

WR_SUB_REG .macro val,addr ;写McBsp控制寄存器

stm addr,SPSA

nop

stm val,SPSD

nop

.endm

RD_SUB_REG .macro addr,acc ;读McBsp控制寄存器

stm #:addr:,SPSA

nop

ldm SPSD,acc

nop

nop

nop

.endm

WAITTRX .macro ;等待串口中断WAITR?

RD_SUB_REG SPCR1,A

and #1<<1, A

bc WAITR?, AEQ

.endm

PROGREG .macro progword ;与AD50二次通讯stm #01h,RDXR

WAITTRX

stm #:progword:,RDXR

WAITTRX

.endm

wait .macro

STM #0008h, AR2

RPT *AR2

NOP

.endm

.mmregs

.global _c_int00

.sect ".vectors"

RESET b _c_int00

nop

nop

.space 19*4*16

BRINT0 b recv

nop

nop

BXINT0 b trans

nop

nop

.space 4*4*16

BRINT1 b recv

nop

nop

BXINT1 b trans

nop

nop

.space 4*4*16

K_FIR_BFFR .set 16

coff_fir_table .sect "coff_fir"

.word

6fh,0f3h,269h,50dh,8a9h,0c99h,0ff8h,11ebh,11ebh,0ff8h,0c99h,8a9h,50dh,269h,0f3h ,64h

d_data_buffer .usect "fir_bfr",40

.text

_c_int00

ld #0h,DP

stm #7ffh,SP

ssbx INTM

ssbx SXM

st #2491h,SWWSR

st #0ffe0h,PMST

ST #0h,CLKMD

tst: BITF CLKMD,#1h

BC tst,TC

ST #1087h,CLKMD

BITF CLKMD,#1h

RPT #0FFh

NOP

stm #5000h,ar7

stm #5000h,ar6

fir_init

stm #1,AR0

stm #coff_fir_table,FIR_COFF_P

stm #d_data_buffer,FIR_DATA_P

rptz A,#K_FIR_BFFR

stl A,*FIR_DATA_P

stm #(d_data_buffer+K_FIR_BFFR-1),FIR_DATA_P

stm #K_FIR_BFFR,BK

mcbsp_init ;初始化McBsp串口

rsbx CPL

nop ; cpl latency

nop ; cpl latency

nop ; cpl latency

ld #0,DP

ssbx INTM

ssbx SXM

WR_SUB_REG #0000H,SPCR1

WR_SUB_REG #0200H,SPCR2

WR_SUB_REG #000CH,PCR

WR_SUB_REG #0000H,SPCR1

WR_SUB_REG #0000H,SPCR2

WR_SUB_REG #0040H,RCR1 ;16 BITs

WR_SUB_REG #0004H,RCR2 ;Ignore FS after the first

WR_SUB_REG #0040H,XCR1 ;16 BITs

WR_SUB_REG #0004H,XCR2 ;Ignore FS after the first

ld 100,A

wait

andm #0ff3fh, 54h ;set interrupts to come from serial ports not DMA

;by clearing bits 6 and 7 in DMPREC stm #0,RDXR

WR_SUB_REG #0001H,SPCR1 ;启动McBsp串口

WR_SUB_REG #0201H,SPCR2

ld 100,A

wait

aic_init

stm #0h,IMR

orm IMASK,IMR ;二次通讯初始化AD50

stm #0ffffh,IFR

PROGREG 0301h

PROGREG 0410h

ld RDRR,A

ld RDRR,A

stlm A,RDXR

stlm A,RDXR

rsbx INTM

nop

nop

nop

js nop

nop

nop

b js

recv ldm RDRR,A ;ADC采样数据经滤波后发送到DAC输出stl A,*FIR_DATA_P+0%

rptz A,(K_FIR_BFFR-1)

mac *FIR_DATA_P+0%,*FIR_COFF_P+0%,A

andm #0fffeh,ah

sth A,RDXR

rsbx XF

rete

trans rsbx XF

rete

.end

7、FIR滤波器的检验

7.1 检验过程

编译生成*.out文件,选择File->Load Programe装入*.out文件,然后选择File->Data->Load装入*.dat文件并打开,在弹出的对话框中输入起始地址indata和长度300,数据类型为data。

7.2 查看输入和输出

点击View->Graph->Time/Frenquency进入图形属性对话框进行设置,然后点击ok,即是下面的窗口:

7.3滤波前后语音信号的波形及其频谱

滤波前后波形对比图

滤波前后频谱对比图

比较滤波前后语音信号的波形图、频谱图,可以得出结论:滤波前后语音信号几乎未变,回放信号的声音和原始信号的声音也几乎一致,这也说明本课题所设计的滤波器是合理的,它能对所采集的语音信号进行高效滤波。

遇到问题及解决方法

1)实验时,未做初始化设置直接进入,没有装入gel文件及相关参数,导致输入代码编译链接后不能载入程序。

解决方法:初始化设置软件仿真cpu和硬件仿真cpu,并设置其中所用的gel文件,保存并退出启动dsp选择忽略进入编辑编译初始化界面,由软件仿真cpu 进入编辑编译工具

8、心得体会

首先,是学习上的巩固。一方面,通过复习课本和实验,对DSP的基础知识又有了很大的巩固。其次,通过对用Mathlab实现FIR滤波器的设计,熟悉了matlab软件的一些相关的窗口函数以及相关功能的调用,如怎样实现窗函数的调用,怎样实现滤波,等等。

第二,增进了与同学的交流。平常除了上课,大家也比较少接触。而每次做课程设计的时候,大家总会互相探讨,发表自己的看法,帮忙解决遇到的问题,分享自己的心得,于是交流也就不由自主的变得相对频繁些了,感觉也就更亲切了。

第三,对FIR的滤波器性能和作用有了更深一层的了解。FIR滤波器的应用十分广泛,当今许多信号处理系统和图像处理系统等都要求信号具有线性相位特性。在这方面,FIR滤波器有十分独特的优点,运用mathlab语言,我们能够很容易的设计出具有严格线性相位的FIR滤波系统,以及比较容易的实现。此外,我们还知道了FIR滤波器是永远稳定的,因为FIR滤波器的冲激响应是有限长序列,其系统函数为一个多项式,它所含的的极点多为原点。

相关文档