C++ fftw3实现功率谱
时间: 2023-07-11 20:22:11 浏览: 179
你可以使用fftw3库来计算信号的功率谱,以下是C++代码示例:
```
#include <iostream>
#include <fftw3.h>
using namespace std;
int main()
{
const int N = 1024; // 信号长度
fftw_complex in[N], out[N]; // 输入和输出信号
fftw_plan p; // 傅里叶变换计算计划
// 生成输入信号
for (int i = 0; i < N; i++) {
in[i][0] = sin(2 * M_PI * i / N);
in[i][1] = 0;
}
// 创建傅里叶变换计算计划
p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
// 执行傅里叶变换
fftw_execute(p);
// 计算功率谱
double power_spectrum[N];
for (int i = 0; i < N; i++) {
power_spectrum[i] = (out[i][0] * out[i][0] + out[i][1] * out[i][1]) / N;
}
// 打印功率谱
for (int i = 0; i < N; i++) {
cout << i << "\t" << power_spectrum[i] << endl;
}
// 销毁傅里叶变换计算计划
fftw_destroy_plan(p);
return 0;
}
```
此代码将生成一个1024点的正弦波信号,并使用fftw3库计算该信号的功率谱。你可以将输入信号替换为你自己的信号,并修改相关参数以满足你的需求。
阅读全文