簡體   English   中英

使用kiss_fft將復雜頻率轉換為真實信號

[英]Complex frequencies to real signal transform with kiss_fft

我正在嘗試對我的復雜信號進行 FFT,輸出應該是真實的。 所以我做了這個代碼

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "lib\kiss_fftr.c"

int N = 16;

void TestFftReal(const char* title, const kiss_fft_cpx  in[N/2+1], kiss_fft_scalar out[N/2+1])
{
    kiss_fftr_cfg cfg = kiss_fftr_alloc(N, 1/*is_inverse_fft*/, NULL, NULL);

    printf("%s\n", title);

    if (cfg != NULL)
    {
        size_t i;

        kiss_fftr(cfg, in, out);
        free(cfg);

        for (i = 0; i < N; i++)
        {
            printf("out[%2zu] = %+f ", i, out[i]);
            if (i < N/2+1 )
            {
                printf(" in[%2zu] = %+f, %+f  ", i, in[i].r, in[i].i);
            }
            printf("\n");
        }
    }
}
int main(void)
{
    kiss_fft_cpx In[N/2+1];
    kiss_fft_scalar Out[N];
    size_t i;

    for (i = 0; i < N; i++)
    {
        In[i].r = In[i].i = 0;
    }
    TestFftReal("Zeroes (real)", In, Out);

    for (i = 0; i < N; i++)
    {
        In[i].r = 1, In[i].i = 0;
    }
    TestFftReal("Ones (real)", In, Out);

    for (i = 0; i < N; i++)
    {
        In[i].r = sin(45 * i * (M_PI / 180)), In[i].i =0;
    }
    TestFftReal("SineWave (real)", In, Out);

    return 0;
}

但是現在我遇到了kiss_fftr() 函數的問題。 我應該使用kiss_fft() 嗎? 該錯誤表明 in 或 out 類型不正確,但在 Git-Hub 上它說應該這樣做。 https://github.com/berndporr/kiss-fft

至少這個問題:

代碼嘗試在 3 個不同的循環中分配In[]范圍之外

kiss_fft_cpx In[N/2+1];
...
for (i = 0; i < N; i++)
{
    In[i].r = In[i].i = 0;
}

推薦替代品:

for (i = 0; i < (N/2+1); i++)

如果kiss_fftr(cfg, in, out);

void kiss_fftr(kiss_fftr_cfg st,const kiss_fft_scalar *timedata,kiss_fft_cpx *freqdata)

...然后該函數將從kiss_fft_scalar變為kiss_fft_cpx OP 的代碼正好相反。

 TestFftReal( ... const kiss_fft_cpx  in[N/2+1], kiss_fft_scalar out[N/2+1]) {
    kiss_fftr(cfg, in, out);

也許OP想要kiss_fftri()而不是kiss_fftr()

void kiss_fftri(kiss_fftr_cfg st,const kiss_fft_cpx *freqdata,kiss_fft_scalar *timedata)

暫無
暫無

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

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