matlab对语音信号采样频率怎么改变

 我来答
花果山小猴zx
2016-05-14 · TA获得超过257个赞
知道小有建树答主
回答量:319
采纳率:0%
帮助的人:204万
展开全部
(1)做波形显示以及fft变换,程序如下:

[y,fs]=wavread('E:\MATLAB6p5\work\3.wav');%读出信号,采样率
y=y(:,1);%取单声道。
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)'); %画频域波形

t=(0:sigLength-1)/Fs;
figure;plot(t,y);xlabel('Time(s)'); %画时域波形

(2)关于滤波
声音频率主要集中在0~1KHZ,我想虑掉500hz以下的频率,因此采用一个高通滤波器
这里我使用了一个10阶butterworth高通滤波器,边带是500hz,但是这不能直接用,因为声音文件的采样率是44k,500hz相对于44k来说太小了。所以我得先把我的声音欠采样,然后再滤波。程序如下:
[k,Fs,bits]=wavread('E:\MATLAB6p5\work\3.wav');
k=k(:,1);
y_temp=k(1:90000);

dfactor=3;
y=decimate(y_temp,dfactor);
[b,a] = butter(10,500/(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)'); %滤波后的频域波形

t=(0:sigLength-1)/Fs;
figure;plot(t,y,t,y_temp);xlabel('Time(s)'); %滤波后的时域波形

wavwrite(y,Fs,'3_'); %保存处理后的声音文件,文件名为”3_”.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式