基于MATLAB函数的音频信号处理
2020-10-30余培邓世国刘华珠张志
余培 邓世国 刘华珠 张志
摘 要:文章介绍了用MATLAB软件的几个函数来处理音频信号的基本流程。
关键词:MATLAB;数字信号处理;音频信号;wavread;resample
正文:
一、引言
语音信号是基于时间轴上的一维数字信号,本文主要是对语音信号进行频域上的分析。在信号分析中,频域往往包含了更多的信息。对于频域来说,我们都可以用一种方法来分析,就是傅立叶变换:将时域的波形转化到频域来分析。
本文就从频域的角度对信号进行分析,并利用MATLAB函数进行重采样,MATLAB软件在数字信号处理上发挥了相当大的优势。
二、设计方案
1、利用MATLAB中的wavread命令来读入(采集)语音信号,将它赋值给某一向量。再将该向量看作一个普通的信号,对其进行FFT变换实现频谱分析,对于波形图与频谱图都可以用 MATLAB画出。
2、我们可以利用resample函数改变语音信号的采样率,并可以通过sound命令来对语音信号进行回放,以便在听觉上来感受声音的变化。
3、利用MATLAB中的wavwrite命令
这个方案用到的软件MATLAB语句。
三、主体部分
(一)、语音的录入与打开
A、设计内容、
用matlab对实际声卡采集的男声语音信号(‘ns.wav)和女声语音信号(‘nvs.wav进行分析,比较基音的频率有何区别.
程序如下:
[s2,fs2,nbits2]=wavread('nvs');
f2=fft(s2);
f=(0:length(f2)-1)'*fs2/length(f2);
figure(1);plot(f,abs(f2));axis([0,3000,0,1400]);
xlabel('Hz');title('女声频谱');
[s1,fs1,nbits1]=wavread('ns');
f1=fft(s1,50000);
f=(0:length(f1)-1)'*fs1/length(f1);
figure(2);plot(f,abs(f1));axis([0,3000,0,2500]);
xlabel('Hz');title('男声频谱');
结果如图:
B、结论
由图可知,女声频谱的最高峰出现在700Hz左右,频带宽度在1500Hz左右。而男声频谱的最高峰出现在400Hz左右,频带宽度在1000Hz左右。因此女声的基音频率要比男声的基音频率要高。
(二)、用resample函数进行重采样、
A、分析
resample函数可以改变语音信号的采样率,s=resample(s1,fs,fs1),即可將采样率为s1的fs1信号变成采样率为fs的s信号,而信号的大致形状不变。
B、设计内容
对一段采样率为fs2=44100Hz的女声语音‘nvs.wav进行分析,将采样率分别变为10000Hz,5000Hz,1000Hz,画出波形图,和原信号做比较。
程序如下:
[s2,fs2,nbits2]=wavread('nvs');
subplot(2,2,1);plot(s2);
title('fs=44000');
fs=10000;
s=resample(s2,fs,fs2);
subplot(2,2,2);plot(s);
title('fs=10000');
fs=5000;
s=resample(s2,fs,fs2);
subplot(2,2,3);plot(s);
title('fs=5000');
fs=1000;
s=resample(s2,fs,fs2);
subplot(2,2,4);plot(s);
title('fs=1000');
结果如图:
C、结论
因为由上组实验可知女声语音‘nvs.wav的带宽约为1500Hz。可见,当采样率fs为10000Hz,5000Hz时,采样率大于带宽的两倍,此时,采样率减小导致信号采集的样点数就越少,波形图也越稀松,但大致的形状不变。但是,如果采样率过于低,如fs=1000Hz时,采样率低于带宽的两倍,则波形图发生较大的失真。
结束语
语音看作了一个向量,于是语音数字化了,则可以完全利用数字信号处理的知识来解决。我们可以像给一般信号做频谱分析一样,来给语音信号做频谱分析。
广东省省级科技计划 2014B090911001