音频信号去噪(实验报告)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
音频信号去噪
——《信号与系统》实验报告
学院:弘深学院
班级:电子信息实验班
学号: 20136927
姓名:文政
指导老师:欧静兰
2015年5月3日
音频信号去噪
目录
一、课题目的 (2)
二、课题要求 (2)
三、设计原理 (2)
1.高斯白噪声 (2)
2.工具软件使用 (2)
四、实验过程 (3)
1.读取音频信号,绘制时域波形 (3)
2.绘制原音频频域图像 (3)
3.制作叠加白噪声的音频 (4)
4.绘制含白噪声的音频图像 (4)
5.滤波器除噪声 (4)
6.绘制除白噪声的音频图像 (4)
7.除杂前后的时域与频域对比 (5)
五、实验结果及分析 (5)
附录 (8)
(MATLAB 源程序代码) (9)
一、课题目的
1、熟悉MATLAB语言的基本用法;
2、掌握MATLAB语言中音频数据与信息的读取与播放方法;
3、掌握在MATLAB中设计滤波器的方法;
4、掌握噪声产生的方法;
5、掌握MATLAB语言中信号频谱的绘制方法。
二、课题要求
1、噪声加入后,听觉上歌曲声音明显变差;
2、采用低通滤波的方法滤除噪声后歌曲声音明显变清晰;
3、音乐格式选择 .wav;
4、绘制出原始音频信号一个声道的时域图和频谱图;
5、绘制出加噪声后混合信号同一声道的时域图和频谱图;
6、绘制出滤波后音频信号同一声道的时域图和频谱图。
三、设计原理
选取一段.wav格式的音乐或歌曲,用matlab将选取的音频文件读出来,在读出的音频信号中加入随机高斯噪声,再将带有噪声的音乐信号通过低通滤波器滤除噪声,还原音乐。
1.高斯白噪声
所谓“高斯白噪声”中的“高斯”是指概率分布是正态函数,而“白噪声”是指它的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。
因此,高斯白噪声的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布。
2.工具软件使用
本文使用MATLAB(使用版本MATLAB R2014b)软件对音频信号加高斯白噪声后制作滤波器去噪。
(1)使用MATLAB 内置函数audioread(′rain.mp3′)读取rain.mp3文件,并将其放入矩阵wave中,获得抽样频率FS;
(2)使用MATLAB内置函数sound(wave,FS),播放wave矩阵所包含的音频信
息;
(3)使用MATLAB内置函数audiowrite(′rain_1.wav′,wave,FS),将wave矩阵数据输出到文件rain_1.wav;
(4)使用MATLAB内置函数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函数进行图像的绘制;
四、实验过程
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.绘制原音频频域图像
程序如下:
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('未处理
');%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');title('加白噪声');%时域图
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: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轴显示范围
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(:,1),'g');xlabel('t_recover');titl e('去噪');%时域图
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_noise_recover);
Pyy_recover=log10(abs(Fourier_recover))*2/halflengthofsound_recover ;