MATLAB语音信号采集与处理DOCWord文件下载.docx

上传人:b****6 文档编号:17624261 上传时间:2022-12-07 格式:DOCX 页数:19 大小:991.21KB
下载 相关 举报
MATLAB语音信号采集与处理DOCWord文件下载.docx_第1页
第1页 / 共19页
MATLAB语音信号采集与处理DOCWord文件下载.docx_第2页
第2页 / 共19页
MATLAB语音信号采集与处理DOCWord文件下载.docx_第3页
第3页 / 共19页
MATLAB语音信号采集与处理DOCWord文件下载.docx_第4页
第4页 / 共19页
MATLAB语音信号采集与处理DOCWord文件下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

MATLAB语音信号采集与处理DOCWord文件下载.docx

《MATLAB语音信号采集与处理DOCWord文件下载.docx》由会员分享,可在线阅读,更多相关《MATLAB语音信号采集与处理DOCWord文件下载.docx(19页珍藏版)》请在冰豆网上搜索。

MATLAB语音信号采集与处理DOCWord文件下载.docx

y1=fft(x,n);

%傅里叶变换

y2=fftshift(y1);

%对频谱图进行平移

f=0:

fs/n:

fs*(n-1)/n;

%得出频点

subplot(2,1,1);

plot(t/2,x)%做原始语音信号的时域图形

title('

原始信号时域波形图'

);

subplot(2,1,2);

plot(f,abs(y2));

原始信号频谱图'

仿真波形:

门铃:

和弦:

男女声:

2、调制与解调:

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

在Matlab 

中可以利用函数fft 

对信号行快速傅里叶变换,得到信号的频谱特性,从而加深对频谱特性的理解。

clear;

dt=1/44100;

fs=44100;

