【发布时间】: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