Octave 倍频程谱图生成两个不同的答案

Octave 倍频程谱图生成两个不同的答案,octave,audio-processing,spectrogram,Octave,Audio Processing,Spectrogram,我有一个项目,我必须从音频文件中识别频率。为此,我使用10千赫的单音,看看我是否可以让它工作。 因为我对八度音阶相当陌生,所以我尝试使用自己的音频文件。 我试图通过对所有函数进行一些研究来了解发生了什么 我的问题是,;如果在未指定图形输出的情况下让specgram绘制图形: specgram(y,fftn,Fs,hanning(window),step); 它提供了一条10kHz的线路,这正是我想要的 但是如果我指定specgram函数的输出 [S,f,t]= specgram(y,fftn,

我有一个项目,我必须从音频文件中识别频率。为此,我使用10千赫的单音,看看我是否可以让它工作。 因为我对八度音阶相当陌生,所以我尝试使用自己的音频文件。 我试图通过对所有函数进行一些研究来了解发生了什么

我的问题是,;如果在未指定图形输出的情况下让specgram绘制图形:

specgram(y,fftn,Fs,hanning(window),step);
它提供了一条10kHz的线路,这正是我想要的

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

[S,f,t]= specgram(y,fftn,Fs,hanning(window),step);
让它绘图,它以18kHz的频率绘图

我想它必须在输入的数字,我试图修改这些一点,但每次我这样做,八度给出一个错误。 我需要频率作为一个给定的输出,因为我必须用它做一些计算,我想我需要指定频率输出

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

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网站上进行了尝试。还检查了此处的许多帖子,例如:


另外,很抱歉我的英语不好,这不是我的母语

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

S=绝对值(S(2:fftn*12000/Fs,:)


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

你应该至少提供一个完整的工作示例。文档中的“演示1”不适用于您?你提到一个错误。哪一个?我试过“示范1”,那一个有效。但我需要的是频率值,而不是绘图。我试图修改相位归一化的术语,删除了abs函数,这会产生错误:错误的类型参数“复杂矩阵”。如果我删除它给出的Fs项的fftn:非一致参数(op1是0x352,op2是0x1)。我想是那条线的错,也许你能告诉我那条线到底是干什么的?