Skip to content

Commit 93aeb4f

Browse files
committed
Making a fft header file for convolutions.c
1 parent a8810c3 commit 93aeb4f

File tree

2 files changed

+45
-43
lines changed

2 files changed

+45
-43
lines changed

chapters/convolutions/code/c/convolutions.c

Lines changed: 4 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,9 @@
1-
#include <stdio.h>
2-
#include <complex.h>
3-
4-
// This section is not a part of the algorithm
5-
6-
#include <math.h>
1+
#include "fft.h"
72

8-
void fft(double complex *X, size_t N) {
9-
if (N >= 2) {
10-
double complex tmp [N / 2];
11-
for (size_t i = 0; i < N / 2; ++i) {
12-
tmp[i] = X[2 * i + 1];
13-
X[i] = X[2 * i];
14-
}
15-
16-
for (size_t i = 0; i < N / 2; ++i) {
17-
X[i + N / 2] = tmp[i];
18-
}
19-
20-
fft(X, N / 2);
21-
fft(X + N / 2, N / 2);
22-
23-
for (size_t i = 0; i < N / 2; ++i) {
24-
X[i + N/2] = X[i] - cexp(-2.0 * I * M_PI * i / N) * X[i + N / 2];
25-
X[i] -= (X[i + N / 2] - X[i]);
26-
}
27-
}
28-
}
29-
30-
void ifft(double complex *x, size_t n) {
31-
for (size_t i = 0; i < n; ++i) {
32-
x[i] = conj(x[i]);
33-
}
34-
35-
fft(x, n);
36-
37-
for (size_t i = 0; i < n; ++i) {
38-
x[i] = conj(x[i]) / n;
39-
}
40-
}
41-
42-
// This section is a part of the algorithm
3+
#include <stdio.h>
434

445
void conv(double complex *signal1, double complex *signal2, double complex* out,
45-
size_t n1, size_t n2) {
6+
size_t n1, size_t n2) {
467
double complex sum = 0;
478

489
for (size_t i = 0; i < (n1 < n2? n2 : n1); ++i) {
@@ -57,7 +18,7 @@ void conv(double complex *signal1, double complex *signal2, double complex* out,
5718
}
5819

5920
void conv_fft(double complex *signal1, double complex *signal2,
60-
double complex* out, size_t n) {
21+
double complex* out, size_t n) {
6122
fft(signal1, n);
6223
fft(signal2, n);
6324

chapters/convolutions/code/c/fft.h

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#ifndef FFT_H
2+
#define FFT_H
3+
4+
#include <complex.h>
5+
#include <math.h>
6+
7+
void fft(double complex *X, size_t N) {
8+
if (N >= 2) {
9+
double complex tmp [N / 2];
10+
for (size_t i = 0; i < N / 2; ++i) {
11+
tmp[i] = X[2 * i + 1];
12+
X[i] = X[2 * i];
13+
}
14+
15+
for (size_t i = 0; i < N / 2; ++i) {
16+
X[i + N / 2] = tmp[i];
17+
}
18+
19+
fft(X, N / 2);
20+
fft(X + N / 2, N / 2);
21+
22+
for (size_t i = 0; i < N / 2; ++i) {
23+
X[i + N/2] = X[i] - cexp(-2.0 * I * M_PI * i / N) * X[i + N / 2];
24+
X[i] -= (X[i + N / 2] - X[i]);
25+
}
26+
}
27+
}
28+
29+
void ifft(double complex *x, size_t n) {
30+
for (size_t i = 0; i < n; ++i) {
31+
x[i] = conj(x[i]);
32+
}
33+
34+
fft(x, n);
35+
36+
for (size_t i = 0; i < n; ++i) {
37+
x[i] = conj(x[i]) / n;
38+
}
39+
}
40+
41+
#endif //FFT_H

0 commit comments

Comments
 (0)