簡體   English   中英

OS X環境中的音頻文件FFT

[英]Audio File FFT in an OS X environment

我想在OS X上對線性PCM音頻文件(可能有多個音頻通道)執行FFT。最好的方法是什么?

一些消息來源表明,Apple的Accelerate Framework正是我所需要的。 如果是這樣,我應該如何提取並正確准備浮點數據以用於那些FFT函數?

這大致是你想要做的。 填寫您自己的輸入和輸出功能。

    // Stick new data into inData, a (float*) array
    fetchFreshData(inData); 

    // (You might want to window the signal here... )
    doSomeWindowing(inData);

    // Convert the data into a DSPSplitComplex 
    // Pardon the C++ here. Also, you should pre-allocate this, and NOT
    // make a fresh one each time you do an FFT. 
    mComplexData = new DSPSplitComplex;
    float *realpart = (float *)calloc(mNumFrequencies, sizeof(float));
    float *imagpart = (float *)calloc(mNumFrequencies, sizeof(float));
    mComplexData->realp = realpart;
    mComplexData->imagp = imagpart;

    vDSP_ctoz((DSPComplex *)inData, 2, mComplexData, 1, mNumFrequencies);

    // Calculate the FFT
    // ( I'm assuming here you've already called vDSP_create_fftsetup() )
    vDSP_fft_zrip(mFFTSetup, mComplexData, 1, log2f(mNumFrequencies), FFT_FORWARD);

    // Don't need that frequency
    mComplexData->imagp[0] = 0.0;

    // Scale the data
    float scale = (float) 1.0 / (2 * (float)mSignalLength);
    vDSP_vsmul(mComplexData->realp, 1, &scale, mComplexData->realp, 1, mNumFrequencies);
    vDSP_vsmul(mComplexData->imagp, 1, &scale, mComplexData->imagp, 1, mNumFrequencies);

    // Convert the complex data into something usable
    // spectrumData is also a (float*) of size mNumFrequencies
    vDSP_zvabs(mComplexData, 1, spectrumData, 1, mNumFrequencies);

    // All done!
    doSomethingWithYourSpectrumData(spectrumData);

希望有所幫助。

對音頻數據進行FFT時,樣本應進入實部,虛部應為零。

大多數FFT庫,包括Apple的vDSP,都包含一種稱為“實數FFT”的方法,其中輸入是實數(沒有虛數組件),輸出很復雜。

在我看來,你應該研究Core Audio ...我對它不是很熟悉,但它看起來應該已經為你進行了頻道解交織,並且它直接與PCM數據一起工作。 由於我的熟悉程度低,所以考慮到這一點,但我嘗試將FFT放入音頻單元,將單個PCM數據通道作為輸入,將FFT的結果存儲在可訪問的位置,然后傳遞輸入直到輸出。

就實際執行FFT而言,對我而言,主要的挑戰似乎是將PCM輸入強制轉換為FFT例程想要操作的雙*向量。 通過vDSP.h(加速框架的一部分),我看到像vDSP_vflt16D這樣的函數(將16位整數的向量轉換為雙精度實數的向量),看起來它可以解決你的問題。

核心音頻介紹

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM