当前位置:首页 > 基于matlab的音频信号处理毕业设计(含源文件)
如图所示,展示的是一段语音信号的时域和频域波形
3.2 对采集信号进行加噪声处理。
MATLAB中产生高斯白噪声的两个函数
MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN。WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声。
在设计中使用的是直接产生高斯噪声的RANDN函数,实验采用的是MATLAB中的随机函数rand产生噪声加入到语音信号中,通过对噪声信号的加入以此来实现模仿语音信号被污染,并对添加噪声后的文件进行频谱分析。
matlab函数randn:产生正态分布的随机数或矩阵的函数 randn
产生均值为0,方差 σ^2 = 1,标准差σ = 1的正态分布的随机数或矩阵的函数。 用法:
Y = randn(n)
返回一个n*n的随机项的矩阵。如果n不是个数量,将返回错误信息。 Y = randn(m,n) 或 Y = randn([m n])
12
返回一个m*n的随机项矩阵。
Y = randn(m,n,p,...) 或 Y = randn([m n p...]) 产生随机数组。 Y = randn(size(A))
返回一个和A有同样维数大小的随机数组。
在本次实验过程中,我们选用Randn(m,n)函数。对语音信号添加噪声及其频谱分析的主要程序如下:
clear all;
music=input('输入文件名:','s')
[y,fs,nbits]=wavread(music);%语音信号的采集 n = length (y)
Noise=0.3*randn(n,2); %编辑噪声 s=y+Noise; Y=fft(y,n); sound(s); S=fft(s); figure;
subplot(2,2,1); plot(y,'r');
title('时域波形图','fontweight','bold'); grid;
subplot(2,2,2);
plot(abs(Y),'r');
title('频域波形图','fontweight','blod'); subplot(2,2,3); plot(s);
title('加噪时域波形图','fontweight','bold'); grid; subplot(2,2,4); plot(abs(S));
title('加噪频域波形图','fontweight','bold'); grid; ;
程序运行结果如下:
13
加噪后信号波形图
由图可见:在添加噪声后原本平滑的信号产生了大量不规则震动。在实际应用中这些噪声能够对原本的信号造成干扰,影响信号的正常读取,这时便需要采用滤波器对呗噪声污染的信号进行滤波,如此才能够正常读取相应的音频文件。
3.3 扩展内容:量标准化
录制声音过程中需对声音电平进行量化处理,最理想的量化是最大电平对应最高量化比特,但实际却很难做到,常有轻音问题。利用MATLAB很容易实现音量标准化,即最大电平对应最高量化比特。基本步骤是:先用wavread函数将.wav文件转换成列数组变量;再求出数组变量的极值并对所有元素作归一化处理;最后用wavwrite函数还原成音量标准化的.wav文件。
运行程序如下:
14
clear all;
music=input('输入文件名:','s')
[y,fs,nbits]=wavread(music);%语音信号的采集 ym=max(max(max(y)),max(abs(min(y)))); x=y/ym;
figure; subplot(2,1,1); plot(y,’r’);
title('原图','fontweight','blod');
grid; %网格 subplot(2,1,2);
plot(x,’b’); title('改图','fontweight','blod'); grid; sound(x)
wavwrite(x,fs,bits,'2.wav');
程序内容为:对原语音信号处理保存后播放并画出时域波形图,有音量增大的效果。但于实际测试播放时声音会有一定程度的失真。
程序运行结果:
如图,运行后相较于原波形图有了一定程度的幅度提高。
15
共分享92篇相关文档