matlab的fft 用c++怎么写
时间: 2024-03-13 09:31:35 浏览: 52
以下是一个简单的C代码示例,用于计算一个长度为N的实数序列的快速傅里叶变换(FFT):
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.14159265358979323846
void FFT(double* x, int N)
{
// 分治法递归计算FFT
if (N == 1)
{
return;
}
// 分离偶数项和奇数项
double* x_even = (double*)malloc(N/2 * sizeof(double));
double* x_odd = (double*)malloc(N/2 * sizeof(double));
for (int i = 0; i < N/2; i++)
{
x_even[i] = x[2*i];
x_odd[i] = x[2*i+1];
}
// 递归计算FFT
FFT(x_even, N/2);
FFT(x_odd, N/2);
// 合并结果
for (int k = 0; k < N/2; k++)
{
double re = x_odd[k] * cos(-2*PI*k/N) + x_even[k];
double im = x_odd[k] * sin(-2*PI*k/N);
x[k] = re;
x[k + N/2] = im;
}
// 释放内存
free(x_even);
free(x_odd);
}
int main()
{
// 定义输入序列
double x[] = {1, 2, 3, 4, 5, 6, 7, 8};
// 计算FFT
FFT(x, 8);
// 输出结果
for (int i = 0; i < 8; i++)
{
printf("%f + %fi\n", x[i], x[i+1]);
i++;
}
return 0;
}
阅读全文