从 FFT 样本计算频率?

Calculate frequency from FFT sample?

我在 Unreal Engine 4 中使用以下代码来捕获麦克风输入并获得最终的 FFT。

我无法根据此数据计算频率。

我试过找出最大幅度并将其作为频率,但这似乎不正确。

// Additional includes:
#include "Voice.h"
#include "OnlineSubsystemUtils.h"

// New class member:
TSharedPtr<class IVoiceCapture> voiceCapture;

// Initialisation:
voiceCapture = FVoiceModule::Get().CreateVoiceCapture();
voiceCapture->Start();

// Capturing samples:
uint32 bytesAvailable = 0;
EVoiceCaptureState::Type captureState = voiceCapture->GetCaptureState(bytesAvailable);
if (captureState == EVoiceCaptureState::Ok && bytesAvailable > 0)
{
    uint8 buf[maxBytes];
    memset(buf, 0, maxBytes);
    uint32 readBytes = 0;
    voiceCapture->GetVoiceData(buf, maxBytes, readBytes);

    uint32 samples = readBytes / 2;
    float* sampleBuf = new float[samples];

    int16_t sample;
    for (uint32 i = 0; i < samples; i++)
    {
        sample = (buf[i * 2 + 1] << 8) | buf[i * 2];
        sampleBuf[i] = float(sample) / 32768.0f;
    }

    // Do fun stuff here

    delete[] sampleBuf;
}

我没有看到要在您的代码片段中执行傅里叶变换。无论如何,使用给定 N 样本的 DFT 以平均采样频率 R 进行采样,频率对应于 bin kk·R/2N