1、第一节 语音信号的噪声分析及滤除一般过程选择一个语音信号作为分析的对象,或录制一段格式为 *.wav 各人自己的语音信号,对其进行频谱分析;利用 MATLAB 中的随机函数产生噪声加入到语音信号中,模仿语音信号被污染,并对其进行频谱分析;设计数字滤波器, 并对被噪声污染的语音信号进行滤波, 分析滤波后信号的时域和频域特征,回放语音信号。其流程图如下所示:第 2 节 音频信号、噪声的分析一、音频信号分析音频信号的频率范围在 20Hz-20000Hz,是人耳可以听到的频率范围,超过这个范围的音频信号没有意义。语音的频率范围在 30-1000Hz 之间。二、噪声的产生噪声的来源一般有环境设备噪声和电
2、气噪声。环境噪声一般指在录音时外界环境中的声音,设备噪声指麦克风、声卡等硬件产生的噪声,电气噪声有直流电中包含的交流声,三极管和集成电路中的无规则电子运动产生的噪声,滤波不良产生的噪声等。这些噪声虽然音量不大(因为在设备设计中已经尽可能减少噪声),但参杂在我们的语音中却感到很不悦耳,尤其中在我们语音的间断时间中,噪声更为明显。第三节 A/D 转换A/D 转换可分为 4 个阶段:即采样、保持、量化和编码。 采样就是将一个时间上连续变化的信号转换成时间上离散的信号,根据奈奎斯特采样定理 fsZZfh,如果采样信号频率大于或等于 2 倍的最高频率成分,则可以从采样后的信号无失真地重建恢复原始信号。考
3、虑到模数转换器件的非线性失真、量化噪声及接收机噪声等因素的影响,采样频率一般取 253 倍的最高频率成分。 要把一个采样信号准确地数字化,就需要将采样所得的瞬时模拟信号保持一段时间,这就是保持过程。保持是将时间离散、数值连续的信号变成时间连续、数值离散信号,虽然逻辑上保持器是一个独立的单元,但是,实际上保持器总是与采样器做在一起,两者合称采样保持器。图给出了 A/D 采样电路的采样时序图,采样输出的信号在保持期间即可进行量化和编码。 量化是将时间连续、数值离散的信号转换成时间离散、幅度离散的信号;编码是将量化后的信号编码成二进制代码输出。到此,也就完成了 A/D 转换,这些过程通常是合并进行的
4、。例如,采样和保持就经常利用一个电路连续完成,量化和编码也是在保持过程中实现的。第四节 通用串行总线一、 USB 总线的分析USB 标准采用 NRZI 方式(翻转不归零制)对数据进行编码。翻转不归零制(non-return to zero,inverted) ,电平保持时传送逻辑 1,电平翻转时传送逻辑 0。USB 接头提供一组 5 伏特的电压,可作为相连接 USB 设备的电源。实际上,设备接收到的电源可能会低于 5V,只略高于 4V。USB 规范要求在任何情形下,电压均不能超过 5.25V;在最坏情形下(经由 USB 供电 HUB 所连接的 LOW POWER 设备)电压均不能低于 4.37
5、5V,一般情形电压会接近 5V。 二、PCI 总线PCI 是由 Intel 公司 1991 年推出的一种局部总线。从结构上看,PCI 是在CPU 和原来的系统总线之间插入的一级总线,具体由一个桥接电路实现对这一层的管理,并实现上下之间的接口以协调数据的传送。管理器提供了信号缓冲,使之能支持 10 种外设,并能在高时钟频率下保持高性能,它为显卡,声卡,网卡,MODEM 等设备提供了连接接口,它的工作频率为 33MHz/66MHz。第五节 语音信号杂音滤除的具体实现一、语音信号的采集利用 PC 机上的声卡和 WINDOWS 操作系统可以进行数字信号的采集。将话筒输入计算机的语音输入插口上,启动录音
6、机。按下录音按钮,接着对话筒说话“语音信号处理”,说完后停止录音,屏幕左侧将显示所录声音的长度。点击放音按钮,可以实现所录音的重现。以文件名“speech”保存入 X: MATLAB work 中。可以看到,文件存储器的后缀默认为*.wav ,这是 WINDOWS 操作系统规定的声音文件存的标准。二、语音信号的时频分析利用 MATLAB 中的“wavread”命令来读入(采集)语音信号,将它赋值给某一向量。再对其进行采样,记住采样频率和采样点数。其格式是:y=wavread(file)功能是读取 file 所规定的 wav 文件,返回采样值放在向量 y 中。接下来,对语音信号 OriSound
7、.wav 进行采样。其程序是y,fs,nbits=wavered (OriSound); 把语音信号加载入 Matlab 仿真软件平台中。然后,画出语音信号的时域波形,再对语音信号进行频谱分析。MATLAB提供了快速傅里叶变换算法 FFT 计算 DFT 的函数 fft,其调用格式是Xk=fft(xn,N)。参数 xn 为被变换的时域序列向量,N 是 DFT 变换区间长度,当N 大于 xn 的长度时,fft 函数自动在 xn 后面补零。 ,当 N 小于 xn 的长度时,fft 函数计算 xn 的前 N 个元素,忽略其后面的元素。在本次设计中,我们利用 fft 对语音信号进行快速傅里叶变换,就可以
8、得到信号的频谱特性。其程序如下:fs=22050; y,fs,nbits=wavread (OriSound.wav);sound(y,fs,nbits); %回放语音信号N= length (y) ; %求出语音信号的长度Y=fft(y,N); %傅里叶变换subplot(2,1,1);plot(y);title(原始信号波形);subplot(2,1,2);plot(abs(Y);title(原始信号频谱)程序结果如下图:图 1 原始信号波形及频谱三、语音信号加噪与频谱分析MATLAB 中产生高斯白噪声非常方便,有两个产生高斯白噪声的两个函数 。我们可以直接应用两个函数:一个是 WGN,另
9、一个是 AWGN。WGN 用于产生高斯白噪声,AWGN 则用于在某一信号中加入高斯白噪声。也可直接用 randn 函数产生高斯分布序列。在本次课程设计中,用 MATLAB 中的随机函数(rand 或 randn)产生噪声加入到语音信号中,模仿语音信号被污染,并对其频谱分析。Randn 函数有两种基本调用格式:Randn(n)和 Randn(m,n),前者产生 nn 服从标准高斯分布的随机数矩阵,后者产生 mn 的随机数矩阵。在这里,用 Randn(m,n)函数。语音信号添加噪声及其频谱分析的主要程序如下:y,fs,nbits=wavread (OriSound.wav);N = length
10、(y) ; %求出语音信号的长度Noise=0.01*randn(n,2); %随机函数产生噪声Si=y+Noise; %语音信号加入噪声 sound(Si);subplot(2,1,1);plot(Si);title(加噪语音信号的时域波形);S=fft(Si); %傅里叶变换subplot(2,1,2);plot(abs(S); title(加噪语音信号的频域波形);程序结果如下图:图 2 加噪后的波形及频谱分析第六节 数字滤波器设计滤波器设计方法有间接法和直接法,间接法是借助于模拟滤波器的设计方法进行的。其设计步骤是:先设计过渡模拟滤波器得到系统函数 H(s) ,然后将 H(s)按某种方
11、法转换成数字滤波器的系统函数 H(z)。间接法,常用的方法有窗函数法、频率采样等。具体设计步骤如下:(1)确定所需类型数字滤波器的技术指标。(2)将所需类型数字滤波器的边界频率转换成相应的模拟滤波器的边界频率,转换公式为 =2/T tan(0.5)(3)将相应类型的模拟滤波器技术指标转换成模拟低通滤波器技术指标。(4)设计模拟低通滤波器。(5)通过频率变换将模拟低通转换成相应类型的过渡模拟滤波器。(6)采用双线性变换法将相应类型的过渡模拟滤波器转换成所需类型的数字滤波器。脉冲响应不变法的主要缺点是会产生频谱混叠现象,使数字滤波器的频响偏离模拟滤波器的频响特性。原则是在保证阻带衰减满足要求的情况
12、下,尽量选择主瓣的窗函数。(1)构造希望逼近的频率响应函数。(2)计算 h(n)。(3)加窗得到设计结果。接下来,我们根据语音信号的特点给出有关滤波器的技术指标:低通滤波器的性能指标:fp=1000Hz,fc=1200Hz,As=100db ,Ap=1dB高通滤波器的性能指标:fp=3500Hz,fc=4000Hz,As=100dB,Ap=1dB;带通滤波器的性能指标:fp1=1200Hz,fp2=3000hZ,fc1=1000Hz,fc2=3200Hz,As=100dB,Ap=1dB数字滤波器的主要程序:1、低通滤波器:wp=2*pi*Fp/Ft;ws=2*pi*Fs/Ft;fp=2*Ft*
13、tan(wp/2);fs=2*Fs*tan(wp/2);n11,wn11=buttord(wp,ws,1,50,s); %求低通滤波器的阶数和截止频率b11,a11=butter(n11,wn11,s); %求 S 域的频率响应的参数 num11,den11=bilinear(b11,a11,0.5); %双线性变换实现 S 域到 Z 域的变换 h,w=freqz(num11,den11); %根据参数求出频率响应plot(w*8000*0.5/pi,abs(h);legend(用 butter 设计);图 3 低通滤波器2、带通wp1=tan(pi*Fp1/Ft); %带通到低通滤波器的转换
14、wp2=tan(pi*Fp2/Ft);ws1=tan(pi*Fs1/Ft);ws2=tan(pi*Fs2/Ft);w=wp1*wp2/ws2;bw=wp2-wp1;wp=1;ws=(wp1*wp2-w.2)/(bw*w);n12,wn12=buttord(wp,ws,1,50,s); %求低通滤波器阶数和截止频率b12,a12=butter(n12,wn12,s); %求 S 域的频率响应参数num2,den2=lp2bp(b12,a12,sqrt(wp1*wp2),bw);%将 S 域低通参数转为带通的num12,den12=bilinear(num2,den2,0.5);%双线性变换实现
15、S 域到 Z 域的转换h,w=freqz(num12,den12); %根据参数求出频率响应plot(w*8000*0.5/pi,abs(h);axis(0 4000 0 1.5);legend(用 butter 设计);图 4 带通滤波器第 7 节 用滤波器对加噪语音信号进行滤波一、滤波用自己设计的各滤波器分别对加噪的语音信号进行滤波,在 Matlab 中,FIR 滤波器利用函数 fftfilt 对信号进行滤波,IIR 滤波器利用函数 filter 对信号进行滤波。函数 fftfilt 用的是重叠相加法实现线性卷积的计算。调用格式为:y=fftfilter(h,x,M)。其中,h 是系统单位
16、冲击响应向量;x 是输入序列向量;y 是系统的输出序列向量;M 是有用户选择的输入序列的分段长度,缺省时,默认的输入向量的重长度 M=512。函数 filter 的调用格式:yn=filter(B,A.xn),它是按照直线型结构实现对 xn 的滤波。其中 xn 是输入信号向量,yn 输出信号向量。1、低通滤波器y,fs,nbits=wavread (speech.wav);n = length (y) ; %求出语音信号的长度noise=0.01*randn(n,2); %随机函数产生噪声s=y+noise; %语音信号加入噪声S=fft(s); %傅里叶变换z11=filter(num11,
17、den11,s);sound(z11);m11=fft(z11); %求滤波后的信号subplot(2,2,1);plot(abs(S),g);title(滤波前信号的频谱);grid;subplot(2,2,2);plot(abs(m11),r);title(滤波后信号的频谱);grid;subplot(2,2,3);plot(s);title(滤波前信号的波形);grid;subplot(2,2,4);plot(z11);title(滤波后的信号波形);图 5 性法低通滤波2、带通滤波器y,fs,nbits=wavread (speech.wav);n = length (y) ; %求出
18、语音信号的长度noise=0.01*randn(n,2); %随机函数产生噪声s=y+noise; %语音信号加入噪声S=fft(s); %傅里叶变换z12=filter(num12,den12,s);sound(z12);m12=fft(z12); %求滤波后的信号subplot(2,2,1);plot(abs(S),g);title(滤波前信号的频谱);subplot(2,2,2);plot(abs(m12),r);title(滤波后信号的频谱);subplot(2,2,3);plot(s);title(滤波前信号的波形);subplot(2,2,4);plot(z12);title(滤波
19、后的信号波形);图 6 带通滤波二、回放语音信号经过以上的加噪声处理后,可在 Matlab 中用函数 sound 对声音进行回放。其调用格式:sound(y,Fs),sound(y)和 sound(y,Fs,bits)。可以察觉滤波前后的声音有明显的变化。总结:语音信号的噪声分析及滤除一般包括以下步骤:语音信号的采样、保持、模拟量到数字量转化、通过 USB 设备或者 PCI 设备采集到电脑、时域/频域分析、设计滤波器、滤波,与原来语音信号进行比对,改进滤波器等步骤。本次课程设计的主要内容是滤波器设计,数字滤波器是滤波器设计的重要组成部分。利用 MATLAB 信号处理工具箱可以快速有效地设计各种
20、数字滤波器。课题基于 MATLAB 有噪音语音信号处理的设计与实现,综合运用数字信号处理的理论知识对加噪声语音信号进行时域、频域分析和滤波。通过理论推导得出相应结论,再利用 MATLAB 作为编程工具进行计算机实现。在设计实现的过程中,使用窗函数法来数字滤波器,并利用 MATLAB 作为辅助工具完成设计中的计算与图形的绘制。通过对所设计滤波器的仿真和频率特性分析,可知利用 MATLAB信号处理工具箱可以有效快捷地设计数字滤波器,过程简单方便,结果的各项性能指标均达到指定要求。在时域,频率估计是使用过零检测的方式计算出,从而对于带噪声的信号既容易造成“误判” ,也容易造成“漏判” ,且噪声信号越明显, “误判”与“漏判”的可能性越大。但在没有噪声或噪声很小时,时域分析对每个周期长度的检测是没有累积误差的,故随着样本容量的增大,估计的精度大大提高。在频域,频率估计是通过找出幅值谱峰值点对应的频率求出。故不会有时域分析的问题。但频率离散化的误差及栅栏效应却是不可避免地带来误差,仅频率离散化的误差就大于 Fs/2。由实验结果及以上的分析可以得出结论:在作频率估计时,如果信号的噪声很小,采用时域分析的方法较好;如果信号的噪声较大,采用频域分析的方法较好。