语音信号处理正文Word文档下载推荐.docx

上传人:b****3 文档编号:18411016 上传时间:2022-12-16 格式:DOCX 页数:33 大小:765.51KB
下载 相关 举报
语音信号处理正文Word文档下载推荐.docx_第1页
第1页 / 共33页
语音信号处理正文Word文档下载推荐.docx_第2页
第2页 / 共33页
语音信号处理正文Word文档下载推荐.docx_第3页
第3页 / 共33页
语音信号处理正文Word文档下载推荐.docx_第4页
第4页 / 共33页
语音信号处理正文Word文档下载推荐.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

语音信号处理正文Word文档下载推荐.docx

《语音信号处理正文Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《语音信号处理正文Word文档下载推荐.docx(33页珍藏版)》请在冰豆网上搜索。

语音信号处理正文Word文档下载推荐.docx

下面介绍Wavread函数几种调用格式。

(1)y=wavread(file)

功能说明:

读取file所规定的wav文件,返回采样值放在向量y中。

(2)[y,fs,nbits]=wavread(file)

采样值放在向量y中,fs表示采样频率(hz),nbits表示采样位数。

(3)y=wavread(file,N)

读取钱N点的采样值放在向量y中。

(4)y=wavread(file,[N1,N2])

读取从N1到N2点的采样值放在向量y中。

接下来,对语音信号OriSound.wav进行采样。

其程序如下:

>

[y,fs,nbits]=wavered(‘OriSound’);

%把语音信号加载入Matlab仿真软件平台中

然后,画出语音信号的时域波形,再对语音信号进行频谱分析。

MATLAB提供了快速傅里叶变换算法FFT计算DFT的函数fft,其调用格式如下:

Xk=fft(xn,N)

参数xn为被变换的时域序列向量,N是DFT变换区间长度,当N大于xn的长度时,fft函数自动在xn后面补零。

,当N小于xn的长度时,fft函数计算xn的前N个元素,忽略其后面的元素。

在本次设计中,我们利用fft对语音信号进行快速傅里叶变换,就可以得到信号的频谱特性。

[x,Fs,nbits]=wavread('

nm.wav'

);

player=audioplayer(x,Fs);

play(player);

pause(10);

stop(player);

N=length(x);

subplot(2,2,3);

plot(x);

