【kissfft】使用kiss_fftr做FFT与iFFT

类似与kiss_fft的调用,本章具体使用kiss_fftr接口做FFT与iFFT的使用

代码举例


static kiss_fft_scalar rand_scalar(void) {
    kiss_fft_scalar s = (kiss_fft_scalar) ((rand() + 10) % 256);
    return s / 256.;
}

static void print_fft_result(kiss_fft_cpx *x, int n) {
    int l = 0;
    for (int i = 0; i < n; i++) {
        printf("(%4.4f+%4.4fi), ", x[i].r, x[i].i);
        if (l++ == 7) {
            l = 0;
            printf("\n");
        }
    }
    printf("\n");
}

void test_fftr() {
    int i = 0;
    int nfft = 20;
    kiss_fftr_cfg kiss_fftr_state;

    kiss_fft_scalar rin[nfft];
    kiss_fft_scalar rout[nfft];
    kiss_fft_cpx out[nfft];
    memset(rin, 0, sizeof(short) * nfft);
    memset(rout, 0, sizeof(short) * nfft);
    memset(out, 0, sizeof(kiss_fft_cpx) * nfft);
    kiss_fft_scalar zero;
    memset(&zero, 0, sizeof(zero));

    for (i = 0; i < nfft; ++i) {
        rin[i] = rand_scalar();
    }

    printf(" init data for kiss_fft (rin): \n");
    for (i = 0; i < nfft; i++) {
        printf("%4.4f,", rin[i]);
    }
    printf("\n");


    kiss_fftr_state = kiss_fftr_alloc(nfft, 0, 0, 0);

    kiss_fftr(kiss_fftr_state, rin, out);
    kiss_fftr_free(kiss_fftr_state);

    printf(" results from kiss_fft (out): \n");
    print_fft_result(out, nfft);

    kiss_fftr_state = kiss_fftr_alloc(nfft, 1, 0, 0);

    for (i = 0; i < nfft; i++) {
        out[i].r /= nfft;
        out[i].i /= nfft;
    }
    // case A.
    kiss_fftri(kiss_fftr_state, out, rout);

    // end case
    kiss_fftr_free(kiss_fftr_state);


    printf(" results from kiss_ifft (rout): \n");
    for (i = 0; i < nfft; i++) {
        printf("%4.4f,", rout[i]);
    }
    printf("\n");
}

int main(int argc, char *const argv[]) {

    test_fftr();

    return 0;
}

运行结果

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值