从FFT样品中计算频率

Calculate frequency from FFT sample?

本文关键字:计算 频率 FFT      更新时间:2023-10-16

我正在使用虚幻引擎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;
}

我看不到代码段中要执行的傅立叶变换。无论如何,使用平均采样频率 r 给定的DFT n 样品,对应于bin k is k·的频率r/2n