title('

原始信号波形'

subplot(2,2,2);

Hs=spectrum.welch;

psd(Hs,x,'

Fs'

Fs);

功率图'

subplot(2,2,1);

specgram(x);

语谱图'

subplot(2,2,4);

y=fft(x,N);

Xk=abs(y);

plot(Xk(1:

N/2));

幅度图'

程序结果如下图:

图1原始信号波形及频谱

3.3语音信号加噪与频谱分析

MATLAB中产生高斯白噪声非常方便,有两个产生高斯白噪声的两个函数。

我们可以直接应用两个函数:

一个是WGN,另一个是AWGN。

WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声。

也可直接用randn函数产生高斯分布序列。

在本次课程设计中,我们是利用MATLAB中的随机函数(rand或randn)产生噪声加入到语音信号中,模仿语音信号被污染,并对其频谱分析。

Randn函数有两种基本调用格式:

Randn(n)和Randn(m,n),前者产生n×

n服从标准高斯分布的随机数矩阵,后者产生m×

n的随机数矩阵。

在这里,我们选用Randn(m,n)函数。

语音信号添加噪声及其频谱分析的主要程序如下:

[y,fs,nbits]=wavread(‘nm.wav’);

N=length(y);

%求出语音信号的长度

Noise=0.01*randn(size(N));

%随机函数产生噪声

Si=y+Noise;

%语音信号加入噪声

sound(Si);

subplot(2,1,1);

plot(Si);

加噪语音信号的时域波形'

S=fft(Si);

%傅里叶变换

subplot(2,1,2);

plot(abs(S));

加噪语音信号的频域波形'

图2加噪后的波形及频谱分析

3.4设计FIR和IIR数字滤波器

IIR滤波器和FIR滤波器的设计方法完全不同。

IIR滤波器设计方法有间接法和直接法,间接法是借助于模拟滤波器的设计方法进行的。

其设计步骤是:

先设计过渡模拟滤波器得到系统函数H(s),然后将H(s)按某种方法转换成数字滤波器的系统函数H(z)。

FIR滤波器比鞥采用间接法,常用的方法有窗函数法、频率采样发和切比雪夫等波纹逼近法。

对于线性相位滤波器,经常采用FIR滤波器。

对于数字高通、带通滤波器的设计,通用方法为双线性变换法。

可以借助于模拟滤波器的频率转换设计一个所需类型的过渡模拟滤波器,再经过双线性变换将其转换策划那个所需的数字滤波器。

具体设计步骤如下:

(1)确定所需类型数字滤波器的技术指标。

(2)将所需类型数字滤波器的边界频率转换成相应的模拟滤波器的边界频率,转换公式为Ω=2/Ttan(0.5ω)

(3)将相应类型的模拟滤波器技术指标转换成模拟低通滤波器技术指标。

(4)设计模拟低通滤波器。

(5)通过频率变换将模拟低通转换成相应类型的过渡模拟滤波器。

(6)采用双线性变换法将相应类型的过渡模拟滤波器转换成所需类型的数字滤波器。

我们知道,脉冲响应不变法的主要缺点是会产生频谱混叠现象,使数字滤波器的频响偏离模拟滤波器的频响特性。

为了克服之一缺点,可以采用双线性变换法。

下面我们总结一下利用模拟滤波器设计IIR数字低通滤波器的步骤:

(1)确定数字低通滤波器的技术指标:

通带边界频率、通带最大衰减,阻带截止频率、阻带最小衰减。

(2)将数字低通滤波器的技术指标转换成相应的模拟低通滤波器的技术指标。

(3)按照模拟低通滤波器的技术指标设计及过渡模拟低通滤波器。

(4)用双线性变换法,模拟滤波器系统函数转换成数字低通滤波器系统函数。

如前所述,IIR滤波器和FIR滤波器的设计方法有很大的区别。

下面我们着重介绍用窗函数法设计FIR滤波器的步骤。

如下:

(1)根据对阻带衰减及过渡带的指标要求,选择串窗数类型(矩形窗、三角窗、汉宁窗、哈明窗、凯塞窗等),并估计窗口长度N。

先按照阻带衰减选择窗函数类型。

原则是在保证阻带衰减满足要求的情况下,尽量选择主瓣的窗函数。

(2)构造希望逼近的频率响应函数。

(3)计算h(n).。

(4)加窗得到设计结果。

接下来,我们根据语音信号的特点给出有关滤波器的技术指标:

①低通滤波器的性能指标:

fp=1000Hz,fc=1200Hz,As=100db,Ap=1dB

②高通滤波器的性能指标:

fp=3500Hz,fc=4000Hz,As=100dB,Ap=1dB;

③带通滤波器的性能指标:

fp1=1200Hz,fp2=3000hZ,fc1=1000Hz,fc2=3200Hz,As=100dB,Ap=1dB

在Matlab中,可以利用函数fir1设计FIR滤波器,利用函数butter,cheby1和ellip设计IIR滤波器,利用Matlab中的函数freqz画出各步步器的频率响应。

hn=fir1(M,wc,window),可以指定窗函数向量window。

如果缺省window参数,则fir1默认为哈明窗。

其中可选的窗函数有RectangularBarlrttHammingHannBlackman窗,其相应的都有实现函数。

MATLAB信号处理工具箱函数buttpbuttorbutter是巴特沃斯滤波器设计函数,其有5种调用格式,本课程设计中用到的是[N,wc]=butter(N,wc,Rp,As,’s’),该格式用于计算巴特沃斯模拟滤波器的阶数N和3dB截止频率wc。

MATLAB信号处理工具箱函数cheblap,cheblord和cheeby1是切比雪夫I型滤波器设计函数。

我们用到的是cheeby1函数,其调用格式如下:

[B,A]=cheby1(N,Rp,wpo,’ftypr’)

[B,A]=cheby1(N,Rp,wpo,’ftypr’,’s’)

函数butter,cheby1和ellip设计IIR滤波器时都是默认的双线性变换法,所以在设计滤波器时只需要代入相应的实现函数即可。

下面我们将给出FIR和IIR数字滤波器的主要程序。

%=========================IIR低通滤波器=======================

clearall;

Fp=50000;

Fs=60000;

Ft=200000;

wp=2*pi*Fp/Ft;

%通带边界频率

ws=2*pi*Fs/Ft;

%阻带截止频率

fp=2*Ft*tan(wp/2);

fs=2*Fs*tan(wp/2);

[n11,wn11]=buttord(wp,ws,1,50,'

s'

%求低通滤波器的阶数和截止频率

[b11,a11]=butter(n11,wn11,'

%求S域的频率响应的参数

[num11,den11]=bilinear(b11,a11,0.5);

%双线性变换实现S域到Z域的变换

[h,w]=freqz(num11,den11);

%根据参数求出频率响应

plot(w*8000*0.5/pi,abs(h),'

g'

legend('

用butter设计'

gridon;

图3IIR低通滤波器

%======================IIR带通==========================

Fp1=10000;

Fp2=25000;

Fs1=10000;

Fs2=45000;

wp1=tan(pi*Fp1/Ft);

%带通到低通滤波器的转换

wp2=tan(pi*Fp2/Ft);

ws1=tan(pi*Fs1/Ft);

ws2=tan(pi*Fs2/Ft);

w=wp1*wp2/ws2;

bw=wp2-wp1;

wp=1;

ws=(wp1*wp2-w.^2)/(bw*w);

[n12,wn12]=buttord(wp,ws,1,50,'

%求低通滤波器阶数和截止频率

[b12,a12]=butter(n12,wn12,'

%求S域的频率响应参数

[num2,den2]=lp2bp(b12,a12,sqrt(wp1*wp2),bw);

%将S域低通参数转为带通[num12,den12]=bilinear(num2,den2,0.5);

%双线性变换实现S域到Z域的转换[h,w]=freqz(num12,den12);

图4IIR带通滤波器

%======================IIR高通==========================

Fs=35000;

wp1=tan(pi*Fp/Ft);

%高通到低通滤波器参数转换

ws1=tan(pi*Fs/Ft);

ws=wp1*wp/ws1;

[n13,wn13]=cheb1ord(wp,ws,1,50,'

%求模拟的低通滤波器阶数和截止频率

[b13,a13]=cheby1(n13,1,wn13,'

%求S域的频率响应的参数

[num,den]=lp2hp(b13,a13,wn13);

%将S域低通参数转为高通的

[num13,den13]=bilinear(num,den,0.5);

%利用双线性变换实现S域到Z域转换

[h,w]=freqz(num13,den13);

plot(w*21000*0.5/pi,abs(h),'

IIR高通滤波器'

用ch1by1设计'

图5IIR高通滤波器

%======================IIR带阻==========================

Fp1=15000;

Fp2=35000;

Fs1=20000;

Fs2=30000;

Ap=2;

As=13;

wp1=2*pi*Fp1/Ft;

wp2=2*pi*Fp2/Ft;

ws1=2*pi*Fs1/Ft;

ws2=2*pi*Fs2/Ft;

Wp1=tan(wp1/2);

Wp2=tan(wp2/2);

Ws1=tan(ws1/2);

Ws2=tan(ws2/2);

Bw=Ws2-Ws1;

Wp1=Ws1*Ws2/Wp2;

W0=(Ws1*Ws2)^0.5;

Ws=1;

Wp=(Bw*Wp1)/((Ws1*Ws2)-Wp1^2);

[N,WN]=buttord(Wp,Ws,Ap,As,'

%求模拟的低通滤波器阶数和截止频率

[B,A]=butter(N,WN,'

[BT,AT]=lp2bs(B,A,W0,Bw);

%将S域低通参数转为带阻的

[num,den]=bilinear(BT,AT,0.5);

[H,W]=freqz(num,den,512);

plot(W/pi,20*log10(abs(H)),'

巴特沃兹带阻滤波器'

图6IIR带阻滤波器

%======================FIR低通==========================

wpf=800;

wsf=860;

Ft=8000;

wpz=2*pi*wpf/Ft;

wsz=2*pi*wsf/Ft;

B=wsz-wpz;

%计算过渡带宽度

N=ceil(8*pi/B);

%求阶

wc=(wpz+B/2)/pi;

%计算理想高通滤波器通带截止频率

hn=fir1(N-1,wc);

%调用firl计算低通FIR数字滤波器的h(n)

M=8000;

hk=fft(hn,M);

plot(20*log10(abs(hk)),'

FIR低通滤波器'

图7FIR低通滤波器

%======================FIR高通==========================

wpf=1260;

wsf=1200;

B=wpz-wsz;

wc=(wsz+B/2)/pi;

hn=fir1(N-1,wc,'

high'

%调用firl计算高通FIR数字滤波器的h(n)

FIR高通滤波器'

图8FIR高通滤波器

%======================FIR带通==========================

wpf=[860,2500];

wsf=[800,2560];

%设置滤波器参数

%模拟频率转化为数字频率

B=wpz

(1)-wsz

(1);

%计算过滤带的宽度

N0=ceil(8*pi/B);

N=N0+mod(N0+1,2);

%保证N为奇数

%求h(n)的FFT

FIR带通'

图9FIR带通滤波器

%======================FIR带阻==========================

wpf=[800,2560];

wsf=[860,2500];

%设置滤波器参数

%模拟频率转化为数字频率

B=wsz

(1)-wpz

(1);

%保证N为奇数

stop'

%求h(n)的FFT

FIR´

ø

×

è

Â

Ë

²

¨

Æ

÷

'

图10FIR带阻滤波器

3.5用滤波器对加噪语音信号进行滤波

用自己设计的各滤波器分别对加噪的语音信号进行滤波,在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。

函数fftfilt用的是重叠相加法实现线性卷积的计算。

调用格式为:

y=fftfilter(h,x,M)。

其中,h是系统单位冲击响应向量;

x是输入序列向量;

y是系统的输出序列向量;

M是有用户选择的输入序列的分段长度,缺省时,默认的输入向量的重长度M=512。

函数filter的调用格式:

yn=filter(B,A.xn),它是按照直线型结构实现对xn的滤波。

其中xn是输入信号向量,yn输出信号向量。

3.6比较滤波前后语音信号的波形及频谱

%======================双线性变换法========================

%*************************低通滤波器******************************

%求低通滤波器的阶数和截止频率

%求s域的频率响应参数

%双线变换实现s域到z域的变换

[y,fs,nbits]=wavread('

N=length(y);

%求出语音信号的长度

noise=0.01*randn(size(N));

%随机函数产生噪声

m=y+noise;

%语音信号加入噪声

M=fft(m);

%傅里叶变换

z11=filter(num11,den11,m);

sound(z11);

m11=fft(z11);

figure

(1);

%滤波后的信号

plot(abs(M),'

滤波前的信号的频谱'

plot(abs(m11),'

r'

滤波后信号的频谱'

plot(m);

滤波前信号的波形'

plot(z11);

滤波后信号的波形'

图11双线性法低通滤波

%*************************高通滤波器******************************

[n13,wn13]=cheb1ord(wp,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1