如何在不使用预定义功能的情况下绘制声音文件的频谱图?

时间:2014-03-08 08:55:19

标签: matlab audio voice speech

如何在不使用预定义功能的情况下绘制WAV文件的频谱图?我的意思是我不想使用FFT或频谱图功能。

我想要接管整个信号的窗户应该是大小为256且重叠50%的汉明窗户。

你能给我一些建议吗?

最好的问候。

我为DFT尝试了以下代码。但是我得到了错误:     ???使用==>时出错时间矩阵维度必须一致。

代码:

 n=256;
 wholeFile=wavread('C:\Users\alireza\Desktop\alireza bahrami\New folder\Sound clip     32.wav');

for ii = 1:4096
waveform = wholeFile(128*ii + (1:256)); % a bit of background noise...

alpha = 0.54; beta = 1 - alpha; % hamming coefficients
hwin = alpha - beta * cos(2 * pi * (1:n) / (n - 1)); % from http://en.wikipedia.org    /wiki/Window_function#Hamming_window
fSample = 8192; % sampling frequency

t = (0.5:1:n) / fSample; % actual time


waveformHW = waveform .* hwin; % the windowed form of the waveform

frequencies = (0:(n/2)-1) * fSample / n;
myFFT = zeros(size(frequencies));
for fi = 1:n/2
c = cos(2*pi*frequencies(fi) * t);
s = sin(2*pi*frequencies(fi) * t);
myFFT(fi) = (sum(c .* waveformHW) + 1i * sum(s .* waveformHW))/sum(c.*c.*hwin);
end
end
figure; semilogy(frequencies, abs(myFFT))
xlim([0 1000])
xlabel 'frequency'
ylabel 'amplitude'
title 'two tones plus noise'

1 个答案:

答案 0 :(得分:0)

为了我的例子,你的t向量必须是一个列向量,改变这一行

t = (0.5:1:n) / fSample; % actual time

t = (0.5:1:n)' / fSample; % actual time

您可以使用回归来获得正弦和余弦分量的幅度。删除代码的这一行:

myFFT(fi) = (sum(c .* waveformHW) + 1i * sum(s .* waveformHW))/sum(c.*c.*hwin);

将其替换为

b = regress(waveformHW, [c, s]; % c and s must be column vectors
myFFT(fi) = b(1) + 1i * b(2);