【问题标题】:Octave specgram generates two diffent answers八度谱图生成两个不同的答案
【发布时间】:2015-02-27 16:14:34
【问题描述】:

我有一个项目,我必须从音频文件中识别频率。为此,我使用 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

附:对不起我的英语不好,这不是我的母语

【问题讨论】:

  • 您应该提供一个最低限度的完整工作示例。文档中的“演示 1”对您不起作用?你提到一个错误。哪一个?
  • 我尝试了“演示 1”,并且那个有效。但我需要频率的值,而不是情节。
  • 我尝试修改相位归一化的术语,我删除了 abs 函数,它给出了错误:错误类型参数“复矩阵”。如果我删除它给出的 Fs 术语的 fftn:不一致的参数(op1 是 0x352,op2 是 0x1)。我认为问题出在那条线,也许你能告诉我那条线到底是做什么的?

标签: octave audio-processing spectrogram


【解决方案1】:

我自己找到了答案,原来是在这行代码中:

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

如果我删除这条线,这些线将放置在图中的正确频率上。在我看来,这条线只占用了 fft 的一小部分空间,并用其他频率替换了它,但我对此并不担心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    相关资源
    最近更新 更多