您好,欢迎访问三七文档
一、实验目的:1、熟悉MATLAB语言的基本用法;2、掌握MATLAB语言中音频数据与信息的读取与播放方法;3、掌握在MATLAB中设计滤波器的方法;4、掌握噪声产生的方法;5、掌握MATLAB语言中信号频谱的绘制方法。二、实验原理:选取一段.wav格式的音乐或歌曲,用matlab的wavread函数将选取的音频文件读出来,在读出的音频信号的左声道中利用awgn函数加入随机高斯噪声,再用函数fir1(N,wn)来设计低通滤波器,其中N表示滤波器的阶数,N越大滤波器性能越好,实际实现时越复杂;wn是滤波器的3dB截止频率。再将带有噪声的音乐信号通过低通滤波器滤除噪声,从而还原音乐,再用wavwrite函数形成滤波后的音频文件。三、实验步骤:程序代码Wave_test.mclearallclc[y,Fs,nbits]=wavread('test.wav');%读取音频文件size(y)FsnbitsL=size(y,1);t=size(y,1)/Fscloseall;figure;subplot(211);plot(1/Fs:1/Fs:t,y(:,1));%左声道时域波形图。xlabel('Time(s)');title('左声道');%***********NFFT=2^nextpow2(L);fft_y=fft(y(:,1),NFFT);%对左声道进行傅里叶变换F_shift=fftshift(fft_y);f=((-NFFT/2+1):(NFFT/2))/NFFT*Fs;%将横轴变为对应的频率轴subplot(212);plot(f,abs(F_shift));%画频谱图%**********************************************y(:,1)=awgn(y(:,1),1,'measured');%对左声道信号添加高斯噪声figure(2);subplot(211);plot(1/Fs:1/Fs:t,y(:,1));%添加噪声后左声道的时域图%*****subplot(212);fft_noise_y=fft(y(:,1),NFFT);%傅里叶变换noise_F_shift=fftshift(fft_noise_y);plot(f,abs(noise_F_shift));%添加噪声后的左声道频谱图wavwrite(y,Fs,'test_addnoise.wav');%生成加噪的音频文件%**********************************************************figure(3);rp=1;rs=100;%阻带最小衰减p=1-10.^(-rp/20);%通带波纹s=10.^(-rs/20);%阻带波纹wp=0.1;%通带截止频率ws=0.2;%阻带截止fpts=[wpws];mag=[10];dev=[ps];[n,wn,beta,ftype]=kaiserord(fpts,mag,dev);%计算出凯塞窗的n,beta值b=fir1(n,wn,kaiser(n+1,beta));%由fir1设计低通滤波器freqz(b,1)%得到频率响应figure(4);y(:,1)=filter(b,1,y(:,1));%用设计的滤波器对加噪的左声道信号滤波subplot(211);plot(1/Fs:1/Fs:t,y(:,1));%滤波后的时域图%******fft_y=fft(y(:,1),NFFT);F_shift=fftshift(fft_y);f=((-NFFT/2+1):(NFFT/2))/NFFT*Fs;subplot(212);plot(f,abs(F_shift));%滤波后的频谱图wavwrite(y,Fs,'test_passnoise.wav');%生成滤波后的音频文件四、结果与分析:1.实验结果:Figure1Figure2Figure3Figure42.实验分析(1)对音频声道的理解选取的音频是一个双声道音频,而通过MATLAB读取音频文件后实际上形成的是一个N行两列的数组,每一个列数组就是一个声道的信息数据。通过提取两个列数组就可以提取出不同声道,进而对单一声道信号加噪去噪以及滤波操作。(2)数字滤波数字滤波是常用的音频处理技术。在设置好通、阻带截止频率以及通、阻带波纹后,再用函数fir1(n,wn,kaiser(n+1,beta))来设计凯塞窗低通滤波器,至于函数的参数,本实验利用kaiserord函数求得。然后利用freqz(b,1)来画出滤波器的频响特性。最后利用filter函数实现滤波处理。五、实验总结(1)在实验过程中用到了以下函数:wavread、wavwrite、sound、size、fft、awgn、fftfilt、fir1等。然而在初次使用这些函数时不太了解如何使用,因此必须通过help来查询相关函数的解释,这对之后使用相关函数有很大的帮助。(2)在选择音频文件时,不能选取过大的音频。在实验出,由于选取音频文件过大,导致后面MATLAB运行时报出“内存不足”的错误。实验中在尝试多次后最终找到了问题,换成小一点的音频后,问题就得到解决。(3)在对语音信号处理过程中,发现MATLAB兼顾了专用工具软件的简单性和计算机程序语言的灵活性,特别是处理效果的可视性和可感知,有利于理解语音信号处理的本质,激发学习和研究兴趣,也有利于培养我们MATLAB软件的操作技能。
本文标题:音频信号去噪
链接地址:https://www.777doc.com/doc-4487430 .html