
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)
参数可以根据具体信号的特点进行设定。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)