diff options
Diffstat (limited to '')
| -rw-r--r-- | conv.awk | 36 |
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]
+ }
+}
+
|
