Octave specgram产生两个不同的答案

时间:2015-02-27 16:14:35

标签: octave audio-processing spectrogram

我有一个项目,我必须从音频文件中识别频率。为此,我使用10 kHz的单音来查看是否可以使其正常工作。 由于我是Octave的新手,我尝试使用自己的音频文件this example。 我尝试通过对所有功能进行一些研究来了解会发生什么。

我的问题是;当我没有指定它的输出时,如果我让specgram绘制该图:

specgram(y,fftn,Fs,hanning(window),step);

它给出了一条10kHz的线,这就是我想要的。

但是如果我指定了specgram函数的输出

[S,f,t]= specgram(y,fftn,Fs,hanning(window),step);

让它绘制,它绘制18 kHz的线。

我认为它必须在图的输入中,我尝试修改这些,但每次我这样做Octave都会出错。 我需要频率作为给定输出,因为我必须用它做一些计算,我想我需要指定频率输出。

这是代码中指定光谱图的部分:

step= fix(5*Fs/1000);           % stepsize of the window
window= fix(90*Fs/1000);        % window size 
fftn =2^nextpow2(window);       % Size of the FFT block

[S,f,t]= specgram(y,fftn,Fs,hanning(window),step); 

S= abs(S(2:fftn*12000/Fs,:));   % Normalize the phase
S= S/max(S(:));                 % Normalize the Energy
S= max(S, 10^(-40/10));         % Throw out values below -40 dB and above -3dB
S= min(S, 10^(-3/10));      
figure
imagesc(t,f,(log(S)));

有人可以帮我这里如何从音频文件中获取频率数据,以便我可以在某些计算中使用它吗?

我已经在Octave手册中搜索了答案以寻求帮助,我尝试了各种matlab网站。此处还检查过很多帖子,例如:

How does Octave spectrogram 'specgram' from signal work?

Methodology of FFT for Matlab spectrogram / short time Fourier transform functions

P.S。抱歉我的英语不好,不是我的母语

1 个答案:

答案 0 :(得分:0)

我自己找到了答案,事实证明它出现在这行代码中:

S = abs(S(2:fftn * 12000 / Fs,:));

如果我删除此行,则行放在图中的右侧频率上。对我来说,看起来这条线只占用了fft的一小部分空间并用其他频率取而代之,但我对此并不感到害羞。