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