基于MATLAB对语音信号进行分析和处理

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

基于MATLAB对语音信号进行分析和处理一、设计目的1.学会MATLAB的使用,掌握MATLAB的程序设计方法;2.掌握在Windows环境下语音信号采集的方法;3.掌握数字信号处理的基本概念、基本理论和基本方法;4.掌握MATLAB设计FIR和IIR数字滤波器的方法;5.学会用MATLAB对信号进行分析和处理。二、设计过程1、语音信号采集与分析运用windows下的录音机,录制一段自己的话音,时间为两秒。然后在MATLAB软件平台下,利用函数wavread对语音信号进行采样,再运用plot函数画出语音信号的时域波形,最后在语音信号频谱分析时运用fft对信号进行快速傅里叶变换,得到频谱特性图形。人为设计一个固定频率5500Hz的噪声干扰信号。噪声信号通常为随机序列,在本设计中用正弦序列代替,干扰信号构建命令函数为d=[Au*sin(2*pi*5500*t)]',给出的干扰信号为一个正弦信号,针对上面的语音信号,采集了其中一段。再对噪音信号进行频谱变换得到其频谱图。2、滤波器设计和运用滤波器进行滤波1)窗函数和等波纹逼近法设计FIR滤波器及滤波首先根据阻带最小衰减选定窗口类型,然后调用fir1函数设计线性相位FIR数字滤波器,再用freqz函数画出其频谱图形,最后运用fftfilt函数对信号进行滤波。而等波纹逼近法中则运用remez和remezord直接设计FIR滤波器,然后运用fftfilt函数对信号进行滤波。2)双线性变换法社设计IIR数字滤波器及滤波首先将数字滤波器的技术指标运用预畸校正法转换成模拟滤波器的设计指标:Ωph=2/T*tan(wp/2),然后用butter、cheby1设计各种模拟滤波器,再用bilinear函数进行模拟滤波器和数字滤波器之间的转换,最后用filter函数对语音信号进行滤波,并运用函数sound播放滤波后语音。三、结果及分析1、用MATLAB对原始语音信号进行分析,画出它的时域波形和频谱时域波形和频谱:图1原始语音信号图2语音信号频率响应图图3原始语音信号FFT与信号频谱2、给原始的语音信号加上一个高频余弦噪声,频率为5500hz。对加噪后的语音进行分析,并画出其信号时域和频谱图。与原始信号对比,区别:先原始信号没加噪音之前0到2000有幅值,在4000到6000之间没有幅值,但是在加了噪音之后4000到6000之间出现最大幅值12,超出正常值。如图5原始信号与加噪后信号频谱对比图所示。3、设计IIR数字低通、高通滤波器1)butter设计数字低通滤波器2)butter设计数字高通滤波器3)cheby1设计模拟低通滤波器再经双线性变换法设计成低通数字滤波器4)cheby1设计模拟高通滤波器再经双线性变换法设计成高通数字滤波器3、设计FIR数字低通、高通滤波器1)用凯瑟窗设计FIR低通滤波器2)用凯瑟窗设计FIR高通滤波器3)等波纹逼近法设计FIR低通滤波器及滤波4)等波纹逼近法设计FIR高通滤波器及滤波4、实验结论通过对比分析可知,滤波后的输出波形和原始语音加噪声信号的图形发生了一些变化:滤波后的输出波形明显在对应时间幅度比原语音加噪声信号的要小,而且滤波的效果也与滤波器的选择有关,可以看出滤波器的性能差异以及参数的调节会对滤波器产生一定的影响,并且通过回放可以发现滤波前后的声音有变化.低通滤波后,已很接近原来的声音。从频谱图中我们还可以看出声音的能量信号主要集中在低频部分,说明高频语音信号被滤出,滤波器达到既定要求。在采样时要注意音频要为单声道,否则会提示出错,无法利用freqz绘制原始语音信号的频率响应图。由结果可知实验中的各种数字低通滤波器(butter设计模拟滤波器再经双线变化法设计的数字低通滤波器除外)在相同采样频率下,对语音信号都有较好的过滤作用,让声音变得低沉、圆润,音质较好;而实验中各种数字高通滤波器则对高音部分有较好的保留作用,滤掉了低音部分,让声音变得嘶哑、高亢。总之,无论是哪种数字滤波器都有自己独特的作用,要根据实际需要选择。四、程序附录(1)时域波形和频谱fs=22050;%语音信号采样频率为22050x1=wavread('E:\数字信号处理\recording.wav');%读取语音信号的数据,赋给变量x1,sound(x1,22050);%播放语音信号y1=fft(x1,1024);%对信号做1024点FFT变换f=fs*(0:511)/1024;%将0到511,步长为1的序列的值与fs相乘并除以1024的值,赋值给ffigure(1)%创建图形窗1plot(x1)%做原始语音信号的时域图形title('原始语音信号');xlabel('timen');%x轴的名字是“timen”ylabel('fuzhin');%y轴的名字是“fuzhin”figure(2)freqz(x1)%绘制原始语音信号的频率响应图title('频率响应图')figure(3)subplot(2,1,1);%创建两行一列绘图区间的第1个绘图区间plot(abs(y1(1:512)))%做原始语音信号的FFT频谱图title('原始语音信号FFT频谱')subplot(2,1,2);plot(f,abs(y1(1:512)));%abs是绝对值,plot是直角坐标下线性刻度曲线title('原始语音信号频谱')xlabel('Hz');ylabel('幅值');(2)加噪声后信号时域和频谱图fs=22050;x1=wavread('E:\数字信号处理\recording.wav');%读取语音信号的数据,赋给变量x1f=fs*(0:511)/1024;%将0到511,步长为1的序列的值与fs相乘并除以1024的值,赋值给ft=0:1/fs:(length(x1)-1)/fs;%将0到x1的长度减1后的值除以fs的值,且步长为1/fs的值,的序列的值,赋予tAu=0.03;%噪声幅值d=[Au*sin(2*pi*5500*t)]';%所加的噪声是正弦信号x2=x1+d;%将正弦信号噪声加在语音信号上sound(x2,22050);%播放语音信号y1=fft(x1,1024);%对信号y1做1024点FFT变换y2=fft(x2,1024);%对信号y2做1024点FFT变换figure(1);%创建图形窗1plot(t,x2);%做加噪后的信号时域图形(绘出t对x2的线性图)title('加噪后的信号');xlabel('timen');%x轴的名字是“timen”ylabel('fuzhin');%y轴的名字是“fuzhin”figure(2)%创建图形窗2subplot(2,1,1);%创建两行一列绘图区间的第1个绘图区间plot(f,abs(y1(1:512)));%做原始语音信号的频谱图title('原始语音信号频谱');xlabel('Hz');%x轴的名字是“timen”ylabel('fuzhi');%y轴的名字是“fuzhi”subplot(2,1,2);%创建两行一列绘图区间的第2个绘图区间plot(f,abs(y2(1:512)));%做加噪后的语音信号的频谱图(abs是绝对值,plot是直角坐标下线性刻度曲线)title('加噪后的信号频谱');xlabel('Hz');%x轴的名字是“timen”ylabel('fuzhi');%y轴的名字是“fuzhi”(3)设计IIR数字滤波器1)butter设计数字低通滤波器%butter设计模拟低通滤波器再用双线性变换法设计IIR数字低通滤波器clearall;closeall;clc;fp=1000;fc=1200;FS=8000;rp=1;rs=100;wpz=2*pi*1000/FS;wsz=2*pi*1200/FS;wp=2*tan(wpz/2)*FS;ws=2*tan(wsz/2)*FS;%预畸校正转换指标[N,wc]=buttord(wp,ws,rp,rs,'s');[B,A]=butter(N,wc,'s');[Bz,Az]=bilinear(B,A,FS);w=0:0.01*pi:pi;[h,w]=freqz(Bz,Az,w);figure(1);plot(w/pi,20*log(abs(h)),'k');axis([0,1,-800,100]);xlabel('w/pi');ylabel('幅度/dB');grid;title('butter数字低通滤波器');[y,fn,nbits]=wavread('E:\数字信号处理\recording.wav');Y=fft(y);y1=filter(Bz,Az,y);Y1=fft(y1);n=0:length(y)-1;figure(2);subplot(221);plot(y);title('未滤波语音波形');subplot(222);plot(y1);title('滤波后语音波形');subplot(223);plot(n,Y);title('未滤波语音频谱');subplot(224);plot(n,Y1);title('滤波后语音频谱');sound(y1,fn,nbits);%滤波后语音回放2)butter设计数字高通滤波器%butter设计数字高通滤波器(此处直接运用了butter设计数字高通滤波器)clearall;closeall;clc;fp=3000;fc=2800;rp=1;rs=100;FS=8000;wp=2*pi*1000/FS;ws=2*pi*1200/FS;[N,wc]=buttord(wp,ws,rp,rs);[B,A]=butter(N,wc,'high');w=0:0.01*pi:pi;[h,w]=freqz(B,A,w);figure(1);plot(w/pi,20*log(abs(h)),'k');axis([0,1,-800,100]);xlabel('w/pi');ylabel('幅度/dB');grid;title('butter数字高通滤波器');[y,fn,nbits]=wavread('E:\数字信号处理\recording.wav');Y=fft(y);y1=filter(B,A,y);Y1=fft(y1);n=0:length(y)-1;figure(2);subplot(221);plot(y);title('未滤波语音波形');subplot(222);plot(y1);title('滤波后语音波形');subplot(223);plot(n,Y);title('未滤波语音频谱');subplot(224);plot(n,Y1);title('滤波后语音频谱');sound(y1,fn,nbits);%滤波后语音回放3)cheby1设计模拟低通滤波器再经双线性变换法设计成低通数字滤波器%cheby1设计模拟低通滤波器再经双线性变换法设计成低通数字滤波器fp=1000;fc=1200;rp=1;rs=100;FS=8000;wpz=2*pi*fp/FS;wsz=2*pi*fc/FS;wp=2*tan(wpz/2)*FS;ws=2*tan(wsz/2)*FS;%预畸校正转换指标[N,wpo]=cheb1ord(wp,ws,rp,rs,'s');[BH,AH]=cheby1(N,rp,wpo,'s');[Bz,Az]=bilinear(BH,AH,FS);w=0:0.01*pi:pi;[h,w]=freqz(Bz,Az,w);figure(1);plot(w/pi,20*log(abs(h)),'k');axis([0,1,-800,100]);xlabel('w/pi');ylabel('幅度/dB');grid;title('cheby1数字低通滤波器');[y,fn,nbits]=wavread('E:\数字信号处理\recording.wav');Y=fft(y);y1=filter(Bz,Az,y);Y1=fft(y1);n=0:length(y)-1;figure(2);subp

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功