#!/usr/bin/awk -f ### conv.awk # [PoC] linear convolution (with hardcoded IR window). BEGIN { OFMT = "%.9g" 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] } }