100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > matlab语音处理教程 Matlab声音处理教程 / 声音处理 / 声音处理教程 / 声音处理软件...

matlab语音处理教程 Matlab声音处理教程 / 声音处理 / 声音处理教程 / 声音处理软件...

时间:2021-05-30 07:12:57

相关推荐

matlab语音处理教程 Matlab声音处理教程 / 声音处理 / 声音处理教程 / 声音处理软件...

Matlab声音处理教程 / 声音处理 / 声音处理教程

1)用mp3录音,生成文件cricket.wav,把该文件放到matlab文件夹里面(就是你打开matlab后中间顶部的地址)。

2)使用如下程序,做波形显示以及fft变换。

[y,Fs,bits]=wavread('cricket.wav');%读出信号,采样率和采样位数。

y=y(:,1);%我这里假设你的声音是双声道,我只取单声道作分析,如果你想分析另外一个声道,请改成y=y(:,2)

sigLength=length(y);

Y = fft(y,sigLength);

Pyy = Y.* conj(Y) / sigLength;%

conj函数,用于求一个复数的复共轭halflength=floor(sigLength/2); % 根据模板大小确定要扩展的边界f=Fs*(0:halflength)/sigLength;

figure;plot(f,Pyy(1:halflength+1));xlabel('Frequency(Hz)');

t=(0:sigLength-1)/Fs;

figure;plot(t,y);xlabel('Time(s)');

3)频率看频谱就有了,声音间隔看声音波形,周期看声音波形。

4)关于去噪声。

a)如果噪声是特定频率的周期噪声(periodic noise),比如说50hz,那么你可以用matlab的filter,作一个低通、高通、带通或者带阻滤波。 b)如果声音是高斯白噪声。那就用自适应滤波(adaptive filter,wiener

filter)。这里涉及到对噪声的采样、计算特征值以及决定阶数的问题。 c)幸好我们可以“耍赖”——用cool

editor。用它打开wav文件,用鼠标把一段噪声圈起来,采样,然后直接选择去噪就可以了。各大网站有介绍。

例子:matlab去除50hz噪声。 我用电脑录了一段声音,里面有50hz的周期噪声(因为受交流电干扰)。而我自己的声音频率最低是90hz。我使用了一个10阶butterworth高通滤波器,边带是70hz(介于50跟90之间)。

问题是,这不能直接用。因为声音文件的采样率是22k,70相对于22k来说太小了。所以我得先把我的声音欠采样,然后再滤波,然后再插值。程序如下。

[k,Fs,bits]=wavread('mywav.wav');

k=k(:,1);

y_temp=k(1:90000);

dfactor=3;

y=decimate(y_temp,dfactor);

[b,a] = butter(10,70/(Fs/(dfactor*2)),'high');

y=filter(b,a,y);

y=interp(y,dfactor);

sigLength=length(y);

Y = fft(y,sigLength);

Pyy = Y.* conj(Y) / sigLength;

halflength=floor(sigLength/2);

f=Fs*(0:halflength)/sigLength;

figure;plot(f,Pyy(1:halflength+1));xlabel('Frequency(Hz)');

sigLength=length(y_temp);

Y = fft(y_temp,sigLength);

Pyy = Y.* conj(Y) / sigLength;

halflength=floor(sigLength/2);

f=Fs*(0:halflength)/sigLength;

figure;plot(f,Pyy(1:halflength+1));xlabel('Frequency(Hz)');

t=(0:sigLength-1)/Fs;

figure;plot(t,y,t,y_temp);xlabel('Time(s)');

wavplay(y,Fs);

wavplay(y_temp,Fs);

5)回放:使用wavplay函数

wavplay(y,Fs);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。