summaryrefslogtreecommitdiff
path: root/assembly
diff options
context:
space:
mode:
authorSam Nystrom <sam@samnystrom.dev>2024-03-16 22:54:54 -0400
committerSam Nystrom <sam@samnystrom.dev>2024-03-16 22:54:54 -0400
commit1d5f74bca29c6bb28bef6035aa09a1e35884b40a (patch)
tree910801e8f2bf940f77438642f7a20448385d822a /assembly
parent7c37715afd7d9572a7f1a79552a187ab2a3e4184 (diff)
test: begin writing testsHEADmain
Diffstat (limited to 'assembly')
-rw-r--r--assembly/index.ts45
1 files changed, 27 insertions, 18 deletions
diff --git a/assembly/index.ts b/assembly/index.ts
index e94b0a8..8218a08 100644
--- a/assembly/index.ts
+++ b/assembly/index.ts
@@ -320,11 +320,12 @@ export function unzip(x: StaticArray<f32>): StaticArray<f32> {
}
function ditfft2(x: StaticArray<f32>, n: i32, s: i32, out: StaticArray<f32>): void {
- if (n == 1) {
+ //trace('x,n,s,X:', 4, <f64>x.length, <f64>n, <f64>s, <f64>out.length);
+ /*if (n == 1) {
out[0] = x[0];
out[1] = x[1];
return;
- } else if (n == 2) {
+ } /*else if (n == 2) {*/
for (let k = 0; k < out.length - out.length % 2; k += 2) {
for (let n = 0; n < x.length - x.length % 2; n += 2) {
const y = -<f32>2 * Mathf.PI * <f32>k / <f32>x.length * <f32>n;
@@ -334,11 +335,11 @@ function ditfft2(x: StaticArray<f32>, n: i32, s: i32, out: StaticArray<f32>): vo
out[k+1] += x[n] * v + x[n+1] * u;
}
}
- return;
- }
- ditfft2(x.slice<StaticArray<f32>>(0, n), n/2, 2*s, out.slice<StaticArray<f32>>(0, n));
- ditfft2(x.slice<StaticArray<f32>>(s * 2), n/2, 2*s, out.slice<StaticArray<f32>>(n));
- const outptr = changetype<usize>(out);
+ /*return;
+ }*/
+ // ditfft2(x, n/2, 2*s, out.slice<StaticArray<f32>>(0, n));
+ // ditfft2(x.slice<StaticArray<f32>>(s * 2), n/2, 2*s, out.slice<StaticArray<f32>>(n));
+ /*const outptr = changetype<usize>(out);
const twiddle = vf32(-<f32>2 * Mathf.PI / <f32>n);
let vk = f32x4(0,1,2,3);
for (let k = 0; k < n/2 - n/2 % 2; k += 4) {
@@ -349,22 +350,30 @@ function ditfft2(x: StaticArray<f32>, n: i32, s: i32, out: StaticArray<f32>): vo
v128.store(outptr + k*2 * 4, v128.add<f32>(p, q));
v128.store(outptr + (k*2 + n/2) * 4, v128.sub<f32>(p, q));
vk = v128.add<f32>(vk, vf32(1));
- }
- for (let k = n/2 - n/2 % 2; k < n/2; k++) {
+ }*/
+ //for (let k = n/2 - n/2 % 2; k < n/2; k++) {
+ /*for (let k = 0; k < n/2; k++) {
+ trace('n,s,k', 3, <f64>n, <f64>s, <f64>k);
const pr = unchecked(out[k*2]);
const pi = unchecked(out[k*2+1]);
- const y = -<f32>2 * Mathf.PI * <f32>k / <f32>n;
- const qr = Mathf.cos(y) * out[k*2+n/2]
- const qi = Mathf.sin(y) * out[k*2+n/2+1];
+ const tw = -<f32>2 * Mathf.PI / <f32>n * <f32>k;
+ const u = Mathf.cos(tw);
+ const v = Mathf.sin(tw);
+ const x = out[(k+n/2)*2];
+ const y = out[(k+n/2)*2+1];
+ const qr = x * u - y * v;
+ const qi = x * v + y * u;
unchecked(out[k*2] = pr + qr);
unchecked(out[k*2+1] = pi + qi);
- unchecked(out[k*2+n/2] = pr - qr);
- unchecked(out[k*2+n/2+1] = pi - qi);
- }
+ unchecked(out[(k+n/2)*2] = pr - qr);
+ unchecked(out[(k+n/2)*2+1] = pi - qi);
+ }*/
}
export function fft(x: StaticArray<f32>): StaticArray<f32> {
- const out = new StaticArray<f32>(x.length);
- ditfft2(x, x.length/2, 1, out);
+ const len = x.length - x.length % 2;
+ const out = new StaticArray<f32>(len);
+ if (len == 0) return out;
+ ditfft2(x.slice<StaticArray<f32>>(0, len), len/2, 1, out);
return out;
-} \ No newline at end of file
+}