C语言实现 时频图转时域图
时间: 2024-02-02 12:03:29 浏览: 35
在C语言中,可以使用FFTW库来实现傅里叶变换和反傅里叶变换。以下是一个简单的示例代码,将一个长度为N的实数数组进行FFT变换,然后进行IFFT变换得到时域信号:
```c
#include <stdio.h>
#include <math.h>
#include <fftw3.h>
#define N 100 // 信号长度
int main()
{
double signal[N]; // 实数信号
fftw_complex freq[N]; // 复数频域信号
fftw_plan plan_forward, plan_backward; // FFTW变换计划
// 生成信号
for (int i = 0; i < N; i++) {
signal[i] = sin(2 * M_PI * i / N);
}
// 创建FFT变换计划
plan_forward = fftw_plan_dft_r2c_1d(N, signal, freq, FFTW_ESTIMATE);
plan_backward = fftw_plan_dft_c2r_1d(N, freq, signal, FFTW_ESTIMATE);
// 对信号进行FFT变换,得到频域信号
fftw_execute(plan_forward);
// 对频域信号进行IFFT变换,得到时域信号
fftw_execute(plan_backward);
// 输出结果
for (int i = 0; i < N; i++) {
printf("%f\n", signal[i]);
}
// 销毁变换计划
fftw_destroy_plan(plan_forward);
fftw_destroy_plan(plan_backward);
return 0;
}
```
需要注意的是,在使用FFTW库进行变换时,需要对输入信号和输出信号的长度、类型等参数进行正确的设置,否则会导致程序出错。在上述代码中,我们使用了`fftw_plan_dft_r2c_1d`函数创建了一个从实数信号到复数频域信号的变换计划,使用了`fftw_plan_dft_c2r_1d`函数创建了一个从复数频域信号到实数时域信号的变换计划。