语音信号的数字滤波处理.docx
《语音信号的数字滤波处理.docx》由会员分享,可在线阅读,更多相关《语音信号的数字滤波处理.docx(16页珍藏版)》请在冰豆网上搜索。
语音信号的数字滤波处理
题目:
语音信号的FIR滤波器处理
组员:
班级:
指导教师:
成绩:
摘要:
DSP(DigitalSignalProcessing)也就是我们常说的数字信号处理,
它是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。
数字滤波是语音信号处理、图像处理、模式识别、频谱分析等应用的基本处理算法。
在数字信号处理中,滤波具有极其重要的作用。
数字滤波是谱分析、通信信号处理等的基本算法,它能够满足滤波器对幅度和相位的严格要求,解决了模拟滤波器所无法克服的电压漂移、温度漂移和噪声等问题,同时用DSP芯片实现数字滤波除了具有稳定性好、精确度高、不受环境影响等优点外,又有很高的可编程性和灵活性。
本文采用数字滤波器的设计基础及用窗函数法设计FIR滤波器的方法,用CCS2.0进行观察效果。
关键词:
FIR滤波MATLAB窗函数法CCS
1、设计目的
1.1掌握FIR数字滤波器的设计思路及方法步骤,学会设计各种低通、高通、带通滤波器。
1.2学会利用DSP技术课程以及其他有关先修课程的理论和生产实际知识去分
析和解决具体问题。
1.3熟悉汇编语言,学会用DSK/DEC5402CCS2.0软件编写C语言程序和汇编语言程序。
1.4培养自己对工程设计的独立工作能力。
2、设计要求
2.1设计一FIR低通滤波器,实现对语音信号的滤波。
2.2用语音信号去检验该滤波器,查看滤波效果。
根据老师的要求,我们自己拟定了滤波器的指标:
Fs=8000hz,Wp=1500Hz,Ws=2000Hz,通带波纹为0.01,阻带波纹为0.1,N=37。
3、课程设计内容
通过DSP处理器控制TLC320AD50采集音频信号,在CCS软件中分析音频信号的频谱图,使用Matlab设计相应的FIR低通数字滤波器得到滤波器H(z)的系数,然后根据这些系数,编写DSP程序(C语言或汇编)对已采集信号进行处理,最后在CCS软件中得到处理后音频信号的频谱图,比较滤波前后信号的频谱图。
4.FIR滤波器的设计
4.1滤波器的设计的原理介绍
FIR数字滤波器的单位取样响应是时宽有限的,即:
一个N阶的非递归型数字滤波器(FIR滤波器)的差分方程如公式1-1所示
1-1
差分方程式中的系数
等于单位取样响应的序列值h(n),其系统函数H(z)
可以表示为公式1-2所示的形式:
1-2
H(z)是的多项式,因此它的极点只能在Z平面的原点上。
FIR滤波器通常采用窗函数方法来设计。
窗设计的基本思想是,首先选择一个适当的理想选频滤波器(它总是具有一个非因果,无限持续时间脉冲响应),
然后街区(加窗)它的脉冲响应得到线性相位和因果FIR滤波器。
我们用
表示理想的选频滤波器,它在通带上具有单位增益和线性相位,在阻带上具有零
响应。
一个带宽wc为了从
得到一个FIR滤波器,必须同时在两边截取
。
而要得到
一个因果的线性相位滤波器,它的
长度为N,必须满足公式1-3:
1-3
h(n)可以看做是hd(n)与窗函数w(n)的乘积,如公式1-4所示:
1-4
这种操作叫做加窗,其中根据w(n)的不同定义,可以得到不同的窗结构。
在频域中,因果FIR滤波器响应
由
和窗响应
的周期卷积得到,如公式1-5所示:
1-5
4.2FIR滤波器的基本结构
在式2.1.1中,若所有的ai均为0,则得FIR滤波器的差分方程:
(2.2.1)
对式(2.2.1)进行z变换,可得FIR滤波器的传递函数:
(2.2.2)
由此可得到FIR滤波器的结构如下图所示:
4.3FIR滤波器的特点
(1)即具有严格的线性相位,又具有任意的幅度;
(2)FIR滤波器的单位抽样响应是有限长的,因此滤波器性能稳定;(3)只要经过一定的延迟时,任何非因果有限长序列,因而能用因果系统来实现;(4)FIR滤波器由于单位冲击响应是有限长的,因而可用快速傅立叶变换(FFT)算法来实现过滤信号,可大大提高运算效率
5、FIR滤波器的Matlab设计
5.1FIR滤波器设计
FIR滤波器的设计方法很多,文中选取通常使用的用窗函数法。
FIR滤波器的设计问题在于寻求一系统函数
,使其响应
逼近滤波器要求的理想频率响应
。
5.2滤波器的Matlab设计
MATLAB被称为第四代计算机语言,又称为“草稿纸式”的语言,它具有不同于其他语言如Fortran、C语言等的特点,是边解释边执行的计算机语言。
MATLAB是一款具有强大的矩阵运算、数据处理和图形显示功能的软件,其输出结果可视化,编程效率极高,用极少的代码即可实现复杂的运行,因此它使工程技术人员摆脱了繁琐的程序代码,以便快速地验证自己的模型和算法。
fir1就是采用经典窗函数法设计线性相位FIR数字滤波器的函数,且具有标准低通,带通,高通,带阻等类型。
函数调用格式为:
b=fir1(n,wn[,'ftype',window])
式中,n为FIR滤波器的阶数,对于高通,带阻滤波器,n需取偶数;wn为滤波器截止频率,范围为0~1(归一化频率)。
对于带通,带阻滤波器,wn=[w1,w2](w10‘ftype'为滤波器的类型:
缺省时为低通或带通滤波器;'high'为高通滤波器;‘stop'为带阻滤波器,'DC-1'为第一频带为通带的多带滤波器;'DC-0'为第一频带为阻带的多带滤波器。
window为窗函数列向量,其长度为n+1。
缺省时,自动取哈明窗。
MATLAB提供的窗函数有boxcar、hanning、hamming、bartlett、blackman、kaiser、chebwin,调用方式见上节。
b为FIR滤波器系数向量,长度为n+1。
FIR滤波器的传递函数具有下列形式:
技术指标为:
采用25阶低通滤波器,汉明窗(HammingWindow)函数,截止频率为1000Hz,采样频率为8000Hz,增益40db。
框图如下:
N
Y
MATLAB的人机交互软件设计
6、FIR滤波器的DSP实现
在用定点DSP器件设计数字滤波器时,一个重要的问题就是由于硬件字长精度有限,运算会出现溢出。
FIR滤波器可以用较少的阶数获得很高的选择特性,所用的存储单元少、运算次数少,具经济、高效的特点。
在相位要求不敏感的场合,如语音通信等,很适合用FIR滤波器。
典型DSP系统的构成:
输入输出
其中的输入信号可以是麦克风输出的语音信号、电话线的已调数据信号,可以是编码后在数字链路上传输或存储在计算机里的摄像机图像信号等输入号。
首先进行带限滤波和抽样,然后进行A/D转换成数字比特流,由耐奎斯特样定理可知为了保证信息完整抽样频率至少是输入带限信号最高频率的2倍。
之后输入DSP芯片的是以抽样形式表示的数字信号,DSP芯片对输入信号行处理,如进行一系列的乘累加操作,最后经过处理后的数字样值经D/A换成为模拟样值再经过内插和平滑滤波就得到了连续的模拟波形。
相应程序如下:
.title"ex2"
BSP.set1;当前使用McBsp1
;McBsp内存映射寄存器
SPSA0.set038h
SPSD0.set039h
DRR10.set021h
DRR20.set020h
DXR10.set023h
DXR20.set022h
SPSA1.set048h
SPSD1.set049h
DRR11.set041h
DRR21.set040h
DXR11.set043h
DXR21.set042h
SPSA2.set034h
SPSD2.set035h
DRR12.set031h
DRR22.set030h
DXR12.set033h
DXR22.set032h
;McBspSubaddressedRegisters
SPCR1.set00h
SPCR2.set01h
RCR1.set02h
RCR2.set03h
XCR1.set04h
XCR2.set05h
SRGR1.set06h
SRGR2.set07h
MCR1.set08h
MCR2.set09h
RCERA.set0ah
RCERB.set0bh
XCERA.set0ch
XCERB.set0dh
PCR.set0eh
.ifBSP=0
SPSA.setSPSA0
SPSD.setSPSD0
RDRR.setDRR10
RDXR.setDXR10
IMASK.set0010h
.endif
.ifBSP=1
SPSA.setSPSA1
SPSD.setSPSD1
RDRR.setDRR11
RDXR.setDXR11
IMASK.set0400h
.endif
.asgAR0,FIR_INDEX_P
.asgAR4,FIR_DATA_P
.asgAR5,FIR_COFF_P
WR_SUB_REG.macroval,addr;写McBsp控制寄存器
stmaddr,SPSA
nop
stmval,SPSD
nop
.endm
RD_SUB_REG.macroaddr,acc;读McBsp控制寄存器
stm#:
addr:
SPSA
nop
ldmSPSD,acc
nop
nop
nop
.endm
WAITTRX.macro;等待串口中断
WAITR?
RD_SUB_REGSPCR1,A
and#1<<1,A
bcWAITR?
AEQ
.endm
PROGREG.macroprogword;与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"
RESETb_c_int00
nop
nop
.space19*4*16
BRINT0brecv
nop
nop
BXINT0btrans
nop
nop
.space4*4*16
BRINT1brecv
nop
nop
BXINT1btrans
nop
nop
.space4*4*16
K_FIR_BFFR.set16
coff_fir_table.sect"coff_fir"
.word6fh,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
ssbxINTM
ssbxSXM
st#2491h,SWWSR
st#0ffe0h,PMST
ST#0h,CLKMD
tst:
BITFCLKMD,#1h
BCtst,TC
ST#1087h,CLKMD
BITFCLKMD,#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
rptzA,#K_FIR_BFFR
stlA,*FIR_DATA_P
stm#(d_data_buffer+K_FIR_BFFR-1),FIR_DATA_P
stm#K_FIR_BFFR,BK
mcbsp_init;初始化McBsp串口
rsbxCPL
nop;cpllatency
nop;cpllatency
nop;cpllatency
ld#0,DP
ssbxINTM
ssbxSXM
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;16BITs
WR_SUB_REG#0004H,RCR2;IgnoreFSafterthefirst
WR_SUB_REG#0040H,XCR1;16BITs
WR_SUB_REG#0004H,XCR2;IgnoreFSafterthefirst
ld100,A
wait
andm#0ff3fh,54h;setinterruptstocomefromserialportsnotDMA
;byclearingbits6and7inDMPREC
stm#0,RDXR
WR_SUB_REG#0001H,SPCR1;启动McBsp串口
WR_SUB_REG#0201H,SPCR2
ld100,A
wait
aic_init
stm#0h,IMR
ormIMASK,IMR;二次通讯初始化AD50
stm#0ffffh,IFR
PROGREG0301h
PROGREG0410h
ldRDRR,A
ldRDRR,A
stlmA,RDXR
stlmA,RDXR
rsbxINTM
nop
nop
nop
jsnop
nop
nop
bjs
recvldmRDRR,A;ADC采样数据经滤波后发送到DAC输出
stlA,*FIR_DATA_P+0%
rptzA,(K_FIR_BFFR-1)
mac*FIR_DATA_P+0%,*FIR_COFF_P+0%,A
andm#0fffeh,ah
sthA,RDXR
rsbxXF
rete
transrsbxXF
rete
.end
7、FIR滤波器的检验
7.1检验过程
编译生成*.out文件,选择File->LoadPrograme装入*.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滤波器的冲激响应是有限长序列,其系统函数为一个多项式,它所含的的极点多为原点。
9、参考文献
【1】.程佩青,数字信号处理,清华大学出版社
【2】.邹彦.DSP原理及应用[M].北京:
电子工业出版社
【3】.王宏,MATLAB6.5在信号处理中的应用,清华大学出版社
【4】.戴明桢.TMS320C54xDSP结构、原理及应用[M].北京航空航天大学出版社
【5】.胡圣尧.DSP原理及应用[M].东南大学出版社,2008.7。
【6】.清源科技.TMS320C54xDSP应用程序设计教程[M].机械工业出版社
附录FIR低通滤波器程序
fs=8000;
fp=1000;fc=1200;As=100;Ap=1;
wp=2*pi*fp/fs;
ws=2*pi*fc/fs;
Bt=ws-wp;
N0=ceil(6.6*pi/Bt);%求滤波器长度
N=N0+mod(N0+1,2);
wc=(wp+ws)/2/pi;
hn=fir1(N-1,wc,hamming(N));
hd=fft(hn,1024);
w_ham=(hamming(N))';
stem(w_ham);
title('哈明w(n)');
(注:
本资料素材和资料部分来自网络,仅供参考。
请预览后才下载,期待您的好评与关注!
)