1、 音频信号去噪 信号与系统 实验 报告 学院: 弘深学院 班级: 电子信息实验班 学号: 20136927 姓名 : 文政 指导老师: 欧 静兰 2015 年 5 月 3 日 弘深学院电子信息实验班 文政 20136927 1 | 10 音频信号去噪 目录 一、课题目的 2 二、课题要求 2 三、设计原理 2 1.高斯白噪声 2 2.工具软件使用 . 2 四、实验过程 3 1.读取音频信号,绘制时域波形 . 3 2.绘制原音频频域图像 . 3 3.制作叠加白噪声的音频 . 4 4.绘制含白噪声的音频图像 . 4 5.滤波器除噪声 . 4 6.绘制除白噪声的音频图像 . 4 7.除杂前后的时域与
2、频域对比 . 5 五、实验结果及分析 . 5 附录 8 (MATLAB 源程序代码 ) . 9 弘深学院电子信息实验班 文政 20136927 2 | 10 一、 课题目的 1、熟悉 MATLAB 语言的基本用法; 2、掌握 MATLAB 语言中音频数据与信息的读取与播放方法; 3、掌握在 MATLAB 中设计滤波器的方法; 4、掌握噪声产生的方法; 5、掌握 MATLAB 语言中信号频谱的绘制方法。 二、 课题要求 1、噪声加入后,听觉上歌曲声音明显变差; 2、采用低通滤波的方法滤除噪声后歌曲声音明显变清晰; 3、音乐格式选择 .wav; 4、绘制出原始音频信号一个声道的时域图和频谱图; 5
3、、绘制出加噪声后混合信号同一声道的时域图和频谱图; 6、绘制出滤波后音频信号同一声道的时域图和频谱图。 三、 设计原理 选取一段 .wav 格式的音乐或歌曲,用 matlab 将选取的音频文件读出来,在读出的音频信号中加入随机高斯噪声,再将带有噪声的音乐信号通过低通滤波器滤除噪声,还原音乐。 1.高斯白噪声 所谓 “ 高斯白噪声 ” 中的 “ 高斯 ” 是指概率分布是正态函数,而 “ 白噪声 ”是指它的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。 因此,高斯白噪声 的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布 。 2.工具软件使用 本文使用 MATLAB(使用版本 MAT
4、LAB R2014b) 软件对 音频信号加高斯白噪声后制作滤波器去噪 。 ( 1) 使 用 MATLAB 内置函数 audioread(rain.mp3)读取 rain.mp3文件,并将其放入矩阵 wave中,获得抽样频率 FS; ( 2) 使用 MATLAB内置函数 sound(wave,FS), 播放 wave矩阵所包含的音频信弘深学院电子信息实验班 文政 20136927 3 | 10 息 ; ( 3) 使用 MATLAB内置函数 audiowrite(rain_1.wav,wave,FS), 将 wave矩阵数据输出到文件 rain_1.wav; ( 4) 使用 MATLAB内置函数
5、floor(length(sound_1)/2), 对声道长度对半向下取整 ; ( 5)使用 MATLAB内置函数 a randn(size(sound_1), 产生白躁生函数,其均值为 0,方差为 a; ( 6)使用 MATLAB内置函数 fft(noise), 对 noise进行快速傅里叶变换; ( 7)使用 MATLAB内置函数 angle(noise), 对 noise进行角变换; ( 8)使用 MATLAB内置函数 fftshift(noise),对 noise进行中心对称; ( 9)使用 MATLAB内置函数 abs(noise),对 noise进行取模; 利用 plot函数进行图
6、像的绘制; 四、 实验过程 1.读取音频信号,绘制时域波形 程序如下: clear all wave, FS=audioread(rain.mp3);%读取音频文件, wave矩阵保存声道信息, FS保存抽样频率信息 sound_1=wave(:,1);%声道 1 sound_2=wave(:,2);%声道 2 t=0:(length(sound_1)-1);%取时域横轴 t plot(t,sound_1);xlabel(t_1);title(未处理 );%时域图 sound(wave,FS)%音频文件播放 audiowrite(rain_1.wav,wave,FS);%输出音频文件 2.绘制
7、 原音频频域图像 程序如下 : Fourier = fftshift(fft(sound_1,length(sound_1);%对信号进行快速Fourier变换 halflengthofsound1=length(sound_1); Pyy_1=log10(abs(Fourier)*2/halflengthofsound1; f=(-halflengthofsound1/2:halflengthofsound1/2-1)*1/halflengthofsound1; figure;plot(f,Pyy_1);xlabel(Frequency_1(Hz);title( 未 处 理弘深学院电子信息实
8、验班 文政 20136927 4 | 10 );%axis(0 3000 0 10) %频谱图 ,axis 输出 x, y轴显示 范围 3.制作叠加白噪声的音频 程序如下: a=0.05;%噪声幅度 noise=a*randn(size(sound_1);%产生白躁生函数,其均值为 0,方差为 0.05; sound_x=sound_1+noise;%将噪声叠加在原音频声道上; wave_noise(:,1)=sound_x; wave_noise(:,2)=sound_2;%组合两个声道,形成二维矩阵; figure;plot(t,sound_x,r);xlabel(t_noise);tit
9、le(加白噪声 );%时域图 sound(wave_noise,FS)%播放噪声音频文件; audiowrite(rain_noise.wav,wave_noise,FS);%输出音频文件 4.绘制含白噪声的音频图像 程序如下: Fourier1 = fftshift(fft(sound_x,length(sound_x);%对信号进行快速Fourier变换 halflengthofsoundx=length(sound_x); Pyy_x=log10(abs(Fourier1)*2/halflengthofsoundx; f_x=(-halflengthofsoundx/2:halfleng
10、thofsoundx/2-1)*1/halflengthofsoundx; figure;plot(f_x,Pyy_x,r);xlabel(Frequency_x(Hz);title(加白噪声 );%axis(0 3000 0 10) %频谱图 ,axis 输出 x, y轴显示范围 5.滤波器 除噪声 程序如下: N=5;wc=0.1; m,n=butter(N,wc); wave_noise_recover(:,1)=filter(m,n,sound_x); wave_noise_recover(:,2)=sound_2; figure;plot(t,wave_noise_recover(:
11、,1),g);xlabel(t_recover);title(去噪 );%时域图 sound(wave_noise_recover,FS) audiowrite(rain_noise_recover.wav,wave_noise_recover,FS);%输出音频文件 6.绘制除白噪声的音频图像 程序如下 : Fourier_recover = fftshift(fft(wave_noise_recover(:,1),length(wave_noise_recover(:,1);%对信号进行快速 Fourier变换 halflengthofsound_recover=length(wave_n
12、oise_recover); Pyy_recover=log10(abs(Fourier_recover)*2/halflengthofsound_recover; 弘深学院电子信息实验班 文政 20136927 5 | 10 f_recover=(-halflengthofsound_recover/2:halflengthofsound_recover/2-1)*1/halflengthofsound_recover; figure;plot(f_recover,Pyy_recover,g);xlabel(Frequency_recover(Hz);title(去噪 );%axis(0 3
13、000 0 10) %频谱图 ,axis 输出 x, y轴显示范围 7.除杂前后的时域与频域对比 代码如下 : compare_t(:,1)=abs(wave_noise_recover(:,1)-abs(wave_noise(:,1);%取处理声道信息,作差值后取绝对值,得到对比值 compare_t(:,2)=wave_noise(:,2);%未处理声道不做处理; figure;plot(t,compare_t(:,1),k);xlabel(t_compare);title(时域差值图 );axis(0 inf 0 1);%时域图差值图 compare_f(:,1)=abs(Pyy_rec
14、over-Pyy_x); figure;plot(f_recover,compare_f(:,1),k);xlabel(f_compare);title(频域差值图 );%axis(0 inf 0 inf);%频域图差值图 五、实验 结果 及 分析 运行代码脚本, 即可 得到了 所需 图像 : 图 1 原声时域波形图 图 2 原声频域波形 弘深学院电子信息实验班 文政 20136927 6 | 10 图 3 加白噪声时域波形 图 4 加白噪声频域波形 图 5 去噪时域波形 弘深学院电子信息实验班 文政 20136927 7 | 10 图 6 去噪频域波形 图 7 恢复前后时域差值图 图 8 恢
15、复前后频域差值图 弘深学院电子信息实验班 文政 20136927 8 | 10 加燥前的原音乐频谱是具有鲜明特性的波形,其频率主要集中在 0.3,0.3之间,而增加了白噪声之后,其 0.3,0.05 0.05,0.3之间的频谱被白噪声覆盖 ,时域图显示出个时间段的幅度都有所增加 。播放出来的声音很嘈杂。 由于白噪声的功率谱密度在整个频域内均匀分布,所有频率具有相同的能量密度。 从我们耳朵的频率响应听起来它是非常明亮的“咝”声 。 (每高一个八度,频率就升高一倍。因此高频率区的能量也显著增强 ) 白噪声: 功率谱密度恒定: () = 0 信号自相关: () = 0() 数学期望: () = 0
16、是宽平稳随机信号,且具有良好的各态历经性。 为了尽可能的消除这种噪声,还原原声,我们选用低通滤波器,来滤除掉高频噪声。从图中可以清楚的看到,高频部分的频谱经过滤波器滤波后,在频谱图上出现了明显的变化,仅仅保留了 0.3,0.3的部分 。在时域上,也可以很清楚的看到,波形有所恢复。由于无法消除原有音乐所在频率段增加的白噪声,因此, 无法完全恢复到原有状态,但是,音乐播放效果有明显的改善。 弘深学院电子信息实验班 文政 20136927 9 | 10 附录 (MATLAB 源程序代码 ) clear all wave, FS=audioread(rain.mp3);%读取音频文件, wave矩阵保
17、存声道信息, FS保存抽样频率信息 sound_1=wave(:,1);%声道 1 sound_2=wave(:,2);%声道 2 t=0:(length(sound_1)-1);%取时域横轴 t plot(t,sound_1);xlabel(t_1);title(未处理 );%时域图 sound(wave,FS)%音频文件播放 audiowrite(rain_1.wav,wave,FS);%输出音频文件 %绘制原音频图像 Fourier = fftshift(fft(sound_1,length(sound_1);%对信号进行快速 Fourier变换 halflengthofsound1=l
18、ength(sound_1); Pyy_1=log10(abs(Fourier)*2/halflengthofsound1; f=(-halflengthofsound1/2:halflengthofsound1/2-1)*1/halflengthofsound1; figure;plot(f,Pyy_1);xlabel(Frequency_1(Hz);title(未处理 );%axis(0 3000 0 10) %频谱图 ,axis 输出 x, y轴显示范围 %制作叠加白噪声的音频 a=0.05;%噪声幅度 noise=a*randn(size(sound_1);%产生白躁生函数,其均值为
19、0,方差为 0.05; sound_x=sound_1+noise;%将噪声叠加在原音频声道上; wave_noise(:,1)=sound_x; wave_noise(:,2)=sound_2;%组合两个声 道,形成二维矩阵; figure;plot(t,sound_x,r);xlabel(t_noise);title(加白噪声 );%时域图 sound(wave_noise,FS)%播放噪声音频文件; audiowrite(rain_noise.wav,wave_noise,FS);%输出音频文件 %绘制含白噪声的音频图像 Fourier1 = fftshift(fft(sound_x,l
20、ength(sound_x);%对信号进行快速 Fourier变换 halflengthofsoundx=length(sound_x); Pyy_x=log10(abs(Fourier1)*2/halflengthofsoundx; f_x=(-halflengthofsoundx/2:halflengthofsoundx/2-1)*1/halflengthofsoundx; figure;plot(f_x,Pyy_x,r);xlabel(Frequency_x(Hz);title(加白噪声 );%axis(0 3000 0 10) %频谱图 ,axis 输出 x, y轴显示范围 %除噪声
21、N=5;wc=0.1; m,n=butter(N,wc); wave_noise_recover(:,1)=filter(m,n,sound_x); wave_noise_recover(:,2)=sound_2; figure;plot(t,wave_noise_recover(:,1),g);xlabel(t_recover);title(去噪 );%时域图 sound(wave_noise_recover,FS) audiowrite(rain_noise_recover.wav,wave_noise_recover,FS);%输出音频文件 弘深学院电子信息实验班 文政 20136927
22、 10 | 10 %绘制除白噪声的音频图像 Fourier_recover = fftshift(fft(wave_noise_recover(:,1),length(wave_noise_recover(:,1);%对信号进行快速 Fourier变换 halflengthofsound_recover=length(wave_noise_recover); Pyy_recover=log10(abs(Fourier_recover)*2/halflengthofsound_recover; f_recover=(-halflengthofsound_recover/2:halflengtho
23、fsound_recover/2-1)*1/halflengthofsound_recover; figure;plot(f_recover,Pyy_recover,g);xlabel(Frequency_recover(Hz);title(去噪);%axis(0 3000 0 10) %频谱图 ,axis 输出 x, y轴显示范围 %除杂前后的时域与频域对比 compare_t(:,1)=abs(wave_noise_recover(:,1)-abs(wave_noise(:,1);%取处理声道信息,作差值后取绝对值,得到对比值 compare_t(:,2)=wave_noise(:,2);%未处理声道不做处理; figure;plot(t,compare_t(:,1),k);xlabel(t_compare);title(时域差值图 );axis(0 inf 0 1);%时 域图差值图 compare_f(:,1)=abs(Pyy_recover-Pyy_x); figure;plot(f_recover,compare_f(:,1),k);xlabel(f_compare);title(频域差值图);%axis(0 inf 0 inf);%频域图差值图