[f1,fs,nbits]=wavread('

\1huan.wav'

figure

(1);

subplot(1,1,1);

N=length(f1);

(N-1)/fs;

plot(t,f1);

信息信号的时域波形'

fy1=fft(f1);

w1=0:

fs/(N-1):

fs;

figure

(2);

plot(w1,abs(fy1));

信息信号的频谱'

f2=cos(22000*pi*t);

figure(3);

fy2=fft(f2);

N2=length(f2);

w2=fs/N*[0:

N-1];

plot(w2,abs(abs(fy2)));

载波信号的频谱'

f1=f1(:

1);

f3=f1'

.*f2;

figure(4);

fy3=fft(f3);

plot(w1,abs(abs(fy3)));

已调信号的频谱'

sound(f3,fs,nbits);

f4=f3.*f2;

figure(5);

fy4=fft(f4);

plot(w1,abs(abs(fy4)));

解调信号的频谱'

sound(f4,fs,nbits);

fp1=0;

fs1=5000;

As1=100;

wp1=2*pi*fp1/fs;

ws1=2*pi*fs1/fs;

BF1=ws1-wp1;

wc1=(wp1+ws1)/2;

M1=ceil((As1-7.95)/(2.286*BF1))+1;

N1=M1+1;

beta1=0.1102*(As1-8.7);

Window=(kaiser(N1,beta1));

b1=fir1(M1,wc1/pi,Window);

figure(6);

freqz(b1,1,512);

FIR低通滤波器的频率响应'

f4_low=filter(b1,1,f4);

plot(t,f4_low);

滤波后的解调信号时域波形'

sound(f4_low,fs,nbits);

f5=fft(f4_low);

figure(7);

plot(w1,abs(f5));

滤波后的解调信号频谱'

3、信号变化:

快放:

[x,fs,nbits]=wavread('

w=2;

M=w*fs;

wavplay(x,M);

慢放:

w=0.8

倒放:

[x,fs,Nbits]=wavread('

y0=flipud(x);

sound(y0,fs);

回声:

[x,fs,bits]=wavread('

\3yang.wav'

[140000]);

%读取语音信号

n1=0:

2000;

b=x(:

%产生单声道信号

N=3;

yy2=filter(1,[1,zeros(1,80000/(N+1)),0.7],[b'

zeros(1,40000)]);

figure(3)

plot(yy2);

%三次回声滤波器时域波形

三次回声滤波器时域波形'

YY2=fft(yy2);

%对三次回声信号做FFT变换

plot(n1(1:

1000),YY2(1:

1000));

%三次回声滤波器频谱图

三次回声滤波器频谱图'

figure(4)

plot(abs(YY2));

%经傅里叶变换之后的信号的幅值

幅值'

plot(angle(YY2));

%经傅里叶变换之后的信号的相位

相位'

sound(2*yy2,fs,bits);

%经三次回声滤波器后的语音信号,乘以2是为了加强信号

男女变声:

Voice调用函数:

functionY=voice(x,f)%更改采样率使基频改变f>

1降低;

f<

1升高

f=round(f*1000);

d=resample(x,f,1000);

%时长整合使语音文件恢复原来时长

W=400;

Wov=W/2;

Kmax=W*2;

Wsim=Wov;

xdecim=8;

kdecim=2;

X=d'

;

F=f/1000;

Ss=W-Wov;

xpts=size(X,2);

ypts=round(xpts/F);

Y=zeros(1,ypts);

xfwin=(1:

Wov)/(Wov+1);

ovix=(1-Wov):

0;

newix=1:

(W-Wov);

simix=(1:

xdecim:

Wsim)-Wsim;

padX=[zeros(1,Wsim),X,zeros(1,Kmax+W-Wov)];

Y(1:

Wsim)=X(1:

Wsim);

lastxpos=0;

km=0;

forypos=Wsim:

Ss:

(ypts-W)

xpos=round(F*ypos);

kmpred=km+(xpos-lastxpos);

lastxpos=xpos;

if(kmpred<

=Kmax)

km=kmpred;

else

ysim=Y(ypos+simix);

rxy=zeros(1,Kmax+1);

rxx=zeros(1,Kmax+1);

Kmin=0;

fork=Kmin:

kdecim:

Kmax

xsim=padX(Wsim+xpos+k+simix);

rxx(k+1)=norm(xsim);

rxy(k+1)=(ysim*xsim'

end

Rxy=(rxx~=0).*rxy./(rxx+(rxx==0));

km=min(find(Rxy==max(Rxy))-1);

xabs=xpos+km;

Y(ypos+ovix)=((1-xfwin).*Y(ypos+ovix))+(xfwin.*padX(Wsim+xabs+ovix));

Y(ypos+newix)=padX(Wsim+xabs+newix);

end

变声程序:

[y,fs,nbits]=wavread('

3yang.wav'

%读取声音文件

x=y(:

%读入的y矩阵有两列,取第1列

sound(voice(x,1.4),fs,nbits);

%调整voice()第2个参数转换音调,>

1降调,<

1升调

4、信号加噪

fs=22050;

%语音信号采样频率为22050

x1=wavread('

%读取语音信号数据赋值给x1

f=fs*(0:

511)/1024;

%将0到511,步长为1的序列的值与fs相乘并除以1024的值赋给f

(length(x1)-1)/fs;

%将0到x1的长度减1后的值除以fs的值,且步长为1/fs的值,的序列的值,赋予t

Au=0.05;

%噪声幅值 

d=[Au*cos(2*pi*2000*t)]'

%干扰信号构建命令函数,构建了一个余弦函数

x2=x1(:

1)+d;

%取原始语音信号的单声部信号然后和噪声信号相加

wavwrite(x2,22050,'

jiazaoyang'

%生成wav文件

sound(x2,22050);

 

%播放语音信号

y1=fft(x1,1024);

%对信号做1024点的FFT变换

y2=fft(x2,1024);

%创建图形窗

plot(t,x1);

%做原始语音信号的时域波形

加噪前的信号'

xlabel('

time 

n'

%x轴的名字是time

ylabel('

fuzhi 

%y轴的名字是fuzhi

%创建两行一列绘图区间的第1个绘图区间

plot(t,x2) 

加噪后的信号'

figure

(2) 

plot(f,abs(y1(1:

512)));

原始语音信号频谱'

Hz'

fuzhi'

plot(f,abs(y2(1:

加噪后的信号频谱'

5、用窗函数法设计FIR滤波器

根据过渡带宽及阻带衰减要求,选择窗函数的类型并估计窗口长度N(或阶数M=N-1),窗函数类型可根据最小阻带衰减As独立选择,因为窗口长度N对最小阻带衰减As没有影响,在确定窗函数类型以后,可根据过渡带宽小于给定指标确定所拟用的窗函数的窗口长度N,设待求滤波器的过渡带宽为Δw,它与窗口长度N近似成反比,窗函数类型确定后,其计算公式也确定了,不过这些公式是近似的,得出的窗口长度还要在计算中逐步修正,原则是在保证阻带衰减满足要求的情况下,尽量选择较小的N,在N和窗函数类型确定后,即可调用MATLAB中的窗函数求出窗函数wd(n)。

根据待求滤波器的理想频率响应求出理想单位脉冲响应hd(n),如果给出待求滤波器频率应为Hd,则理想的单位脉冲响应可以用下面的傅里叶反变换式求出:

在一般情况下,hd(n)是不能用封闭公式表示的,需要采用数值方法表示;

从w=0到w=2π采样N点,采用离散傅里叶反变换(IDFT)即可求出。

用窗函数wd(n)将hd(n)截断,并进行加权处理,得到

如果要求线性相位特性,则h(n)还必须满足:

根据上式中的正、负号和长度N的奇偶性又将线性相位FIR滤波器分成四类。

要根据所设计的滤波特性正确选择其中一类。

例如,要设计线性相位低通特性可选择h(n)=h(N-1-n)一类,而不能选h(n)=-h(N-1-n)一类。

验算技术指标是否满足要求,为了计算数字滤波器在频域中的特性,可调用freqz子程序,如果不满足要求,可根据具体情况,调整窗函数类型或长度,直到满足要求为止。

FIR低通滤波器:

[x1,Fs,bits]=wavread('

jiazapyang'

derta_Fs 

Fs/length(x1);

%设置频谱的间隔,分辨率 

,这里保证了x轴的点数必须和y轴点数一致

fs=Fs;

fp1=1000;

fs1=1200;

%

%按凯泽窗计算滤波器阶数

%求凯泽窗窗函数

%wc1/pi为归一化,窗函数法设计函数

%[H,w]=freqz(B,A,N),

(1)中B和A分别为离散系统的系统函数分子、分母多项式的系数向量,返回量H则包含了离散系统频响在 

0~pi范围内N个频率等分点的值(其中N为正整数),w则包含了范围内N个频率等分点。

调用默认的N时,其值是512。

x1_low 

filter(b1,1, 

x1);

%对信号进行低通滤波 

filter(B,A,X) 

,输入X为滤波前序列,Y为滤波结果序列,B/A 

提供滤波器系数,B为分子, 

A为分母 

sound(x1_low,Fs,bits);

plot(x1_low);

信号经过FIR低通滤波器(时域)'

plot([-Fs/2:

derta_Fs:

Fs/2-derta_Fs],abs(fftshift(fft(x1_low))));

信号经过FIR低通滤波器(频域)'

FIR高通滤波器:

jiazaoyang.wav'

As2=100;

fp2=4000;

fs2=2000;

wp2=2*pi*fp2/fs;

ws2=2*pi*fs2/fs;

BF2=wp2-ws2;

wc2=(wp2+ws2)/2;

M2=ceil((As2-7.95)/(2.286*BF2))+1;

N2=M2+1;

beta2=0.1102*(As2-8.7);

Window=(kaiser(N2,beta2));

%求凯泽窗窗函数

b2=fir1(M2,wc2/pi,'

high'

Window);

freqz(b2,1,512);

%数字滤波器频率响应 

FIR高通滤波器的频率响应'

x1_high 

filter(b2,1,x1);

%对信号进行高通滤波

sound(x1_high,Fs,bits);

subplot(211);

plot(x1_high);

信号经过FIR高通滤波器(时域)'

subplot(212);

Fs/2-derta_Fs],abs(fftshift(fft(x1_high))));

信号经过FIR高通滤波器(频域)'

仿真结果:

FIR带通滤波:

As3=100;

fp3=[1200,3000];

fs3=[1000,3200];

wp3=2*pi*fp3/fs;

ws3=2*pi*fs3/fs;

BF3=wp3

(1)-ws3

(1);

wc3=wp3+BF3/2;

M3=ceil((As3-7.95)/(2.286*BF3))+1;

N3=M3+1;

beta3=0.1102*(As3-8.7);

Window=(kaiser(N3,beta3));

b3=fir1(M3,wc3/pi,'

bandpass'

%带通滤波器 

freqz(b3,1,512);

FIR带通滤波器的频率响应'

x1_daitong 

filter(b3,1,x1);

%对信号进行带通滤波

sound(x1_daitong,Fs,bits);

plot(x1_daitong);

信号经过FIR带通滤波器(时域)'

Fs/2-derta_Fs],abs(fftshift(fft(x1_daitong))));

信号经过FIR带通滤波器(频域)'

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

当前位置:首页 > 农林牧渔 > 水产渔业

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

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