MATLAB处理语音信号 您所在的位置:网站首页 matlab加载dat转换为wav MATLAB处理语音信号

MATLAB处理语音信号

2023-08-09 10:02| 来源: 网络整理| 查看: 265

一、实验项目名称

语音信号的处理

二、实验目的

综合运用数字信号处理课程的理论知识进行频谱分析以及滤波器设计,通过理论推导得出相应结论,并进行计算机仿真,从而复习巩固了课堂所学的理论知识,提高了对所学知识的综合应用能力。

三、实验内容 语音信号的采集语音信号的频谱分析设计数字滤波器和画出频率响应用滤波器对信号进行滤波比较滤波前后语音信号的波形及频谱回放语音信号 四、实验具体方案

1.语音信号采集 录制一段语音信号并保存为文件,长度控制在1秒,并对录制的信号进行采样;录制时使用Windows自带的录音机。   采样是将一个信号(即时间或空间上的连续函数)转换成一个数值序列(即时间或空间上的离散函数)。采样定理指出,如果信号是带限的,并且采样频率高于信号带宽的两倍,那么,原来的连续信号可以从采样样本中完全重建出来。如果信号带宽不到采样频率的一半(即奈奎斯特频率),那么此时这些离散的采样点能够完全表示原信号。高于或处于奈奎斯特频率的频率分量会导致混叠现象。大多数应用都要求避免混叠,混叠问题的严重程度与这些混叠频率分量的相对强度有关。 用Windows自带录音机录入一段音乐,2秒钟,用audioread读取音频内容,这里不使用waveread是因为他要求音频文件格式为.wav ,并且我进行了尝试但没有成功,画出音频信号的时域波形图

[y1,fs] = audioread('F:\MATLAB\ren.m4a'); figure(1); plot( y1 ); title( 'Ô­原语音信号时域波形图' ); xlabel( '单位' );ylabel( '幅度' );

在这里插入图片描述 2.语音信号频谱分析 首先画出语音信号的时域波形,然后对语音信号进行频谱分析。在matlab中利用fft对信号进行快速傅里叶变换,得到信号的频谱特性。

Matlab的信号处理工具箱中的函数FFT可用于对序列的快速傅里叶变换分析,其调用格式是y=fft(x,N),其中,x是序列,y是序列的FFT变换结果,N为整数,代表做N点的FFT,若x为向量且长度小于N,则函数将x补零至长度N;若向量x长度大于N,则截断x使之长度为N。

N= length(y1); f1= (0:N-1)*fs/N; y2 = fft (y1,N); plot( f1, abs(y2) ); axis([-1000 5000 0 3000]); title( '原语音信号频域波形图' ); xlabel('单位');ylabel('幅度');

在这里插入图片描述

原始语音信号的频率基本上集中在5kHz以内。其中原始语音信号FFT频谱和原始语音信号频谱的区别是:前者是频率为1递增的频谱,而后者是以f1= (0:N-1)*fs/N递增,后者是在"不小于原始信号的频率(采样定理)"上完全展开的频谱。

3.设计滤波器和画出频率响应 根据语音信号的特点给出有关滤波器的新能指标: ① 低通滤波器的性能指标:fp=1000Hz,fc=1200Hz,As=100dB,Ap=1dB;

  低通数字滤波器的设计采用二次映射的方法,就是先将整个s平面压缩到s1平面的一个 的横形条带范围内,然后再将这个条带映射到z平面上,就能建立s平面到z平面的一一对应关系。映射关系为 ,其中T为抽样周期。

Fp=1000;Fs=1200;Ft=8000;As=100;Ap=1; wp=2*pi*Fp/Ft;ws=2*pi*Fs/Ft; [n,wn]=ellipord(wp,ws,Ap,As,'s'); [b,a]=ellip(n,Ap,As,wn,'s'); [B,A]=bilinear(b,a,1); [h,w]=freqz(B,A); figure(2); plot(w*Ft/pi/2,abs(h)); title('低通滤波器'); xlabel('频率'); ylabel('幅度');

在这里插入图片描述 ② 高通滤波器的性能指标:fp=4500Hz,fc=5000Hz,As=100dB,Ap=1dB;   双线性变换法获得的数字滤波器频率响应特性中不会出现混叠现象,因此可以适用于高通和带通滤波器的设计。IIR数字滤波器的设计通常要借助于模拟低通滤波器的设计,由原型低通滤波器到其他形式IIR数字滤波器的频带变换有模拟频带变换法和数字频带变换法。

Fp=4500;Fs=5000; As=100;Ap=1; wp=2*pi*Fp/Ft; ws=2*pi*Fs/Ft; [n,wn]=ellipord(wp,ws,Ap,As,'s'); [b,a]=ellip(n,Ap,As,wn,'high','s'); [B,A]=bilinear(b,a,1); [h,w]=freqz(B,A); figure(4); plot(w*Ft/pi/2,abs(h)); title('高通滤波器'); xlabel('频率'); ylabel('幅度');

在这里插入图片描述 ③ 带通滤波器的性能指标:fp1=1200Hz,fp2=3000hZ,

