MATLAB去噪音处理要点
实施报告
题 目: 用MATLAB去除音频中的噪音
学 号: 12121021 姓 名: 任课教师: 联系方式:
2014年 2月 5 日
曲线的振荡衰减部分不会在以前出现。
我们注意到,佩利-维纳准则只是就幅度函数特性提出了系统可实现性的必要要求,而没有给出相位方面的要求。如果一个系统满足这个准则,对应于一个因果系统,此时我们把系统的冲激响应沿着时间轴向左平移到
以前,那么,
虽然系统的幅度特性满足了佩利-维纳准则,但是它显然是一个非因果系统。所以说,佩利-维纳准则只是系统物理可实现性的必要条件,当我们验证了幅度函数满足此条件以后,可以利用希尔伯特变换找到合适的相位函数,从而构成一个物理可实现的系统函数。
该准则讲述了幅度对其判断的影响,但相位实际也是影响它的条件之一,如果将一个因果系统,保持幅度不变的情况下,向左移。可见相位的改变让该系统变成了非因果系统,同样,物理上是不允许的。 5.7 调制与解调
调制与解调应用于广泛的通信系统当中,出现该技术的原因:在测控系统中,进入测控电路的除了传感器输出的测量信号外,还往往有各种
噪声。而传感器的输出信号一般又很微弱,将测量信号从含有噪声的信号中分离出来是测控电路的一项重要任务。为了便于区别信号与噪声,往往给测量信号赋予一定特征,这就是调制的主要功用
在信号调制中常以一个高频正弦信号作为载波信号。一个正弦信号有幅值、频率、相位三个参数,可以对这三个参数进行调制,分别称为调幅、调频和调相。也可以用脉冲信号作载波信号。可以对脉冲信号的不同特征参数作调制,最常用的是对脉冲的宽度进行调制,称为脉冲调宽。
信号的发送是需要满足一定的条件,才能远距离的传输,影响该因素的正是天线的尺寸于信号波长的关系,(大于等于波长的10分之1)可见,对于低频的信号,相同的传播速度,它的波长越大,所以调制可以将该信号的频率搬移到较高频率,从而波长减小,天线的尺寸也得到改善。 调制的原因如书上所述:假设一个复杂的语音信号用乘法器于cos(Ωt)相乘,由傅立叶变换性质,易得原信号的频谱左右进行了搬移。
那么该信号通过天线发射,就能被接收端收到,同理,需要进行对信号解调,否则无法真实的还原人的语音信号,只要再乘以cos(Ωt)即可。频谱又进行了左右搬移,再加个低通滤波器以及必要时的放大器,就能实现对高频的滤波和对原始信号的放大,从而达到了语音信号的传输。不过信号的传输并非只有语音,还有诸多其他信号。而且,调制并非只有上述这种方法,但不管哪种方法,其本质都是要进行对原信号频谱的搬移,这是调制的必要条件。
第二部分 案例或课题陈述及实现方案 【设计原因】
根据信号报告要求,我一开始想到的是编写一段代码,通过录音识别人的音色,将其保存。结合手机对话功能,对所问问题用保存好的音色进行回答。如:孩子到异地上学或打工前用手机保存自己的音色。孩子离开后,父母可以打开软件与手机对话,手机回答的音色为孩子的声音。
这个设计我觉得还算不错,但是所学的信号知识实在有限,最后决定设计“用Matlab去除音频中的噪音”的方案,这个比较简单,比较适合初学者。 【设计思路】
滤波器是一种用来消除干扰杂讯的器件,将输入或输出经过过滤而得到纯净的交流电。采用MATLAB设计滤波器,使原来非常繁琐复杂的程序设计变成了简单的函数调用,为滤波器的设和实现开辟了广阔的天地,尤其是Matlab工具箱使各个领域的研究人员可以直观方便地进行科学研究与工程应用。MATLAB 信号处理工具箱为滤波器设计及分析提供了非常优秀的辅助设计工具, 在设计数字滤波器时, 善于应用MATLAB进行辅助设计, 能够大大提高设计效率。
我们都知道,语音信号经过调制在大自然中传播,必然会夹杂着噪声一起传过来,那么我们该如何设计电路,从而达到对语音信号的提取,滤除噪音信号呢。根据资料显示,人类的发生频率范围在300hz-3400hz不等,因此,对于语音
信号的提取,我们可以用滤波器来实现。 为了更好的理解语音信号在时域和变换域处理前和处理后的变化情况,我首先用Audition 1.5得到.wav格式的音频。其次,由matlab自带的绘图工具画出相应的时域波形以及经过傅立叶变换后的频谱图。根据频谱图上人的语音信号的频率范围和噪声的频率范围,设计出低通滤波器,对含噪信号进行滤波处理,消除噪声,并通过指令sound()听处理结果的声音,确定是否消除或部分抑制了噪声。 【实验方案】 1、语音信号采集
得到一段语音文件,可以是原有的或是现场录制(为便于比较,需要在安静、干扰小的环境下录音),用audition软件将其改为.wav格式的音频。
2、语音信号分析
使用MATLAB绘出采样后的语音信号的时域波形和频谱图。
3、含噪语音信号合成
在MATLAB软件平台下,给原始的语音信号叠加上噪声,绘出叠加噪声后的语音信号时域和频谱图,与原始语音信号图形对比,分析含噪语音信号频谱和时域波形的改变。
4、数字滤波器设计及滤波,根据设计思路,结合matlab显示频谱图等设计合理的滤波器,并用滤波器对含噪语音信号分别进行滤波处理。 5、回放语音信号
对滤波后的语音信号进行回放,感觉滤波前后语音信号的变化。
第三部分 例或课题成果阐述
及代码
我上网查阅资料得知Matlab能识别.wav和.au格式的音频文件,所以在我先将mp3格式的文件用audition改成wav格式文件。这段音频的内容是诗朗诵,关于毛泽东《沁园春》中的“俱往矣,数风流人物,还看今朝。为方便教师验证代码,报告准备了两份代码,一份没有注释,
方便直接验证,另一份代码后有注释,便于理解代码编写思路。 【完整代码如下】
[x,fs,nbit]=wavread('jw.wav') sound(x,fs); N=length(x); t=(0:N-1)/fs; w=fs*linspace(0,1,N); y=abs(fft(x,N)); figure(1) subplot(2,1,1) plot(x);
title('原始语音信号时域图') subplot(2,1,2) plot(w,abs(y));
title('原始语音信号频谱图') t=linspace(0,(N-1)/fs,N); x1=0.5*sin(2*pi*10000*t);
x1=x(:,1)+x1'; sound(x1,fs); figure(2)
y1=abs(fft(x1,N)); subplot(2,1,1); plot(t,x1);
title('加入噪声后语音信号时域图') subplot(2,1,2); plot(w,y1);
axis([0,fs,0,20000]);
title('加入噪声后语音信号频谱图') fc=9200; fst=9600; rp=1; rs=30; wp=fc*2/fs; ws=fst*2/fs;
[n,wn]=buttord(wp,ws,rp,rs);
[b,a]=butter(n,wn,'low'); figure(3); freqz(b,a);
title('滤波器特性曲线'); x2=filter(b,a,x1); figure(4);
y2=abs(fft(x2,N)); subplot(211) plot(t,x2);
title('滤波后语音信号时域图'); subplot(212); plot(w,y2);
title('滤波后语音信号频谱图') sound(x2,fs);
【完整代码注释如下】
[x,fs,nbit]=wavread('jw.wav') //用于读
取jw.wav,采样值放在了向量x当中,fs表示采样频率,nbit表示采样位数
sound(x,fs); //播放原语音信号 N=length(x); //求出语音信号的长度 t=(0:N-1)/fs; // 语音信号的长度除以采样频率
w=fs*linspace(0,1,N); y=abs(fft(x,N));
figure(1) //设计第一个图 subplot(2,1,1) plot(x);
title('原始语音信号时域图') //画出原始信号时域图 subplot(2,1,2) plot(w,abs(y));
title('原始语音信号频谱图') // 画出原始信号频谱图
t=linspace(0,(N-1)/fs,N); x1=0.5*sin(2*pi*10000*t);
x1=x(:,1)+x1'; //加入人为的噪声,表现为滴鸣声
sound(x1,fs); //播放噪音和原始语音信号的混声
figure(2) //设计第二个图 y1=abs(fft(x1,N)); subplot(2,1,1); plot(t,x1);
title('加入噪声后语音信号时域图') subplot(2,1,2); plot(w,y1);
axis([0,fs,0,20000]);
title('加入噪声后语音信号频谱图') //画出加入噪音混声的时域图和频谱图
由两张图对比发现,加入噪音后,频谱图,在高频分量当中出现了明显的幅值,很明显这是人为加入噪声之后,频谱有明显的变化,接下来我们要滤除噪音。程序如下所示: fc=9200;
fst=9600; rp=1; rs=30;
wp=fc*2/fs; //将模拟指标转换为数字指标 ws=fst*2/fs;
[n,wn]=buttord(wp,ws,rp,rs); //滤波器的最小阶数为n,wn为系统频带 [b,a]=butter(n,wn,'low'); figure(3); freqz(b,a);
title('滤波器特性曲线');
x2=filter(b,a,x1); //x1信号通过了滤波器的处理后的信号x2 figure(4); y2=abs(fft(x2,N)); subplot(211) plot(t,x2);
title('滤波后语音信号时域图'); subplot(212); plot(w,y2);
title('滤波后语音信号频谱图') //画出滤波后信号的时域和频谱图
sound(x2,fs); //播放处理后的音频与源音频比较
经过播放对比,滤波后的声音的源文件的声音差不多,声音清晰可辨,说明设计方案是成功的。 【参考文献】
1. 陈怀琛 吴大正 MATLAB及在电子信息课程中的应用[M] 北京 电子工业出版社 2006. 章节2.4
2. 陈亚勇 MATLAB信号处理详解[M]
北京:人民邮电出版社 2000. 第十章 3. 郑君里 杨为理 信号与系统(第三版)上册[M] 高等教育出版社 章节5.5 5.7
4. 张康 刘雅 基于Matlab的巴特沃斯数字低通滤波器的设计[J] 计算机与现代化 2007年 12期 98-100页
因篇幅问题不能全部显示,请点此查看更多更全内容