我有一个FFT结果.它们存储在两个double数组中:实部数组和虚部数组.如何确定与这些阵列中每个元素对应的频率?
换句话说,我想创建一个存储FFT的每个实部和虚部的频率的数组.
有没有人用过Apple FFTiPhone应用程序或知道我在哪里可以找到一个如何使用它的示例应用程序?我知道Apple发布了一些示例代码,但我不确定如何将它实现到实际项目中.
我已经为iPhone 实施了Demetri的Pitch Detector项目,并遇到了两个问题.1)任何类型的背景噪声发送频率读取香蕉和2)较低频率的声音没有正确调整.我试着调整我的吉他,而更高的琴弦工作 - 调谐器无法正确辨别低音.
音高检测代码位于RIOInterface.mm中,就像这样......
// get the data
AudioUnitRender(...);
// convert int16 to float
Convert(...);
// divide the signal into even-odd configuration
vDSP_ctoz((COMPLEX*)outputBuffer, 2, &A, 1, nOver2);
// apply the fft
vDSP_fft_zrip(fftSetup, &A, stride, log2n, FFT_FORWARD);
// convert split real form to split vector
vDSP_ztoc(&A, 1, (COMPLEX *)outputBuffer, 2, nOver2);
Run Code Online (Sandbox Code Playgroud)
然后Demetri继续确定"主导"频率如下:
float dominantFrequency = 0;
int bin = -1;
for (int i=0; i<n; i+=2) {
float curFreq = MagnitudeSquared(outputBuffer[i], outputBuffer[i+1]);
if (curFreq > dominantFrequency) {
dominantFrequency …Run Code Online (Sandbox Code Playgroud) iphone signal-processing fft pitch-tracking accelerate-framework
我想要检测的不是音高,而是发出唱音的音高等级.
因此,无论是C4还是C5都不重要:它们必须都被检测为C.
想象一下,12个半音安排在钟面上,针指向音高等级.这就是我追求的!理想情况下,我希望能够分辨出唱歌音符是点亮还是稍微偏离.
这与先前提出的问题不重复,因为它引入了以下约束条件:
声源是一个人的声音,希望背景干扰可以忽略不计(虽然我可能需要处理这个问题)
八度音阶并不重要,只有音高等级
编辑 - 链接:
实时音高检测
使用Apple FFT和加速框架