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