如何在不使用预定义功能的情况下绘制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'
答案 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);