fft - Kiss FFT:逆 2D 变换后跟前向变换给出错误的结果
问题描述
下面的代码对 4x4 频率数组(设置为谐波数)进行逆 2D FFT,然后对结果进行正向 FFT。缩小结果,它应该等于原始频率。其中一些确实匹配,但其中一些明显不同。我究竟做错了什么?
#include <stdio.h>
#include "kiss_fftndr.h"
// function to print FFT output
void print_freq(kiss_fft_cpx* in, int n0, int n1){
printf("\n");
for(int y = 0; y < n0; y++){
for(int x = 0; x < n1; x++){
printf(" (%f, %f) ", in[y*n1+x].r, in[y*n1+x].i);
}
printf("\n");
}
}
int main(){
int dims[2] = {4,4};
kiss_fftndr_cfg f_cfg = kiss_fftndr_alloc(dims, 2, 0, NULL, NULL);
kiss_fftndr_cfg i_cfg = kiss_fftndr_alloc(dims, 2, 1, NULL, NULL);
float signal[16];
kiss_fft_cpx freq[12];
for(int i = 0; i < 12; i++){
freq[i].r = 1.0/(i+1);
freq[i].i = 0.0;
}
printf("Before:\n");
print_freq(freq, 4, 3);
// inverse transform followed by transform
kiss_fftndri(i_cfg, freq, signal);
kiss_fftndr(f_cfg, signal, freq);
// renormalize
for(int i = 0; i < 12; i++){
freq[i].r /= 16.0;
freq[i].i /= 16.0;
}
printf("\nAfter:\n");
print_freq(freq, 4, 3);
}
输出是
Before:
(1.000000, 0.000000) (0.500000, 0.000000) (0.333333, 0.000000)
(0.250000, 0.000000) (0.200000, 0.000000) (0.166667, 0.000000)
(0.142857, 0.000000) (0.125000, 0.000000) (0.111111, 0.000000)
(0.100000, 0.000000) (0.090909, 0.000000) (0.083333, 0.000000)
After:
(1.000000, 0.000000) (0.500000, 0.000000) (0.333333, 0.000000)
(0.175000, 0.000000) (0.200000, 0.000000) (0.125000, 0.000000)
(0.142857, 0.000000) (0.125000, -0.000000) (0.111111, 0.000000)
(0.175000, 0.000000) (0.090909, 0.000000) (0.125000, 0.000000)
解决方案
推荐阅读
- css - Angular CSS 布局应用但没有结果
- node.js - 为什么在 Google Classroom API 上创建课程不起作用?
- c++ - QT 连接会自动删除吗?
- javascript - 如何删除 mapbox 地图上的方向控制?
- javascript - 相同的 Javascript 函数适用于两个不同的 div
- r - 根据 ID(闪亮)单击菜单后返回 DF 信息
- python - OpenCV 水印总是出现白色
- python - Success_url = "详细信息/int:pk"
- apify - 如何链接两个 Apify 刮板?
- amazon-web-services - 在 terraform 名称标签中分配变量