当前位置:文档之家› 数字信号处理期末实验-语音信号分析与处理-(2)

数字信号处理期末实验-语音信号分析与处理-(2)

数字信号处理期末实验-语音信号分析与处理-(2)语音信号分析与处理摘要用MATLAB对语音信号进行分析与处理,采集语音信号后,在MATLAB软件平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。

数字滤波器是数字信号处理的基础,用来对信号进行过滤、检测和参数估计等处理。

IIR数字滤波器最大的优点是给定一组指标时,它的阶数要比相同组的FIR滤波器的低的多。

信号处理中和频谱分析最为密切的理论基础是傅立叶变换(FT)。

离散傅立叶变换(DFT)和数字滤波是数字信号处理的最基本内容。

关键词:MATLAB;语音信号;加入噪声;滤波器;滤波设计目的与要求(1)待处理的语音信号是一个在20Hz~20kHz频段的低频信号。

(2)要求MATLAB对语音信号进行分析和处理,采集语音信号后,在MATLAB平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器进行滤除噪声,恢复原信号。

设计步骤(1)选择一个语音信号或者自己录制一段语音文件作为分析对象;(2)对语音信号进行采样,并对语音信号进行FFT频谱分析,画出信号的时域波形图和频谱图;(3)利用MATLAB自带的随机函数产生噪声加入到语音信号中,对语音信号进行回放,对其进行FFT频谱分析;(4)设计合适滤波器,对带有噪声的语音信号进行滤波,画出滤波前后的时域波形图和频谱图,比较加噪前后的语音信号,分析发生的变化;(5)对语音信号进行回放,感觉声音变化。

设计原理及内容理论依据(1)采样频率:采样频率(也称采样速度或者采样率)定义了每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。

采样频率只能用于周期性采样的采样器,对于非周期采样的采样器没有规则限制。

通俗的讲,采样频率是指计算机每秒钟采集多少个声音样本,是描述声音文件的音质、音调,衡量声卡、声音文件的质量标准。

采样频率越高,即采样的间隔时间越短,则在单位之间内计算机得到的声音样本数据就越多,对声音波形的表示也越精确。

(2)采样位数:即采样值或取样值,用来衡量声音波动变化的参数。

(3)采样定理:在进行模拟/数字信号的的转换过程中,当采样频率f s.max大于信号中,最高频率f max的2倍时,即:f s.max>=2f max,则采样之后的数字信号完整的保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的5~10倍;采样频率又称乃奎斯特定理。

(4)时域信号的FFT分析:信号的频谱分析就是计算信号的傅立叶变换。

连续信号与系统的傅立叶分析显然不便于直接用计算机进行计算,使其应用受到限制。

而FFT是一种时域和频域均离散化的变换,适合数值计算,成为用计算机分其中W N= ,N为DFT变换空间长度。

信号采集从网上下载一段wav格式的文件,把文件“000.wav”保存在MATLAB文件夹下的work文件夹中,以.wav格式保存,这是windows操作系统规定的声音文件保存的标准。

[x1,fs]=audioread('000.wav');%把语音信号进行加载入MATLAB仿真软件平台中,采样值放在向量x1中,fs表示采样频率(Hz)x=x1(1:5000,1);%对双声道信号取单声道并取其5000点X=fft(x,4096);%对信号做4096点FFT变换调用参数x为被变换的时域序列向量,变换区间长度为4096,当x小于4096时,fft函数自动在x后面补零。

函数返回x的4096点DFT变换结果X。

当x大于4096时,fft函数计算x前面4096个元素构成的长序列的4096点DFT,忽略x后面的元素。

进行图形分区,首先画出语音信号的时域波形,然后对其进行频谱分析。

在MATLAB中利用fft对信号进行快速傅立叶变换,得到信号的频谱特性。

