西南科技大学课程设计报告课程名称:数字通信课程设计设计名称:音频信号的谱分析及去噪姓名:学号:班级:通信0801指导教师:胥磊起止日期:2011.6.21-2011.7.3西南科技大学信息工程学院制课程设计任务书学生班级:通信0801 学生姓名:学号:设计名称:音频信号的谱分析及去噪起止日期:2011.6.21-2011.7.3指导教师:胥磊设计要求:基本要求:●录制一段音频(如歌曲,说话声等),采用Matlab工具对此音频信号用FFT作谱分析。
●录制一段加入噪声的音频(如在歌声中加入尖锐的口哨声或者其他噪声),采用Matlab工具对此音频信号用FFT作谱分析。
●选择合适的指标,设计FIR数字滤波器,将音频中加入的噪声信号减弱或滤除。
扩展要求:●将处理后的音频信号重新生成.wav文件,收听该音频,根据效果调整滤波器指标重新设计滤波器。
课程设计学生日志时间设计内容6月28日查阅资料,明确题目内涵6月29日录制音频,编写程序6月30日检查程序,再次确认设计正确与否。
开始写报告7月4日复习于答辩课程设计考勤表周星期一星期二星期三星期四星期五课程设计评语表指导教师评语:成绩:指导教师:年月日音频信号的谱分析及去噪一、设计目的和意义1、录制音频,采用matlab工具对此信号做谱分析。
2、录制一段加噪的信号,对加噪信号进行谱分析。
3、选择合适的指标对加噪信号进行滤波。
4、学会使用wavread、wavwrite等函数。
二、设计原理1、对于录制的音频信号的读入可以使用函数wavread。
由于音频信号是连续的,故绘图应用plot函数。
使用函数fft可以得到音频信号的频谱图。
2、由于音频信号是连续且长度未知,故可以采用巴特沃斯滤波器。
滤掉高频部分的噪音,剩下的就是原信号了。
3、将去噪后的信号写成wav格式的文件可以使用wavwrite函数。
三、详细设计步骤●录制一段音频(如歌曲,说话声等),采用Matlab工具对此音频信号用FFT作谱分析。
1、录制一段音频信号并命名为fl.wav存放在课程设计1的文件夹中。
2、使用wavread函数读出此信号。
3、用函数FFT进行傅里叶变换,得到频谱图。
4、绘制时域图和频域图。
●录制一段加入噪声的音频(如在歌声中加入尖锐的口哨声或者其他噪声),采用Matlab工具对此音频信号用FFT作谱分析。
1、重新录制1中的音频文件,录制时加入噪声信号。
2、使用wavread函数读出此信号。
3、用函数FFT进行傅里叶变换,得到频谱图。
4、绘制时域图和频域图。
●选择合适的指标,设计FIR数字滤波器,将音频中加入的噪声信号减弱或滤除。
扩展要求:1、根据2得到的频谱图,选择合适的通带截止频率和阻带截止频率。
根据上述指标设计出合适的滤波器,将信号通过滤波器,得到去噪后的信号。
滤波函数可用fftfilt。
●将处理后的音频信号重新生成.wav文件,收听该音频,根据效果调整滤波器指标重新设计滤波器。
1、使用wavwrite函数将去噪后的函数重新生成wav格式的音频文件。
2、播放音频文件,根据效果修改滤波器中的参数,直到得到与原信号几乎相同的音频文件。
设计程序见附件。
附程序:附件%得到无噪声的原始信号和有噪声的加噪信号clcclearfor 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;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('滤波还原后信号的频谱');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所示。
01002003004005006007008009001000100200300k |X (k )|无噪声谱分析01002003004005006007008009001000-0.50.5ty原信号图10200400600800100012001400160018002000100200300k|X (k )|有噪声谱分析200400600800100012001400160018002000-1-0.500.51ty有噪信号图22、设计滤波器.。
由于要求用FIR 滤波器,故可以使用窗函数设计滤波器。
凯泽窗的衰减特性最好,故选择凯泽窗设计滤波器。
根据图2得到的频谱图可以确定滤波器的通带截止频率可以在0.3π附近,阻带截止频率可以在0.6附近。
滤波器的幅度响应如图3所示。
0.20.40.60.81 1.2 1.4 1.6 1.8200.511.5w h加窗后幅度响应00.10.20.30.40.50.60.70.80.91-100-50wd b分贝数图33、将加噪后的信号通过滤波器,恢复原信号。
通过滤波器的函数是fftfilt 。
通过滤波器后得到的频谱图及还原的信号见图4.200400600800100012001400160018002000-0.2-0.100.10.2还原后的音频波形tx 020040060080010001200010203040滤波还原后信号的频谱kX (k )图44、将还原后的信号生成wav 文件。
用函数wavwrite().写到文件huanyuan.wav 中,打开huanyuan.wav 文件,音收听频信号正常与否,若不正常,更改滤波器指数,继续设计。
五、 体会这个设计相对较为简单,有很多类似的程序。
比较为难的是,录制音频信号总是不能理想。
难以在语音信号上在加上频率较高的信号,最后,我的解决办法是,自己制作语音信号,由于是自己制作,所以只有“滴”的一声。
这就是很大的缺陷。
另外,我认为在本次试验中最重要的就是滤波器的设计,而滤波器的设计关键在于要找到合适的截止频率,这是通过不断的试得出来的。
从本次设计也可以看出,再简单的一件事也需要耐心的。
都需要付出。
六、 参考文献[1] 程佩青.数字信号处理教程(第三版).清华大学出版社,2007.2[2] 张威.MATLAB 基础与编程入门.西安电子科技大学出版社(第二版),2009.2 [3] 曹志刚、钱亚生.现代通信原理.清华大学出版社.2007。