语音信号处理MATLAB程序

  • 格式:doc
  • 大小:65.50 KB
  • 文档页数:7

试验一 语音信号处理

语音信号处理综合运用了数字信号处理的理论知识,对信号进行计算及频谱分析,设计滤波器,并对含噪信号进行滤波。

一,具体分为以下步骤:

(1)语音信号的采集:利用Windows下的录音机,录制一段话音。然后在Matlab软件平台下,利用函数wavread对语音信号进行采样,播放语音信号,并绘制原始语音信号;

(2)对原始信号加入噪声:对原始语音信号加入

s=0.05*sin(2*pi*f*Ts*n)

的噪声,采样后可知Fs ,选择f = 2500,播放加入噪声信号的语音信号,并绘制噪声信号和含噪语音信号;

(3)频谱分析:分别对原始语音信号,噪声信号和含噪声的语音信号进行频谱分析,并绘出各频谱图;

(4)设计滤波器:计算滤波器的性能指标,设计滤波器,绘制滤波器的特性曲线;

(5)滤波器滤波:用自己设计的滤波器对采集的信号进行滤波,得出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化,并回放语音信号,感觉滤波前后的声音有变化。

(6) 对原始信号进行整数倍抽取,比较抽取前后的频谱图

(7)对原始信号进行整数倍内插,比较原始信号频谱,内插零值时的频谱和滤波后的频谱图。

二,源程序:

[x,fs,bits]=wavread('he.wav');

N=length(x);%测定语音信号长度

f=2500;

x=x';%对语音信号进行转置,使N行1列矩阵变为1行N列矩阵

n=0:1/fs:(N-1)/fs;

s=0.05*sin(2*pi*f*n);%噪声信号

y=x+s;%信号加噪声

f1=0:fs/N:fs*(N-1)/N;%横坐标,f1为频率

x1=fft(x,N); s1=fft(s,N);

Y=fft(y,N);

figure(1);

subplot(311);plot(n,x);title('原始信号波形图');

xlabel('t/s');ylabel('幅值');

subplot(312);plot(n,s);title('噪声信号波形图');ylim([-0.08,0.08]);

xlabel('t/s');ylabel('幅值');

subplot(313);plot(n,y);title('信号+噪声信号波形图');

xlabel('t/s');ylabel('幅值');

figure(2);

subplot(221);plot(f1,abs(x1));title('原始信号频谱图');

xlabel('频率/Hz'); ylabel('频率响应幅度');xlim([0,fs/12]);

subplot(222);plot(f1,abs(s1));title('噪声信号频谱图');

xlabel('频率/Hz'); ylabel('频率响应幅度');xlim([0,fs/12]);

subplot(223);plot(f1,abs(Y));title('信号+噪声频谱图');

xlabel('频率/Hz'); ylabel('频率响应幅度');xlim([0,fs/12]);

%%%%%%%%%%%%%%滤波器设计%%%%%%%%%%%%%%%%%%%%

%%根据原始信号与噪声信号频谱图,选择巴特沃斯低通滤波器

%%滤波器性能指标:取wp=1500*2*pi rad/s,ws=2400*2*pi rad/s,Rp=2,Rs=15

%选择滤波器的最小阶数

wp=1500*2*pi;ws=2200*2*pi;Rp=2;Rs=15;

[N1,Wn]=buttord(wp,ws,Rp,Rs,'s');

%创建butterworth模拟滤波器

[Z,P,K]=buttap(N1);

%把滤波器的零极点模型转化为传递函数模型

[Bap,Aap]=zp2tf(Z,P,K);

%把模拟滤波器原型转换成截止频率为Wn的低通滤波器 [b,a]=lp2lp(Bap,Aap,Wn);

%用双线性变换法实现模拟滤波器到数字滤波器的转换

[bz,az]=bilinear(b,a,fs);

%绘制频率响应曲线

[H,W]=freqz(bz,az);

