您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 基于matlab的声音信号处理
基于MATLAB的有噪声的语音信号处理一、课程设计题目:基于MATLAB的有噪声的语音信号处理。二、课程设计的目的:综合运用数字信号处理的理论知识进行频谱分析和滤波器设计,通过理论推导得出相应的结论,再利用MATLAB做为编程工具进行计算机实现,从而加深对所学知识的理解,建立概念。三、课程设计的要求:(1)熟悉离散信号和系统的时域特性。(2)掌握序列快速傅里叶变换FFT方法。(3)学会MATLAB的使用,掌握MATLAB的程序设计方法。(4)利用MATLAB对语音信号进行频谱分析。(5)掌握MATLAB设计各种数字滤波器的方法和对信号进行滤波的方法。四、课程设计的内容:录制一段语音信号,对语音信号进行频谱分析,利用MATLAB中的随机函数产生噪声加入到语音信号中,使语音信号被污染,然后进行频谱分析,设计FIR数字滤波器,并对噪声污染的语音信号进行滤波,分析滤波后的信号的时域和频域特征,回放语音信号。五、课程设计的步骤:(1)语音信号的采集及分析通过录音软件录制一段语音“数字信号处理”,命名为“120”,时长大约1到2秒,在Matlab软件平台下可以利用函数wavread对语音信号进行采样:[y,fs,nbits]=wavread('120');%语音信号的采集采样值放在向量y中,采样频率为fs,采样位数为nbits。(2)语音信号的频谱分析画出语音信号的时域波形,然后对语音信号进行频谱分析,在MATLAB中,通过使用fft函数对信号进行快速傅里叶变换,得到信号的频谱特性。因此采集语音并绘出波形和频谱的模块程序如下:[y,fs,nbits]=wavread('120.wav');n=length(y);%求出声音长度t=0:1/fs:(n-1)/fs;%时间t从0到n-1sound(y,fs);%对加载的语音信号进行回放subplot(2,1,1);plot(y);%做原始语音信号的时域图形title('原始语音信号时域波形');grid;%傅里叶变换y1=fft(y,n);%做原始语音信号的傅里叶变换%对原始信号频域分析%y2=fftshift(y1);subplot(2,1,2);plot(abs(y1));%原始信号的频谱图像title('原始信号的频谱图像');grid;结果如下:可以看到,语音信号的频率集中在低频部分。(3)给原始信号加上一个随机噪声在MATLAB中,通过使用randn函数产生随机噪声信号在,把语音信号与噪声信号进行叠加,并对其进行播放,然后对加入噪声后的语音信号进行频谱分析,在MATLAB中可以利用函数FFT对信号进行快速傅里叶变换。产生随机噪声:Noise=0.05*randn(n,2);其中用0.05倍乘噪声用来适当削减噪声的作用,便于对语音信号进行处理并比较效果。将原语音信号与noise叠加,调用的形式为:s=y+noise;其中,y为原语音信号,noise为所构造的随机高斯噪声,s即为两者的叠加后的语音信号。(4)噪声频谱分析产生噪声并绘出波形和频谱的模块程序如下:noise=0.05*randn(n,2);subplot(2,1,1);plot(noise);%噪声信号title('噪声信号');grid;%噪声信号傅里叶变换sound(noise,fs);%对噪声信号进行回放noifft=fft(noise);%对噪声信号频域分析noifftsh=fftshift(noifft);subplot(2,1,2);plot(abs(noifftsh));%做噪声信号频谱分析title('噪声信号频域分析');axis([0,30000,0,200]);grid;结果如下:可以看到,随机噪声均匀的分布在整个频谱范围内。(5)污染信号频谱分析对被污染的加噪信号进行时域和频域分析。加噪声并分析信号波形频谱的模块程序及说明如下:n2=length(noise);s=noise+y;%噪声叠加sound(s,fs);subplot(2,1,1);plot(s);title('叠加信号');grid;%加入噪声的信号频谱分析wavbofft=fft(s,n);%混合信号频谱分析wavbofftshift=(wavbofft);subplot(2,1,2);plot(abs(wavbofftshift));%混合信号的频谱分析title('混合信号频谱分析');axis([0,30000,0,400]);grid;结果如下:随机噪声均匀的分布在整个频谱范围内。(6)设计一个滤波器,滤除高频噪声在MATLAB中,可以利用函数butterworth,设计FIR滤波器,用设计好的滤波器对含噪语音信号进行滤波,在Matlab中,FIR滤波器利用函数filter对信号进行滤波。模块程序及说明如下:%巴特沃思滤波器---低通滤波器Fp=1200;Fs=20000;wp=Fp/fs;ws=Fs/fs;[n11,wn11]=buttord(wp,ws,1,50,'s');%低通滤波器的阶数和截止频率[b11,a11]=butter(n11,wn11,'s');%S域频率响应的参数[num11,den11]=bilinear(b11,a11,0.5);%利用双线性变换实现频率响应S域到Z域的变换wav1=filter(num11,den11,s);%得到滤波后的信号sound(wav1,fs,nbits);%回放原信号%显示滤波后的信号时域图形subplot(3,1,1);plot(wav1);%显示滤波后的信号时域图形title('滤波后的信号频谱分析');grid;subplot(3,1,2);plot(abs(y1));%原始信号的频谱图像title('原始信号的频谱图像');grid;%对滤波后的信号傅里叶变换wav1fft=fft(wav1);%对滤波后的信号进行频谱分析wav1fftsh=fftshift(wav1fft);subplot(3,1,3);%plot(abs(wav1fftsh));plot(abs(wav1fft));%显示波后的信号进行频谱title('滤波后信号的频谱分析');可以看出,滤波后将非低频部分的噪声频率滤掉。六、课程设计总结:在这次课程设计中,我设计制作了加噪语音信号滤波提取的系统,综合运用了之前几次实验,尤其是滤波器设计方面的MATLAB知识,并最后得到了比较理想的效果。通过这次课程设计,我加深了对滤波器方面知识的理解。用自己设计的各种滤波器对污染信号进行处理,也让我更加清楚的理解了滤波器的滤波特性,比较并找到最合适的滤波器。
本文标题:基于matlab的声音信号处理
链接地址:https://www.777doc.com/doc-5544529 .html