function DTF(samples) {
const N = samples.length;
const frequencies = [];
for (let k = 0; k < N; k++) {
const rate = -1 * (2 * Math.PI) * k;
let re = 0;
let im = 0;
for (let t = 0; t < N; t++) {
const time = t / N;
const distance = rate * time;
const re_part = samples[t] * Math.cos(distance);
const im_part = samples[t] * Math.sin(distance);
re += re_part;
im += im_part;
}
if (Math.abs(re) < 1e-10) {
re = 0;
}
if (Math.abs(im) < 1e-10) {
im = 0;
}
re = re / N;
im = im / N;
frequencies[k] = {
re: re,
im: im,
freq: k,
amp: Math.sqrt(re * re + im * im),
phase: (Math.atan2(im, re) * 180) / Math.PI
};
}
return frequencies;
}