
音频信号分析及去噪.doc
12页西南科技大学课 程 设 计 报 告课程名称: 数字通信课程设计 设计名称: 音频信号的谱分析及去噪 姓 名: 学 号: 班 级: 通信0801 指导教师: 胥 磊 起止日期: 2011.6.21-2011.7.3 西南科技大学信息工程学院制课 程 设 计 任 务 书学生班级: 通信0801 学生姓名: 学号: 设计名称: 音频信号的谱分析及去噪 起止日期: 2011.6.21-2011.7.3 指导教师: 胥 磊 设计要求:基本要求:l 录制一段音频(如歌曲,说话声等),采用Matlab工具对此音频信号用FFT作谱分析。
l 录制一段加入噪声的音频(如在歌声中加入尖锐的口哨声或者其他噪声),采用Matlab工具对此音频信号用FFT作谱分析l 选择合适的指标,设计FIR数字滤波器,将音频中加入的噪声信号减弱或滤除扩展要求:l 将处理后的音频信号重新生成.wav文件,收听该音频,根据效果调整滤波器指标重新设计滤波器课 程 设 计 学 生 日 志时间设计内容6月28日查阅资料,明确题目内涵6月29日录制音频,编写程序6月30日检查程序,再次确认设计正确与否开始写报告 7月4日复习于答辩课 程 设 计 考 勤 表周星期一星期二星期三星期四星期五课 程 设 计 评 语 表指导教师评语: 成绩: 指导教师: 年 月 日 音频信号的谱分析及去噪一、 设计目的和意义1、录制音频,采用matlab工具对此信号做谱分析2、录制一段加噪的信号,对加噪信号进行谱分析。
3、选择合适的指标对加噪信号进行滤波4、学会使用wavread、wavwrite等函数二、 设计原理1、 对于录制的音频信号的读入可以使用函数wavread由于音频信号是连续的,故绘图应用plot函数使用函数fft可以得到音频信号的频谱图2、 由于音频信号是连续且长度未知,故可以采用巴特沃斯滤波器滤掉高频部分的噪音,剩下的就是原信号了3、 将去噪后的信号写成wav格式的文件可以使用wavwrite函数三、 详细设计步骤l 录制一段音频(如歌曲,说话声等),采用Matlab工具对此音频信号用FFT作谱分析1、 录制一段音频信号并命名为fl.wav存放在课程设计1的文件夹中2、 使用wavread函数读出此信号3、 用函数FFT进行傅里叶变换,得到频谱图4、 绘制时域图和频域图l 录制一段加入噪声的音频(如在歌声中加入尖锐的口哨声或者其他噪声),采用Matlab工具对此音频信号用FFT作谱分析1、 重新录制1中的音频文件,录制时加入噪声信号2、使用wavread函数读出此信号3、用函数FFT进行傅里叶变换,得到频谱图4、绘制时域图和频域图l 选择合适的指标,设计FIR数字滤波器,将音频中加入的噪声信号减弱或滤除。
扩展要求:1、 根据2得到的频谱图,选择合适的通带截止频率和阻带截止频率根据上述指标设计出合适的滤波器,将信号通过滤波器,得到去噪后的信号滤波函数可用fftfiltl 将处理后的音频信号重新生成.wav文件,收听该音频,根据效果调整滤波器指标重新设计滤波器1、 使用wavwrite函数将去噪后的函数重新生成wav格式的音频文件2、 播放音频文件,根据效果修改滤波器中的参数,直到得到与原信号几乎相同的音频文件设计程序见附件附程序:附件%得到无噪声的原始信号和有噪声的加噪信号 clc clear for n = 1 : 999% a(n) = sin(0.5906*n)+sin(1.0245*n)a(n)=sin(0.5906*n); %无噪声信号 b(n)=sin(1.0245*n); end; a=a/2; sound(a); b=conv(a,b/2); %加噪 sound(b); wavwrite(a,'a.wav'); %写文件 wavwrite(b,'b.wav');%没有噪声的音频信号FFT分析clc[y,fs,nbit]=wavread('a.wav'); %读信号sound(y);Y=fft(y); %傅里叶变换hg=abs(Y);figure(1);subplot(2,1,1);plot(hg); %绘图xlabel('k');ylabel('|X(k)|');title('无噪声谱分析');% axis([0 1000 0 400]);subplot(2,1,2);plot(y);xlabel('t');ylabel('y');title('原信号');%有噪声的音频信号做FFT分析clc[x,fs,nbit]=wavread('b.wav'); %读信号sound(x);X=fft(x); %傅里叶变换hg2=abs(X); %幅频响应figure(2);subplot(2,1,1);plot(hg2); %绘频域图xlabel('k');ylabel('|X(k)|');title('有噪声谱分析');subplot(2,1,2);plot(x); %绘时域图xlabel('t');ylabel('y');title('有噪信号'); %子函数用凯泽窗设计的低通滤波器function h=ditong(Rs,Wp,Wst) dert_w=Wst-Wp;N=ceil((10*pi/dert_w)+1);beta=0.5842*(Rs-21)^0.4+0.07886*(Rs-21);hd=ideal((Wst-Wp)/2,N); B=kaiser(N,beta); h=hd.*(B)'; %加窗后[H,m]=freqz(h,[1],1024,'whole'); %获取频率响应mag=abs(H); %幅值db=20*log10((mag+eps)/max(mag)); %分贝数pha=angle(H); %相位%绘图w=m/pi;figure(4);subplot(2,1,1);plot(w,mag);xlabel('w');ylabel('h');title('加窗后幅度响应');subplot(2,1,2);plot(w,db);xlabel('w');ylabel('db');title('分贝数');axis([0 1 -100 0]);;%滤波,还原信号clc[y,fs,nbit]=wavread('b.wav');Rs=70; %滤波器指标Wp=0.3*pi; Wst=0.6*pi;b=ditong(Rs,Wp,Wst);Y=fft(y,1024);x=fftfilt(b,y); %滤波X=fft(x,1024); %傅里叶变换sound(x);figure(3); %绘图subplot(2,1,1);plot(x);title('还原后的音频波形');xlabel('t');ylabel('x');subplot(2,1,2);plot(abs(X));title('滤波还原后信号的频谱');xlabel('k');ylabel('X(k)');wavwrite(x,'huanyuan.wav'); %写信号到文件huanyuan.wav[m,fs]=wavread('huanyuan.wav');sound(m);四、 设计结果及分析1、由于录制的音频信号加的噪声总是不理想,于是自己制作了两个音频文件a.wav和b.wav。
其中a.wav是没有噪声的,b.wav是加了其他频率的噪声的信号其频谱及时域信号如图1、图2所示图1 图22、设计滤波器.由于要求用FIR滤波器,故可以使用窗函数设计滤波器凯泽窗的衰减特性最好,故选择凯泽窗设计滤波器根据图2得到的频谱图可以确定滤波器的通带截止频率可以在0.3π附近,阻带截止频率可以在0.6附近滤波器的幅度响应如图3所示图33、将加噪后的信号通过滤波器,恢复原信号通过滤波器的函数是fftfilt通过滤波器后得到的频谱图及还原的信号见图4.图44、将还原后的信号生成wav文件用函数wavwrite().写到文件huanyuan.wav中,打开huanyuan.wav文件,音收听频信号正常与否,若不正常,更改滤波器指数,继续设计五、 体会这个设计相对较为简单,有很多类似的程序比较为难的是,录制音频信号总是不能理想难以在语音信号上在加上频率较高的信号,最后,我的解决办法是,自己制作语音信号,由于是自己制作,所以只有“滴”的一声这就是很大的缺陷另外,我认为在本次试验中最重要的就是滤波器的设计,而滤波器的设计关键在于要找到合适的截止频率,这是通过不断的试得出来的。
从本次设计也可以看出,再简单的一件事也需要耐心的都需要付出六、 参考文献[1] 程佩青.数字信号处理教程(第三版).清华大学出版社,2007.2[。