fc1=1000Hz,fc2=3200Hz,As=100dB,Ap=1dB; Fp1=1200;Fp2=3000;Fs1=1000;Fs2=3200; As=100; Ap=1; wp=[2*pi*Fp1/Ft,2*pi*Fp2/Ft]; ws=[2*pi*Fs1/Ft,2*pi*Fs2/Ft]; [n,wn]=ellipord(wp,ws,Ap,As,'s'); [b,a]=ellip(n,Ap,As,wn,'s'); [B,A]=bilinear(b,a,1); [h,w]=freqz(B,A); figure(6); plot(w*Ft/pi/2,abs(h)); title('带通滤波器'); xlabel('频率'); ylabel('幅度');

在这里插入图片描述 4.用滤波器对信号进行滤波 5.滤波前后语音信号的波形及频谱 (1)低通

[x,fs]=audioread('F:\MATLAB\ren.m4a'); x=x(:,1);Y=fft(x); y=filter(B,A,x);Y1=fft(y); n=0:length(x)-1;t=(0:FS-1)/fs; figure(7); subplot(3,1,1);plot(t,y);grid on; title('低通滤波器滤波后时域波形图'); xlabel('时间'); ylabel('幅度'); subplot(3,1,2);plot(n,abs(Y));grid on; title('滤波前语音信号频谱'); xlabel('频率'); ylabel('•幅度'); axis([0 1000000 0 8]); subplot(3,1,3);plot(n,abs(Y1));grid on; title('Â滤波后语音信号频谱'); xlabel('频率'); ylabel('•幅度'); axis([0 1000000 0 8]);

在这里插入图片描述 (2)高通

[x,fs]=audioread('F:\MATLAB\ren.m4a'); x=x(:,1); Y=fft(x); y=filter(B,A,x); Y1=fft(y); n=0:length(x)-1; t=(0:FS-1)/fs; figure(7); subplot(3,1,1);plot(t,y);grid on; title('¸高通滤波器滤波后语音信号时域波形'); xlabel('时间'); ylabel('幅度'); subplot(3,1,2);plot(n,abs(Y));grid on; title('滤波前语音信号频谱'); xlabel('频率'); ylabel('幅度'); axis([0 1000000 0 8]); subplot(3,1,3);plot(n,abs(Y1));grid on; title('滤波后语音信号频谱'); xlabel('频率'); ylabel('幅度'); axis([0 1000000 0 8]);

在这里插入图片描述 (3)带通

[x,fs]=audioread('F:\MATLAB\ren.m4a'); x=x(:,1); Y=fft(x); y=filter(B,A,x); Y1=fft(y); n=0:length(x)-1; t=(0:FS-1)/fs; figure(7); subplot(3,1,1);plot(t,y);grid on; title('带通滤波器滤波后语音信号时域波形'); xlabel('时间'); ylabel('¸幅度'); subplot(3,1,2);plot(n,abs(Y));grid on; title('滤波前语音信号频谱'); xlabel('频率'); ylabel('幅度'); axis([0 1000000 0 5]); subplot(3,1,3);plot(n,abs(Y1));grid on; title('滤波后语音信号频谱'); xlabel('频率'); ylabel('幅度'); axis([0 1000000 0 5]);

在这里插入图片描述

低通、高通、带通三种滤波器中,比较后发现,三种滤波器都可以有效的达到滤波效果。其中滤波效果比最好的是低通滤波器,对原始语音影响最小,其他两种滤波效果稍差一些。通过调试可以得知,在设计滤波器中,阶数N越大,滤波器结构越复杂,精度越高,滤波效果越好。

6.回放语音信号 用sound函数播放语音

sound(y1,fs);

听到了一开始Windows录制的音乐

五、实验思考

1、对原始信号作频谱分析时,画出的频谱图关于横轴对称,且成镜像分布,由于使用plot函数画图时没有使用abs(y)来取绝对值,所以频谱的幅值有正有负;而且没有设置横纵坐标轴的范围,所以横轴值过大,频谱成镜像分布。通过查阅plot函数使用格式,修改程序plot(f,abs(y)),添加坐标轴设置函数axis([x1 x2 y1 y2]);grid,解决问题。 2、设计带通滤波器时,下阻带截止频率和通带下截止频率始终会对原始信号造成影响。 调试参数时Rp、As与带阻和低通都有较大差距。将加噪后的语音信号经过带通滤波器,使滤波器滤除原始信号,留下噪声信号,再用加噪信号减去噪声信号可得到原始语音,多次调整fp1和fs1使其到最佳数值,尽量减少对原始噪声的影响。

六、实验收获与总结

通过此次实验,使我对滤波器有了更深的认识,特别是滤波器参数对滤波器性能的影响,在实验中,也遇到了些困难,例如希望可以在界面中播放滤波前后的信号,才知道不同的function是独立执行的,如果想在一个function中使用其他function中变量的值,则需要用save和load来分别保存和调用变量。也认识到matlab软件功能的强大,今后我还需更加努力完善自己,用会,用精matlab来分析解决问题,将理论联系实际,获得更大提高。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有