magX=abs(X);%把傅里叶变换后的复数值取模subplot(2,1,1);%图形分区plot(x);title('原始信号波形');%绘制波形f=(0:2047)*fs/2/2048;%单位转换subplot(2,1,2);plot(f,magX(1:2048));title('原始信号频谱');其程序如下:[x1,fs]=audioread('000.wav'); %读取语音信号x=x1(1:5000,1);%对双声道信号取单声道并取其5000点X=fft(x,4096);%对信号做4096点FFT变换magX=abs(X);%把傅里叶变换后的复数值取模subplot(2,1,1);%图形分区plot(x);title('原始信号波形');%绘制波形f=(0:2047)*fs/2/2048;%单位转换subplot(2,1,2);plot(f,magX(1:2048));title('原始信号频谱');sound(x1,fs)程序结果如下图:加噪语音信号并对其FFT频谱分析其程序如下:[x,fs]=audioread('000.wav');n=length(x);x_p=fft(x,n);f=fs*(0:n/2-1)/n;figure(1)subplot(2,1,1);plot(x);title('原始语音信号采样后的时域波形');xlabel('时间轴')ylabel('幅值A')subplot(2,1,2);plot(f,abs(x_p(1:n/2)));title('原始语音信号采样后的频谱图');xlabel('频率Hz');ylabel('频率幅值');L=length(x);noise=(cos(6000/fs*pi*n)+cos(10000/fs*pi*n)+cos(15000/fs*pi*n))*0.5; x_z=x+noise';sound(x_z,fs)n=length(x);x_zp=fft(x_z,n);f=fs*(0:n/2-1)/n;figure(2)subplot(2,1,1);plot(x_z);title('加噪语音信号时域波形');xlabel('时间轴')ylabel('幅值A')subplot(2,1,2);plot(f,abs(x_zp(1:n/2)));title('加噪语音信号频谱图');xlabel('频率Hz');ylabel('频率幅值');sound(x_z,fs)程序结果如下图:加入噪声后得到的信号和原始的语音信号有明显的不同。

数字滤波器设计设计数字滤波器的任务就是寻找一个因果稳定的线性时不变系统,并使系统函数H(z)具有指定的频率特性。

本实验采用MATLAB工具箱函数buttord设计数字低通IIR滤波器。

fp=800;fs=1300;rs=35;rp=0.5;Fs=44100;wp=2*Fs*tan(2*pi*fp/(2*Fs));ws=2*Fs*tan(2*pi*fs/(2*Fs));[n,wn]=buttord(wp,ws,rp,rs,'s');[b,a]=butter(n,wn,'s');[num,den]=bilinear(b,a,Fs);[h,w]=freqz(num,den,512,Fs);figure(1)%subplot(3,1,1)plot(w,abs(h));xlabel('频率/Hz');ylabel('幅值');title('巴特沃斯低通滤波器幅度特性');axis([0,5000,0,1.2]); grid on;figure(2)%subplot(3,1,2)plot(w,20*log10(abs(h)));xlabel('频率/Hz');ylabel('幅值db');title('巴特沃斯低通滤波器幅度特性db');axis([0,5000,-90,10]); grid on;figure(3)plot(w,180/pi*unwrap(angle(h)));xlabel('频率/Hz');ylabel('相位');title('巴特沃斯低通滤波器相位特性');axis([0,5000,-1000,10]) ;grid on; [s1,Fs]=audioread('000.wav');x1=s1(:,1);sound(x1,Fs);N1=length(x1);Y1=fft(x1,N1);f1=Fs*(0:N1-1)/N1; t1=(0:N1-1)/Fs; figure(4)plot(f1,abs(Y1))xlabel('频率/Hz');ylabel('幅度');title('原始信号频谱');grid on;axis([0 6000 0 400])y=filter(num,den,x1);sound(y,Fs);N2=length(y);Y2=fft(y,N2);f2=Fs*(0:N2-1)/N2;t2=(0:N2-1)/Fs;figure(5)plot(f2,abs(Y2))xlabel('频率/Hz');ylabel('幅度');title('过滤后信号的频谱'); grid on;axis([0 6000 0 100])程序结果如下图:信号处理巴特沃斯滤波器利用函数filter进行滤波。

用设计的滤波器对含噪声的语音信号进行滤波。

其程序如下:[x,fs]=audioread('000.wav');x1=x(:,1); %获取单列语音信号并对其做FFT变换N1=length(x1);fx1=fft(x1);w1=2/N1*[0:N1/2-1];n=0:N1-1;y=0.05*(cos(2*pi*n*3000/fs)+cos(2*pi*n*5000/fs)+cos(2*pi*n*80 00/fs)); %设计三余弦混合噪声信号N2=length(y); %对三余弦混合噪声信号做FFT变换fy=fft(y);w2=2/N2*(0:N2/2-1)*fs/2;hdx=x1+y'; %产生加噪后的语音信号并对其做FFT变换M=length(hdx);fhdx=fft(hdx); w3=2/M*(0:M/2-1);figure %画出单列信号语音信号的频谱图、三余弦混合噪声信号的离散信号图 %及其频谱图和加噪后语音信号的频谱图subplot(2,2,1);plot(w1,abs(fx1(1:N1/2)));subplot(2,2,2);stem((0:127),y(1:128));abs(fy(1:N2/2));subplot(2,2,3);plot(w3,abs(fhdx(1:M/2)));sound(hdx,fs); % 语音信号有电流声,而且噪声比较明显。

相关主题