语音信号的噪声分析及滤波的过程研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电网络理论
课程设计与报告
题目:语音信号的噪声分析及滤波的过程研究
一、语音信号的噪声分析及滤除一般过程
选择一个语音信号作为分析的对象,或录制一段格式为 *.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('加噪语音信号的频域波形');
程序结果如下图: