-
Notifications
You must be signed in to change notification settings - Fork 24
/
dft.js
42 lines (36 loc) · 1.43 KB
/
dft.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*===========================================================================*\
* Discrete Fourier Transform (O(n^2) brute-force method)
*
* (c) Vail Systems. Joshua Jung and Ben Bryan. 2015
*
* This code is not designed to be highly optimized but as an educational
* tool to understand the Fast Fourier Transform.
\*===========================================================================*/
//------------------------------------------------
// Note: this code is not optimized and is
// primarily designed as an educational and testing
// tool.
//------------------------------------------------
var complex = require('./complex');
var fftUtil = require('./fftutil');
//-------------------------------------------------
// Calculate brute-force O(n^2) DFT for vector.
//-------------------------------------------------
var dft = function(vector) {
var X = [],
N = vector.length;
for (var k = 0; k < N; k++) {
X[k] = [0, 0]; //Initialize to a 0-valued complex number.
for (var i = 0; i < N; i++) {
var exp = fftUtil.exponent(k * i, N);
var term;
if (Array.isArray(vector[i]))
term = complex.multiply(vector[i], exp)//If input vector contains complex numbers
else
term = complex.multiply([vector[i], 0], exp);//Complex mult of the signal with the exponential term.
X[k] = complex.add(X[k], term); //Complex summation of X[k] and exponential
}
}
return X;
};
module.exports = dft;