精简的fft源码
void fft(const double* src_x, const double* src_y, double* dst_x, double* dst_y, int k) {int i, n;
double temp, temp_x, temp_y;
double* buffer;
if (0 == k) {
*dst_x = *src_x;
*dst_y = *src_y;
return;
}
n = 1 << (k - 1);
buffer = (double*)malloc(4 * n * sizeof(double));
for (i = 0; i < n; i++) {
buffer = src_x;
buffer = src_y;
buffer = src_x;
buffer = src_y;
}
fft((const double*)buffer + 2 * n, (const double*)buffer + 3 * n, dst_x, dst_y, k - 1);
fft((const double*)buffer, (const double*)buffer + n, (double*)buffer + 2 * n, (double*)buffer + 3 * n, k - 1);
for (i = 0; i < n; i++) {
temp = i * M_PI / n;
temp_x = cos(temp);
temp_y = sin(temp);
buffer = dst_y * temp_y + dst_x * temp_x;
buffer = dst_y * temp_x - dst_x * temp_y;
dst_x = buffer + buffer;
dst_y = buffer + buffer;
dst_x = buffer - buffer;
dst_y = buffer - buffer;
}
free(buffer);
}
参数说明:
const double* src_x, 输入数据实部的指针
const double* src_y, 输入数据虚部的指针
double* dst_x, 输出数据实部的指针
double* dst_y, 输出数据虚部的指针
int k, FFT点数,比如1024点,k=10,4096点,k=12 由于使用了malloc和free函数,单片机上慎用!除非你自实现malloc和free函数功能 大神也跑过来了 看不懂也先顶一下 xad1974 发表于 2020-5-20 07:54
大神也跑过来了
受疫情影响,没钱吃饭,只好去食堂蹭不花钱的紫菜蛋汤嘛 好,收藏了 您就是那个数学大牛!
:handshake cool
页:
[1]