短时傅里叶变换程序,帮忙解释一下~急~MATLAB

短时傅里叶变换程序,帮忙解释一下~急~MATLAB,第1张

a=wavread('jiasiqi.wav') %将音频信号jiasiqi.wav读入

subplot(2,1,1), %分配画布,一幅图上共两个图,这是第一个御姿仿

plot(a)title('original signal') %画出原始信号,即前面这个音频信号的原始波形

grid%添加网格线

N=256 %设置短时傅里叶变换的长度,同镇纤时也是汉明窗的长度

h=hamming(N) %设册档置汉明窗

for m=1:N %用汉明窗截取信号,长度为N,主要是为了减少截断引起的栅栏效应等

b(m)=a(m)*h(m)

end

y=20*log(abs(fft(b))) %做傅里叶变换,取其模值,即幅频特性,然后用分贝(dB)表示

subplot(2,1,2) %分配画布,第二副图

plot(y)title('短时谱') %画出短时谱

grid%添加网格线

if (xrow ~= 1)

x = x'

else

x= x

end

你在这里把x变档戚成行向量;可是在下面语句里贺知又行拍陵按照列向量给第一下标赋值,

tfr(indices,icol)=x(round(ti+tau),1).*conj(h(round(Lh+1+tau)))

这样就造成了向量下标超出。改成这样试试:

tfr(indices,icol)=x(1,round(ti+tau)).*conj(h(round(Lh+1+tau)))

matlab自带了短时傅里叶变换的分析函数,也即spectrogram函数。

其使用方式有两种

1. [S,F,T,P]=spectrogram(x,window,noverlap,nfft,fs)

2. [S,F,T,P]=spectrogram(x,window,noverlap,F,fs)

x---输入信巧睁大号的向量;Window---窗函数;Noverlap---各段之间重叠的采样孝竖点数;Nfft---计算离散傅里叶变换的点数;Fs---采样频率Hz;早清F---在输入变量中使用F频率向量。

对应题主的问题

假设语音信号保存在wave变量中,那么,对其做短时傅里叶变换的函数语句为

[S,F,T,P]=spectrogram(wave,window,noverlap,nfft,fs)

参数可以根据具体信号的特点进行设定。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12351628.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存