语音信号的FIR滤波器处理课程设计.docx
《语音信号的FIR滤波器处理课程设计.docx》由会员分享,可在线阅读,更多相关《语音信号的FIR滤波器处理课程设计.docx(19页珍藏版)》请在冰豆网上搜索。
![语音信号的FIR滤波器处理课程设计.docx](https://file1.bdocx.com/fileroot1/2023-1/1/c6567984-f816-4490-9e30-1eeadba529bf/c6567984-f816-4490-9e30-1eeadba529bf1.gif)
语音信号的FIR滤波器处理课程设计
DSP课程设计报告
语音信号的FIR滤波器处理
姓名:
李宇李光炜蓝冠明
班级:
11电信4
学号:
指导老师:
徐梅宣孙道宗
日期:
2014.06.03~2014.06.13
华南农业大学工程学院
摘要
DSP(DigitalSignalProcessing)也就是我们常说的数字信号处理,它是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。
DSP芯片在信号处理、通信、雷达等许多领域得到广泛的应用。
Matlab是一款强大的软件,它将数值分析、矩阵计算、科学数据可视化等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案。
CSS集成开发环境使用CCS内置的软件仿真simulator对程序进行编译,调试和运行,主要用于检测目标程序运行的正确性和连贯性,并能通过仿真器与目标板连接,在目标板上实时观察效果。
在本次设计中,我们选择的课题是基于DSP的语言信号的FIR滤波处理。
首先利用MATLAB进行了仿真,得到滤波前后的时域波形和频谱。
然后通过调用MATLAB的分析工具FDATOOL,根据仿真结果导出了滤波器的相关参数,将原始信号数据和滤波器参数输入CCS进行DSP编程。
最后在DSP中实现了FIR低通滤波,并通过CCS的频谱分析功能查看了最终DSP的滤波效果。
关键词:
语音信号DSPFIR滤波MATLABCCS
1.前言4
2.设计原理4
2.1数字信号处理器4
2.2滤波器简介5
2.3fir滤波器原理6
2.4窗函数简介7
2.5滤波器的特点7
3.FIR滤波器的Matlab设计8
3.1总体方案的设计8
3.2语音信号的采集9
3.3MATLAP的具体处理9
3.4FIR滤波器的系统参数11
4.FIR滤波器的CCS设计与仿真11
4.1CCS程序流程图12
4.2CCS仿真结果15
5.问题及解决办法18
6.设计感想19
参考文献19
7.附录20
1前言
随着信息与数字技术的发展,数字信号处理已经成为当今极其重要而学科与技术领域之一。
它在通信、语音、图像、自动控制、雷达、军事、航空航天、医疗和家用电器等众多领域得到了广泛的应用。
在数字信号处理的基本方法中,通常会涉及到变换、滤波、频谱分析、调制解调和编码解码等处理。
其中滤波是应用非常广泛的一个环节,数字滤波器的理论和相关设计也一直都是人们研究的重点之一。
FIR滤波器的是非递归的,稳定性好,精度高;更重要的是,FIR滤波器在满足幅频响应要求的同时,可以获得严格的线性相位特征。
因此,它在高保真的信号处理,如数字音频、图像处理、数据传输和生物医学等领域得到广泛应用。
在数字信号处理中,滤波占有极其重要的地位。
数字滤波是语音信号处理、图像处理、模式识别、频谱分析等应用的基本处理算法。
用DSP芯片实现数字滤波除了具有稳定性好、精确度高、不受环境影响等优点外,还具有灵活性好等特点。
本文介绍了数字滤波器的设计基础及用窗函数法设计FIR滤波器的方法,运用MATHLAB语言实现了低通滤波器的设计并用CCS2.0进行观察效果。
2设计原理
2.1数字信号处理器
DSP(DigitalSignalProcessor)是一种独特的微处理器,是以数字信号来处理大量信息的器件。
其工作原理是接收模拟信号,转换为0或1的数字信号。
再对数字信号进行修改、删除、强化,并在其他系统芯片中把数字数据解译回模拟数据或实际环境格式。
它不仅具有可编程性,而且其实时运行速度可达每秒数以千万条复杂指令程序,远远超过通用微处理器,是数字化电子世界中日益重要的电脑芯片。
它的强大数据处理能力和高运行速度,是最值得称道的两大特色。
由Ti公司提供专业的开发工具CCS,自带DSP/BIOS操作系统,能够直接编写适合DSP开发工程及文件,满足DSP程序设计要求。
由MathWorks公司和TI公司联合开发的DSPMATLABLinkforCCSDevelopmentTools(简称CCSLink)是MATLAB6.5版本(Release13)中增加的一个全新的工具箱,它提供了MATLAB、CCS和DSP目标板的接口,利用此工具可以像操作MATLAB变量一样来操作DSP器件的存储器和寄存器,使开发人员在MATLAB环境下完成对DSP的操作,从而极大地提高DSP应用系统的开发进程。
本设计主要是使用DSP对语音噪声信号进行处理,使用CCS开发工具编写程序,同时利用MATLAB操作DSP器件的存储器和寄存器。
2.2滤波器简介
(FiniteImpulseResponse)滤波器:
有限长单位冲激响应滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。
因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。
冲激响应之所以是“有限的”是因为在滤波器中没有反馈出现;如果你输入一个冲激{就是一个“1”样本后出现许多“0”的样本的信号},那么零将在样本“1”通过了所有的延迟线的系数后出现。
滤波器,顾名思义,是对波进行过滤的器件。
“波”是一个非常广泛的物理概念,在电子技术领域,“波”被狭义地局限于特指描述各种物理量的取值随时间起伏变化的过程。
该过程通过各类传感器的作用,被转换为电压或电流的时间函数,称之为各种物理量的时间波形,或者称之为信号。
因为自变量时间‘是连续取值的,所以称之为连续时间信号,又习惯地称之为模拟信号(AnalogSignal)。
随着数字式电子计算机(一般简称计算机)技术的产生和飞速发展,为了便于计算机对信号进行处理,产生了在抽样定理指导下将连续时间信号变换成离散时间信号的完整的理论和方法。
也就是说,可以只用原模拟信号在一系列离散时间坐标点上的样本值表达原始信号而不丢失任何信息,波、波形、信号这些概念既然表达的是客观世界中各种物理量的变化,自然就是现代社会赖以生存的各种信息的载体。
信息需要传播,靠的就是波形信号的传递。
信号在它的产生、转换、传输的每一个环节都可能由于环境和干扰的存在而畸变,有时,甚至是在相当多的情况下,这种畸变还很严重,以致信号及其所携带的信息被深深地埋在噪声当中了。
滤波,本质上是从被噪声畸变和污染了的信号中提取原始信号所携带的信息的过程。
滤波器特性可以用其频率响应来描述,按其特性的不同,可以分为低通滤波器,高通滤波器,带通滤波器和带阻滤波器等。
2.3FIR滤波器原理
FIR滤波器(有限长单位冲激响应滤波器)是在数字信号处理(DSP)中经常使用的两种基本的滤波器之一,另一个为IIR滤波器。
IIR滤波器是无限冲激响应滤波器。
不论哪一种滤波器设计方法,都要求出滤波器的单位冲激响应h(n),然后才能在时域中实现频域中的滤波。
在频域,当其输入信号为X(ejω)时,如滤波器的频率响应为H(ejω),则其输出信号为Y(ejω)=X(ejω)H(ejω)。
在时域,设滤波器的单位冲激响应h(n)为一N点序列,即0≤n≤N-1时h(n)的值不为零,根据离散傅氏变换的性质,则可以将滤波器的输入序列x(n)的响应y(n)表示为x(n)与h(n)的卷积和,即:
这就是滤波系统的差分方程,它给滤波器的实现奠定了理论基础。
即求出时域的h(n)后,便可通过卷积来实现频域的滤波。
卷积和运算主要有以下几个步骤:
(1)h(n)序列N个点数值的存储
由于h(n)是根据滤波性能要求已经设计好的有限长单位冲激响应,故其N个点的数值是已知的,因此可以存放在ROM或RAM当中,且对应着N个不同的地址,便于寻址。
(2)输入序列x(n)的移位寄存
输入序列x(n)是不断变化的,因此只能对其进行移位寄存,寄存器的个数为N,即N个寄存器中分别存放着x(n)、x(n-1)……x(n-N+1),它们都随着n的变化而变化。
(3)乘法器
用以完成两个数值的乘法,即h(m)x(n-m),也就是将存储器中N地址所对应的N个固定数值h(m)分别与N个移位寄存器中的不断变化的N个变化数值x(n-m)相乘。
(4)累加器
用以实现N个乘积的累加,即将当前x(n)所对应的N个乘积进行累加,所得到的和就是y(n)。
当滤波器的下一个输入值即x(n+1)到来时,累加器清零,并重新将下一组x(n+1)所对应的N个乘积进行累加,所得到的和就是y(n+1)。
2.4窗函数简介
数字信号处理的主要数学工具是傅里叶变换。
而傅里叶变换是研究整个时间域和频率域的关系。
不过,当运用计算机实现工程测试信号处理时,不可能对无限长的信号进行测量和运算,而是取其有限的时间片段进行分析。
做法是从信号中截取一个时间片段,然后用观察的信号时间片段进行周期延拓处理,得到虚拟的无限长的信号,然后就可以对信号进行傅里叶变换、相关分析等数学处理。
无线长的信号被截断以后,其频谱发生了畸变,原来集中在f(0)处的能量被分散到两个较宽的频带中去了(这种现象称之为频谱能量泄漏)。
为了减少频谱能量泄漏,可采用不同的截取函数对信号进行截短,截断函数称为窗函数,简称为窗。
信号截短以后产生的能量泄漏现象是必然的,因为窗函数w(t)是一个频带无限的函数,所以即使原信号x(t)是有限带宽信号,而在截短以后也必然成为无限带宽的函数,即信号在频域的能量与分布被扩展了。
又从采样定理可知,无论采样频率多高,只要信号一经截短,就不可避免地引起混叠,因此信号截短必然导致一些误差。
泄漏与窗函数频谱的两侧旁瓣有关,如果两侧瓣的高度趋于零,而使能量相对集中在主瓣,就可以较为接近于真实的频谱,为此,在时间域中可采用不同的窗函数来截短信号。
2.5滤波器的特点
优点:
(1)很容易获得严格的线性相位,避免被处理的信号产生相位失真,这一特点在宽频带信号处理、阵列信号处理、数据传输等系统中非常重要;
(2)可以在幅度特性随意设计的同时,保证精确、严格的线性相位,还可得到多带幅频特性;
(3)极点全部在原点(永远稳定),无稳定性问题;
(4)任何一个非因果的有限长序列,总可以通过一定的延时,转变为因果序列,所以因果性总是满足;
(5)无反馈运算,运算误差小。
缺点:
(1)因为无极点,要获得好的过渡带特性,需以较高的阶数为代价;
(2)无法利用模拟滤波器的设计结果,一般无解析设计公式,要借助计算机辅助设计程序完成。
3FIR滤波器的Matlab设计
3.1.总体方案设计
本次课程设计所采用的主要软件为Matlab。
设计中用到的函数主要有wavread,sound,fft,subplot,plot,fir1,freqz,filter。
课程设计利用窗函数法设计FIR数字滤波器,并利用MATLAB作为辅助工具仿真滤波前后的时域波形和频谱。
对于DSP的处理,首先,通过Matlab给语音信号添加高频噪音,即将原始信号调制到某一高频上(本设计用10000hz),再将其与原始语音信号相叠加,最后将这个叠加后的信号转化为数据(matlab编程),并存入后缀为dat的文件中。
之后根据仿真结果使用MATLAB的设计分析工具FDATOOL产生滤波器参数。
将混叠后的信号数据和滤波器参数输入CCS进行DSP编程,在DSP中实现FIR带通滤波,并使用CCS的频谱分析功能,查看最终DSP的滤波效果。
3.2语音信号的采集
使用PC机上的声卡和WINDOWS操作系统可以进行数字信号的采集。
将话筒插入计算机的语音输入插口上,启动MOOo录音专家。
按下录音按钮,接着对话筒录音,录音结束后屏幕左侧将显示所录声音的长度。
点击放音按钮,可以实现所录音的重现。
如图3.1所示,以文件名“voice”保存入matlab当前工作路径中。
可以看到,文件存储器的后缀默认为.wav,这是WINDOWS操作系统规定的声音文件存的标准。
3.3matlab具体处理
3.3.1FIR滤波器的matlab实现
FIR参数设定及频域响应特性
根据上述要求在matlab中采用fir2函数设计低通FIR滤波器,其程序代码为:
f=[00.380.51];
m=[1100];
b=fir2(36,f,m);
在MATLAB中输入以上代码,求出滤波器系数如下具有两边对称,
h(0)=h(36)=-0.0010,h
(1)=h(35)=-0.0036,h
(2)=h(34)=0.0000
h(3)=h(33)=0.0065,h(4)=h(32)=0.0032,h(5)=h(31)=-0.0088
h(6)=h(30)=-0.0093,h(7)=h(29)=0.0090,h(8)=h(28)=0.0184
h(9)=h(27)=-0.0047,h(10)=h(26)=-0.0297,h(11)=h(25)=-0.0071
h(12)=h(24)=0.0417,h(13)=h(23)=0.0316,h(14)=h(22)=-0.0524
h(15)=h(21)=-0.0848,h(16)=h(20)=0.0598,h(17)=h(19)=0.3108
h(18)=0.4375
CCS的输入语音信号的辅助产生(MATLAB)
1、理想情况:
FIR滤波器的输入数据存储在indata.dat文件中,共300个点,由频率为1000Hz和2500Hz的两个余弦波叠加而成
2、为了验证设计的可行性,自身录制一个语音片段,主要信号为低频成分,其中夹杂着高频成分的噪声。
在MATLAB中产生一个indata.dat文件供CCS输入,在matlab中输入的代码为:
x=wavread('D:
\matlab\work\XINZAO.wav');%语音文件的路径
y=fft(x,1024);
plot(abs(y(1:
1000)));%采样100个点
x1=round(1024*x);
fid=fopen('indata.dat','w');%生成一个dat文件
fprintf(fid,'1651100E21000\n');
fprintf(fid,'%d\n',x1);%输出
3.4FIR滤波器的系统参数
在本设计中,使用MATLAB模拟产生合成信号,然后利用CCS进行滤波。
本次FIR滤波器设计的的参数选取指标如下:
采用37阶低通滤波器,汉明窗(HammingWindow)函数,通带截止频率为1500Hz,阻带截止频率为2000Hz,通带波纹为0.01,阻带波纹为0.1,采样频率为8000Hz。
在选项中选择或输入滤波器参数,然后点击”DesignFilter”按钮完成滤波器设计。
设计成功后的结果如图下图所示。
在fdatool中,选择Targets->CodeComposerStudio™IDE。
在出现的对话框中选择输出文件类型为C.headerfile,输出系数类型为signed16-bitinteger。
点击Generate按钮,选择路径,即可输出前一步设计出的FIR滤波器系数表。
4FIR滤波器的CCS设计与仿真
CCS是一种针对TMS320系列DSP的集成开发环境,在windows操作系统下,采用图形接口界面,提供环境配置、源文件编辑、程序调试、跟踪和分析等工具,提供了配置、建立、调试、跟踪和分析程序的工具,从而完成编辑、编译、链接、调试和数据分析等工作。
在CCS中编写汇编语言程序,进行调试,实现FIR滤波的功能。
本课程设计使用CCS开发应用程序的一般步骤为:
(1)创建一个工程项目文件fir2.h,用汇编语言编写处理主程序fir2.asm。
另外根据板上的存储器配置方式,编写存储器配置文件fir.cmd文件,将MATLAB生成的fir2.h和indata.dat文件拷贝到工程文件夹下。
(2)编辑各类文件。
使用CCS提供的集成编辑环境,对头文件、链接命令文件和源程序进行编辑。
(3)对工程项目进行编译,生成可执行文件。
如出现语法错误,将在构建窗口中显示错误信息。
用户可以根据显示信息定位错误信息,更改错误。
(4)下载程序、输入数据,执行程序,对结果和数据进行分析和算法评估。
利用CCS提供的探测点、图形显示等工具,对运行结果、输出数据进行分析,评估算法性能。
4.1CCS程序流程图
图15CCS汇编程序流程图
4.1.1程序分析
FIR滤波器的DSP实现主要有线性缓冲区法和循环缓冲区法两种。
线性缓冲区法又称延迟线法。
其特点:
(1)对于N级的FIR滤波器,在数据存储器中开辟一个N单元的缓冲区(滑窗),用来存放最新的N个输入样本;
(2)从最老样本开始取数,每取一个样本后,将此样本向下移位;
(3)读完最后一个样本后,输入最新样本存入缓冲区的顶部。
循环缓冲区法的特点如下:
(1)对于N级FIR滤波器,在数据存储器中开辟一个N单元的缓冲区(滑窗),用来存放最新的N个输入样本;
(2)从最新样本开始取数;
(3)读完最后一个样本(最老样本)后,输入最新样本来代替最老样本,而其他数据位置不变;
(4)用片内BK(循环缓冲区长度)寄存器对缓冲区进行间接寻址,使循环缓冲区地址首尾相邻。
本次设计的FIR滤波器所采用的就是循环缓冲区法。
对DSP进行初始化,并设置好存储单元。
为数字滤波作准备,将预先设计好的有N个抽头的FIR数字滤波器的冲激响应序列h(n)中的N个数值放入存储单元bn中,从indata数据存储段中读入抽样值,将抽样值逐一放入存储单元xn中。
主要循环程序如下:
STM#-1,AR0
RPTZA,#N;将ACC累加器清零,循环N次
MAC*AR2+0%,*AR3+0%,A
STHA,*(yn);保存输出
MVKD*(yn),*AR5+
将累加器清零,将存储单元bn与xn值对应相乘并累加到ACC中,循环N次将ACC中的值保存输出。
再从indata数据存储段中读入一个新的数据,代替原来的最老样本MVDD*AR4+,*AR2+0%,重复循环直到数据全部处理完。
最后将处理完的数据输入到outdata数据存储段中。
4.1.2数据输入
MATLAB辅助DSP实现FIR滤波器滤波,其总体过程是为DSP中编写处理程序提供滤波器系数。
在MATLAB中利用滤波器设计、分析工具(FDATOOL),根据指定的滤波器性能快速设计一个FIR,然后把滤波器系数以头文件形式导入CCS中,头文件中包含MATLAB辅助DSP实现FIR数字滤波器的阶数和系数数组,在MATLAB中调试、运行DSP程序并显示、分析处理后的数据。
打开CCSIDE中file的data加载初始化data数据,在Address中输入数据存放的起始地址indata,并设置数据栈长度。
4.1.3运行程序仿真
运行程序,查看输入输出波形,修改相应参数进行调试。
在View的Graph中单击Time/frequency出现graphpropertydialog框。
将显示类型,图形名称,起始地址,抽样点数,数据类型等分别进行设置,输出各种波形。
输出滤波前的信号时域波形。
首先,设置如下图所示,输出滤波前的信号时域波形。
图16滤波前语音信号的时域GraphPropertyDialog设置参数图
将DisplayType改为FFTMagnitude就可以看到滤波前信号的频谱,将StartAddress改为outdata就可以看到滤波后信号的时域波形和频谱。
4.2CCS仿真结果
图17滤波前语音信号的时域波形图
图18滤波前信号频谱波形图
4.2.2FIR滤波器滤波后的信号
图19滤波后信号时域波形图
图20滤波后信号频谱图
图17波前的信号,由高频信号和原信号叠加而成的波形较为杂乱,加噪后的信号幅值较大。
图19波后的信号,从图上可以看到信号幅度较低,波形较为清晰。
对比图18图20可以看到加躁后信号幅值较大,信号的能量集中在高频段,滤波后,高频成分大部分被滤去,信号的能量主要集中在低频段。
5问题及解决方法
1.为什么存入DAT文件的信号数据要乘上32768?
由于TMS32054X是16位定点处理器,在进行汇编程序设计时,FIR滤波器系数需要采用Q15格式,即必须将上述系数据转化位Q15定点式。
2.matlab编译错误出现如下错误?
Thecarrierfrequencymustbelessthanhalfthesamplingfrequency.故降低载波频率
3.在View的Graph中单击Time/frequency出现graphpropertydialog框,未修改抽样点数,显示的图形出现差异.
4、通过loaddata时,在配置地址和长度时,我们没有忘记按照自己设定的起始地址及长度,结果显示出来的图像与真实的有极大的偏差。
答:
把Address和Length的参数填写自己在生成dat文件是所设置的值一致,最后滤波输出波形正确。
5、为了实现语音及噪声的通过设计的滤波器进行验证,需要制作一个语音及噪声的.dat文件,以供CCS信号输入,对软件不熟练的我们不懂的怎么应用?
答:
通过到图书馆借相应的书来自学,学习MATLAB的生成.dat文件的相关命令语句,以及请教其他同学。
通过不断的讨论和研究,知道了要对信号进行采样,再通过fopen语句等,才能生成dat文件
6设计感想
通过本次课程设计,我们发现在课本上学到的知识实在是不能使我们有能力驾驭这个课程设计。
一开始决定做这个课题,我们就去查找了大量资料,通过查找资料我们都清楚了大概要做些什么。
首先要进行MATLAB仿真,并通过MATLAB设计的FIR滤波器输出滤波器系数。
接着便是通过CCS编程,并在DSP上运行。
我们觉得思路是很清晰的,但是实际操作起来却困难重重。
原始信号有了,我们也得了教训,便开始计划开来。
于是,翻书看完有关FIR滤波器的相关介绍,重点看了凯塞窗。
然后查资料找出与本次设计有关的MATLAB知识。
做完这些自然是开始设计,总体框架,具体步骤,都在脑袋瓜里转了几转。
动工,这时才深刻体会到“纸上学来终觉浅,用到实际才叫真!
”开始设计从噪声选取,到低通,高通,带阻,带通滤波器的设计,其中是错漏百出。
当然,作为老手自然不会再去犯什么程序设计上的低级错误,主要还是对滤波器的认知不够深刻。
有的只是照抄书本,最后是连自己都为自己所犯的错误惊愕不已。
其中许多错误差点让自己从头来过,一度让自己有放弃的打算。
最后还是坚持了下来,自己大叹不容易。
设计的时间过了,但它带来的影响我想是不灭的!
要有一个良好的就业前景。
拥有扎实的理论知识,认真细致的处事态度,随机应变的实际应用方法,不拘一格的思路都将使得自己能有好的未来。
参考文献
[1]邹彦,DSP原理及应用(修订版),北京:
电子工业出版社,2012.
[2]王宏.MATLAB6.5及其在信号处理中的应用.[M].北京:
清华大学出版社,2004
[3]高西全,丁玉美,阔永红.数字信号处理---原理、实现及应用.[M].北京:
电子工业出版社,2006
[4]胡广书编著,数字信号处理理论、算法与实现.北京:
清华大学