有一个256点数据的数组,请你用C语言编写程序,实现对这个数组FFT变换后求出模值最大的主频率,把他输出
时间: 2024-05-16 11:12:50 浏览: 5
可以使用FFTW库来进行FFT变换,然后根据模值求出最大的主频率。
以下是一个简单的示例代码:
```c
#include <stdio.h>
#include <math.h>
#include <fftw3.h>
#define N 256
int main(void) {
double data[N];
fftw_complex result[N / 2 + 1];
double max_amp = 0.0;
double max_freq = 0.0;
// 填充数据
for (int i = 0; i < N; i++) {
data[i] = sin(2 * M_PI * i / N) + 0.5 * sin(4 * M_PI * i / N);
}
// 执行FFT变换
fftw_plan plan = fftw_plan_dft_r2c_1d(N, data, result, FFTW_ESTIMATE);
fftw_execute(plan);
fftw_destroy_plan(plan);
// 计算模值并找到最大值
for (int i = 0; i <= N / 2; i++) {
double amp = sqrt(result[i][0] * result[i][0] + result[i][1] * result[i][1]);
if (amp > max_amp) {
max_amp = amp;
max_freq = i * 1.0 / N;
}
}
// 输出结果
printf("最大主频率为 %lf\n", max_freq);
return 0;
}
```
这个示例代码假设了输入数据为一个正弦波和一个带宽更窄的正弦波的叠加,然后计算了其FFT变换后的模值并找到了最大值对应的主频率。你可以根据实际情况对其中的数据和参数进行修改。