summaryrefslogtreecommitdiff
path: root/conv.awk
diff options
context:
space:
mode:
authorwukong <wukong@longaeva>2018-06-05 22:34:51 -0700
committerwukong <wukong@longaeva>2018-06-05 22:34:51 -0700
commit8f263e859e0970ce87b77addc80dec28e8fc7e82 (patch)
treeb0bdc392230c9960f5e5f5b3dea979405334628f /conv.awk
re-init
Diffstat (limited to '')
-rw-r--r--conv.awk36
1 files changed, 36 insertions, 0 deletions
diff --git a/conv.awk b/conv.awk
new file mode 100644
index 0000000..10c99c7
--- /dev/null
+++ b/conv.awk
@@ -0,0 +1,36 @@
+### conv.awk
+# [PoC] linear convolution (with hardcoded IR window).
+
+
+BEGIN {
+ X = ARGV[1]
+ input_size = split(X, X_arr)
+ #H = "1.0 1.0 1.0" # rect
+ #H = "0.25 0.50 0.25" # von Hann
+ H = "0.23 0.54 0.23" # Hamming
+ window_size = split(H, H_arr)
+ output_size = (input_size + window_size - 1)
+ for (n=1; n <= output_size; n++) {
+ Y_arr[n] = 0
+ for (m=1; m <= input_size; m++) {
+ if (n <= window_size) {
+ Y_arr[n] = Y_arr[n] + H_arr[n-m+1]*X_arr[m]
+ continue
+ }
+ if ((n > window_size) && (n <= input_size)) {
+ Y_arr[n] = Y_arr[n] + H_arr[n-m+1]*X_arr[m]
+ continue
+ }
+ if ((n > window_size) && (n > input_size)) {
+ Y_arr[n] = Y_arr[n] + H_arr[n-m+1]*X_arr[m]
+ continue
+ }
+ else {
+ Y_arr[n] = Y_arr[n] + 0
+ continue
+ }
+ }
+ print Y_arr[n]
+ }
+}
+