linux的c写傅里叶变化
Linux的C语言实现傅里叶变换的代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.14159265358979323846
void dft(double *x_re, double *x_im, double *y_re, double *y_im, int N) {
int k, n;
double w_re, w_im, s_re, s_im;
for (k = 0; k < N; k++) {
s_re = 0.0;
s_im = 0.0;
for (n = 0; n < N; n++) {
w_re = cos(2 * PI * n * k / N);
w_im = -sin(2 * PI * n * k / N);
s_re += x_re[n] * w_re - x_im[n] * w_im;
s_im += x_re[n] * w_im + x_im[n] * w_re;
}
y_re[k] = s_re;
y_im[k] = s_im;
}
}
int main() {
int N, k;
double *x_re, *x_im, *y_re, *y_im;
printf("Enter the number of samples: ");
scanf("%d", &N);
x_re = (double *) malloc(N * sizeof(double));
x_im = (double *) malloc(N * sizeof(double));
y_re = (double *) malloc(N * sizeof(double));
y_im = (double *) malloc(N * sizeof(double));
printf("Enter the samples:\n");
for (k = 0; k < N; k++) {
scanf("%lf", &x_re[k]);
x_im[k] = 0.0;
}
dft(x_re, x_im, y_re, y_im, N);
printf("The DFT result is:\n");
for (k = 0; k < N; k++) {
printf("%d: %lf + %lfi\n", k, y_re[k], y_im[k]);
}
free(x_re);
free(x_im);
free(y_re);
free(y_im);
return 0;
}
该程序通过输入采样点的数量和采样值,计算出其傅里叶变换的结果。其中,dft函数是计算离散傅里叶变换的核心函数。程序使用了动态内存分配和释放,以保证程序的灵活性和效率
原文地址: https://www.cveoy.top/t/topic/hra1 著作权归作者所有。请勿转载和采集!