基于MATLAB的语音信号的时、频域分析课程设计
基于MATLAB的语音信号的时、频域分析课程设计
郑州轻工业学院MATLAB课程设计说明书
摘 要
用MATLAB对于语音信号进行分析和处理,采集语音信号后,在MATLAB软件平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。本次设计介绍了基于MATLAB的对语音信号的采集,处理及滤波器的设计,并使之实现的过程。 关键词:MATLAB;语音信号;滤波器;加噪;除噪
1
郑州轻工业学院MATLAB课程设计说明书
目 录
摘要..................................................................................................... 1
1 设计原理 ...................................................................................... 1
1.1 理论原理 ........................................................................ 1
1.1.1 .......................................................... 采样频率 1 1.1.2采样位数 ......................................................... 1 1.1.3采样定理 ......................................................... 1 1.1.4时域信号的FFT分析 ................................... 1 1.1.5数字信号的滤波器原理和方法 ..................... 2 1.1.6 各种不同类型滤波器的性能比较 ................ 2 1.1.7离散傅立叶变换 ............................................. 3
2 信号采集及读取 .......................................................................... 3 3 构造受干扰信号并对其进行FFT频谱分析........................…...6 4 数字滤波器设计 .......................................................................... 6
4.1 用窗函数法设计IIR带通滤波器 ................................ 6 4.2 用窗函数法设计FIR低通滤波器 ............................... 8
5信号处理 ....................................................................................... 10
5.1 IIR带通滤波 ................................................................ 10 5.2 FIR低通滤波 ............................................................... 12
6心得体会 ....................................................................................... 14 7 参考文献: .................................................................................. 15
2
郑州轻工业学院MATLAB课程设计说明书
1设计原理
1.1 理论原理
1.1.1 采样频率
也称为采样速度或者采样率,定义了每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。采样频率只能用于周期性采样的采样器,对于非周期性采样的采样器没有规则限制。通俗的讲采样频率是指计算机每秒钟采集多少个声音样本,是描述声音文件的音质、音调,衡量声卡、声音文件的质量标准。采样频率越高,即采样的间隔时间越短,则在单位时间内计算机得到的声音样本数据就越多,对声音波形的表示也越精确。
1.1.2采样位数
即采样值或取样值,用来衡量声音波动变化的参数,是指声卡在采集和播放声音文件时所使用数字声音信号的二进制位数。
1.1.3采样定理
在进行模拟/数字信号的转换过程中,当采样频率fs.max大于信号中最高频率fmax的2倍时(fs.max>=2fmax),采样之后的数字信号完整地保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的5~10倍;采样定理又称奈奎斯特定理。
1.1.4时域信号的FFT分析
信号的频谱分析就是计算信号的傅立叶变换。连续信号与系统的傅立叶分析显然不便于用计算机进行计算,使其应用受到限制。而FFT是一种时域和频域均离散化的变换,适合数值运算,成为用计算机分析离散信号和系统的有力工具。对连续信号和系统,可以通过时域采样,应用DFT进行近似谱分析。
1
郑州轻工业学院MATLAB课程设计说明书
1.1.5数字信号的滤波器原理和方法
IIR数字滤波器系统函数: bzjMrH(z)=j01akzkk1N················(1.1) 其中H(z)称为N阶IIR数字滤波器系统函数。IIR滤波器设计方法有间接和直接法,间接法是借助于模拟滤波器的设计方法进行的。其步骤是:先设计过度模拟滤波器得到系统函数Ha(s),然后将Ha(s)按某种方法转换成数字滤波器的系统函数H(z)。 利用有限脉冲响应(FIR)设计滤波器。有限脉冲响应滤波器在保证幅度特性满足技术要求的同时,很容易做到有严格的线性相位特性。用N表示FIR滤波器单位脉冲响应h(n)的长度,其系统函数H(z)为 H(z)h(n)zn··················(1.2) n0N1H(z)是z-1的N-1次多项式,它在z平面上有N-1个零点,在原点z=0处有一个N-1重极点。因此,H(z)永远稳定。稳定和线性相位是FIR滤波器最突出的优点。 1.1.6 各种不同类型滤波器的性能比较
巴特沃斯滤波器具有单调下降的幅频特性;切比雪夫滤波器的幅频特性在通带或阻带有波纹特性,可以提高选择性;贝塞尔滤波器通带内有较好的线性相位特性;椭圆滤波器的选择性相对前三种是最好的,但通带和阻带内均呈现等波纹幅频特性,线性特性的非线性稍重。
IIR数字滤波器最大的优点是给定一组指标时,它的阶数要比相同组的FIR滤波器低得多。IIR数字滤波器的设计方法是利用模拟滤波器成熟的理论及设计图进行的,因而保留了一些典型模拟滤波器优良的幅度特性。但设计中只考虑了幅度特性,没考虑相位特性,所设计的滤波器一般是某种确定的非线性相位特性。为了得到线性相位特性,对IIR滤波器必须另外增加相位校正网络。FIR滤波器在保证幅度特性满足技术要求的同时,很容
2
郑州轻工业学院MATLAB课程设计说明书
易做到有严格的线性相位特性。稳定和线性相位是FIR滤波器最突出的优点。
1.1.7离散傅立叶变换
N1n0X(k)DFT[x(n)]x(n)WNkn 1.3 其中We j2N,N为DFT变换的区间长度。 2 信号采集及读取
用录音工具录一段自己的声音,转化为wav格式的文件,然后保存到MATLAB的文件夹下的work文件夹中。在MATLAB软件平台下,利用wavread函数对语音信号进行采样,记住采样频率和采样点数。
Wavread函数调用格式:
y=wavread(file),读取file所规定的wav文件,返回采样值放在向量y中。
[y,fs,nbits]=wavread(‘1.wav’);把语音信号进行载MATLAB仿真软件平台中,采样值放在向量y中,fs表示采样频率(hz),nbits表示采样位数。
sound(y,fs,nbits);回放语音信号 N=length(y);求出语音信号的长度 Y=fft(y,N);傅立叶变换 调用函数y为被变换的时域系列向量,N是DFT变换区间长度,当N大于y的长度时,fft函数自动在y后面补零,函数返回y的N点DFT变换结果向量Y。当N小于y的长度时,fft函数计算y的前面N个元素构成的N点DFT,忽略y后面的元素。首先画出语音信号的时域波形,然后对语音信号进行频谱分析。在MATLAB中利用fft对新号进行快速傅立叶变换,得到信号的频谱特性。
subplot(2,1,1);plot(y);title(‘原始信号波形’); subplot(2,1,2);plot(abs(Y));title(‘原始信号频谱’);
3
郑州轻工业学院MATLAB课程设计说明书
程序如下:
[y,fs,nbits]=wavread('1.wav'); sound(y,fs,nbits); N=length(y); Y=fft(y,N); subplot(2,1,1); plot(y);
title('原始信号波形');xlabel('时间');ylabel('幅度'); subplot(2,1,2); plot(abs(Y));
title('原始信号频谱');xlabel('时间');ylabel('幅度'); 程序结果如下图:
4
郑州轻工业学院MATLAB课程设计说明书
构造受干扰信号并对其进行FFT频谱分析 3
程序如下:
[y,fs,nbits]=wavread ('1.wav');
N = length (y) ; %求出语音信号的长度 noise=0.2*randn(N,1);
%随机函数产生噪声
Si=y+noise; %语音信号加入噪声 sound(Si); subplot(2,1,1); plot(Si);
title('加噪语音信号的时域波形');xlabel('时间');ylabel('幅度'); S=fft(Si); %傅里叶变换 subplot(2,1,2); plot(abs(S));
title('加噪语音信号的频域波形'); xlabel('时间');ylabel('幅度');
程序结果如下图:
5
郑州轻工业学院MATLAB课程设计说明书
4 数字滤波器设计
4.1 用窗函数法设计IIR带通滤波器
程序如下:
6
郑州轻工业学院MATLAB课程设计说明书
wp=0.2*pi; ws=0.3*pi; %性能指标 wdelta=ws-wp; %过渡带宽度
M=ceil(3.32*pi/wdelta); %滤波器长度,朝正无穷方向舍入 N=2*M+1; %窗口长度 wc=(ws+wp)/2; %截止频率
win=hamming(N); %因为衰减不小于50dB,所以选择海明窗,这里得到
海明窗的时域响应 b=fir1(N-1,wc/pi,win); n=0:1:N;
[hi t]=impz(b,1,n);%得到脉冲响应 [hf w]=freqz(b,1,512); %得到频率响应 subplot(3,1,1); stem(n,hi);
xlabel('n'); ylabel('幅度'); title('脉冲响应'); subplot(3,1,2); plot(w/pi,20*log10(abs(hf))); xlabel('频率(Hz)'); ylabel('幅度(dB)'); title('频率响应');
subplot(3,1,3); plot(w/pi,180/pi*unwrap(angle(hf))); xlabel('频率(Hz)'); ylabel('相位(degrees)'); title('频率响应');
程序结果如下图:
7
郑州轻工业学院MATLAB课程设计说明书
4.2 用窗函数法设计FIR低通滤波器
程序如下:
Ft=8000; Fp=1000; Fs=1200; wp=2*Fp/Ft; ws=2*Fs/Ft; rp=1; rs=50;
8
郑州轻工业学院MATLAB课程设计说明书
p=1-10.^(-rp/20); s=10.^(-rs/20); fpts=[wp,ws]; mag=[1,0]; dev=[p,s];
[n21,wn21,beta,ftype]=kaiserord(fpts,mag,dev); b21=fir1(n21,wn21,kaiser(n21+1,beta)); [h,w]=freqz(b21,1); plot(w/pi,abs(h)); title('FIR低通滤波器'); grid;
其程序结果如下图:
9
郑州轻工业学院MATLAB课程设计说明书
5信号处理
用设计好的数字滤波器对含噪声的语音信号进行滤波,在MATLAB中FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波,在一个窗口同时画出滤波前后的波形及频谱如下图
。
5.1 IIR带通滤波
程序如下:
[y,fs,nbits]=wavread('1.wav'); N=length(y);
Noise=0.2*randn(N,1);
10
郑州轻工业学院MATLAB课程设计说明书
Si=y+Noise; %语音信号加入噪声 nn=0:1:50; y=filter(b,1,Si);
subplot(2,1,1); stem(Si); xlabel('n'); ylabel('幅度');
title('滤波前信号频谱'); axis([0 50 -2 2]); subplot(2,1,2); stem(out); xlabel('n'); ylabel('幅度');
title('滤波后信号频谱'); axis([0 50 -1 1]); sound(y);
程序结果如下图:
11
郑州轻工业学院MATLAB课程设计说明书
5.2 FIR低通滤波
程序如下:
[y,fs,nbits]=wavread('1.wav'); N = length (y) ; noise=0.2*randn(N,1); Si=y+noise; S=fft(Si);
z21=fftfilt(b21,Si);
12
郑州轻工业学院MATLAB课程设计说明书
sound(z21); m21=fft(z21); subplot(2,2,1); plot(abs(S),'g');
title('滤波前信号的频谱');xlabel('时间');ylabel('幅度'); grid;
subplot(2,2,2); plot(abs(m21),'r');
title('滤波后信号频谱');xlabel('时间');ylabel('幅度'); grid;
subplot(2,2,3); plot(S);
title('滤波前信号波形');xlabel('时间');ylabel('幅度'); grid;
subplot(2,2,4); plot(z21);
title('滤波后信号波形');xlabel('时间');ylabel('幅度'); grid;
程序结果如下图:
13
郑州轻工业学院MATLAB课程设计说明书
6心得体会
通过这次课程设计,我学到了很多东西。进一步加深了对MATLAB的了解。在设计的过程中我遇到了不少的问题,比如刚开始要处理的是WAV格式的语音信号,可是我发现不是所有的WAV文件都可以用WAVREAD函数读取,通过软件转化了才可以使用。在编写程序的时候遇到了很多错误,最后经过查找一些资料和自己的理解都一一纠正了。总的来说,通过这次的课程设计我对语音信号有的更多的认识,对数字信号处理的知识有了更多的理解,锻炼了我的理论与实际相结合的能力,并且熟练的应用MATLAB也加深了我对课程的理解。这次设计使我更深刻的了解MATLAB的使用方法,同时我相信,进一步加强对MATLAB的学习对我今后的学习将会起到很大的帮助。
14
郑州轻工业学院MATLAB课程设计说明书
7 参考文献:
1 高西全,丁玉美编著。《数字信号处理》西安,西安电子科技大学出版社,2008
2 郑君里等主编,《信号与系统》,北京,高等教育出版社。2000
3 陈怀琛等编著,《MATLAB及在电子信息课中的应用》,北京,电子工业出版社,2002
15
因篇幅问题不能全部显示,请点此查看更多更全内容