figure(3);

subplot(211),

plot(W*fs/(2*pi),abs(H)); grid

title('butterworth低通滤波器频响图');xlabel('频率/Hz'); ylabel('频率响应幅度');

%%%%%%%用所设计的滤波器对语音+噪声信号y滤波%%%%%%%

y1=filter(bz,az,y);

subplot(212),plot(n,y1);title('滤波后信号波形图');

xlabel('频率/Hz'); ylabel('频率响应幅度');

%sound(x,fs);%播放语音信号

%sound(y,fs);%播放语音+噪声信号

%sound(y1,fs);%播放滤波后的信号

%%%%%%对原始信号进行整数倍抽取%%%%%%%%%%%%%%%%

M=2;%%按M倍抽取

for i=1:fix(N/M)

y2(i)=x(M*i);

end

y2=fft(y2,i);%%抽取后进行傅里叶变换

fs2=fs/M;

f2=0:fs2/i:fs2*(i-1)/i;

figure(4);subplot(322);plot(f2,abs(y2)); title('原始信号');xlim([0 fs/(12*M/2^1)]);

%%%%%%%%%对原始信号进行整数倍内插%%%%%%%%%%%

M1=1;%%按M1倍内插

y3=zeros(1,N*M1);

for i=1:N

y3(i*M1)=x(i);

end

y3=fft(y3,N*M1);%%内插后进行傅里叶变换

fs3=fs*M1;

f3=0:fs3/(N*M1):fs3*(N*M1-1)/(N*M1);

figure(5);subplot(221);plot(f3,abs(y3));

title('原始信号频谱图');xlim([0 150000]);

注:程序中最后两步对信号进行整数倍抽取和整数倍内插时只分别给出了参数M=2和M1=1;即运行的时候figure(4)和figure(5)分别只显示M=2和M1=1的图;要想得到其他整数倍抽取(或内插)的图像,可修改相应的M,M1值。修改后可得一下结果。

三,程序运行结果:

00.10.20.30.40.50.60.7-0.200.2原始信号波形图t/s幅值00.10.20.30.40.50.60.7-0.0500.05噪声信号波形图t/s幅值00.10.20.30.40.50.60.7-0.200.2信号+噪声信号波形图t/s幅值

0200040000100200300原始信号频谱图频率/Hz频率响应幅度020004000050010001500噪声信号频谱图频率/Hz频率响应幅度020004000050010001500信号+噪声频谱图频率/Hz频率响应幅度 00.511.522.533.5x 10400.511.5butterworth低通滤波器频响图频率/Hz频率响应幅度00.10.20.30.40.50.60.7-0.2-0.100.10.2滤波后信号波形图频率/Hz频率响应幅度

0200040000100200按2倍抽取后的频谱020004000050100按4倍抽取后的频谱02000400002040按8倍抽取后的频谱02000400001020按16倍抽取后的频谱0200040000510按32倍抽取后的频谱020004000024按64倍抽取后的频谱

051015x 1040100200300原始信号频谱图051015x 1040100200300按2倍内插零值后的频谱051015x 1040100200300按4倍内插零值后的频谱051015x 1040100200300按8倍内插零值后的频谱

四,结果分析

对原始信号加入噪声后播放,声音中明显存在单频尖锐噪声。后对信号+噪声信号进行滤波后,播放的声音中仍留有少量的噪声信号,且整体信号不如加噪前明亮,原因是采用低通滤波器滤去高频噪声时,原信号的高频信号也被滤去了,所以声音没加噪前丰富,显得低沉。

对原始信号进行整数倍抽取,相当于降低采样频率,由图可知,当抽取倍数为16倍时出现了明显的频谱混叠现象。原因是由于抽样频率fs不满足fs>=2*fh,从而周期延拓时出现了频谱混叠现象。而对信号进行整数倍内插则没有使信号频谱变差。从而也验证了采样定理的正确性。