From d1f6c89be163d9399d569e01458242d8ce15e041 Mon Sep 17 00:00:00 2001 From: wukong Date: Sun, 9 Sep 2018 23:48:31 -0700 Subject: added summations to quad_reg added in-progress lpf.awk (low pass filter), an adaptation of convolution script (conv.awk) to use delmitied columns as input additional tweaking of OFMT, OFS, and conditional print statements --- lpf.awk | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 lpf.awk (limited to 'lpf.awk') diff --git a/lpf.awk b/lpf.awk new file mode 100644 index 0000000..814020f --- /dev/null +++ b/lpf.awk @@ -0,0 +1,125 @@ +#!/usr/bin/awk -f + +### lpf.awk +# Low Pass Filter with Hardcoded FIR Window + +BEGIN { + OFS = FS + sign = "[+-]?" + decimal = "[0-9]+[.]?[0-9]*" + fraction = "[.][0-9]*" + exponent = "([Ee]" sign "[0-9]+)?" + number = "^" sign "(" decimal "|" fraction ")" exponent "$" + + #H = ARGV[1] + #H = 1.0 + #H = "1.00 1.00 1.00" # rect + #H = "0.25 0.50 0.25" # von Hann + H = "0.23 0.54 0.23" # Hamming + window_size = split(H, H_arr, "[ ]*") +} + +NR == 1 { + for (y=1; y<=NF; y++) + ($y ~ number) ? header[y] = "col" y : header[y] = $y +} + +NF > 0 { + if (NF > nf_max) + nf_max = NF + + input_size = window_size + output_size = (input_size + window_size - 1) + + ### columns + for (y=1; y<=nf_max; y++) { + if ($y == header[y]) + printf(header[y] OFS header[y] "_lpf") + if ($y ~ number) { + count[y]++ + + # rotate input buffer + for (n=1; n<=input_size; n++) { + X_arr[y,n] = X_arr[y,n+1] + } + X_arr[y,input_size] = $y + + Y[y] = 0 + for (n=1; n<=window_size; n++) { + for (m=1; m<=input_size; m++) { + if (n <= window_size) { + Y[y] += H_arr[n-m+1]*X_arr[y,m] + continue + } + if ((n > window_size) && (n <= input_size)) { + Y[y] += H_arr[n-m+1]*X_arr[y,m] + continue + } + if ((n > window_size) && (n > input_size)) { + Y[y] += H_arr[n-m+1]*X_arr[y,m] + continue + } + else { + Y[y] += 0 + continue + } + } + } + printf(X_arr[y,input_size] OFS Y[y]) + } + + if (y < nf_max) + printf(OFS) + else + printf(ORS) + + } + + + +} + +END { + ### rows + for (x=1; x<=window_size; x++) { + ### columns + for (y=1; y<=nf_max; y++) { + # rotate input buffer + for (n=1; n<=input_size; n++) { + X_arr[y,n] = X_arr[y,n+1] + #print X_arr[y,n] + } + #delete X_arr[y,input_size] + #input_size = length(X_arr) + #print length(X_arr) + + Y[y] = 0 + for (n=1; n<=window_size; n++) { + for (m=1; m<=input_size; m++) { + if (n <= window_size) { + Y[y] += H_arr[n-m+1]*X_arr[y,m] + continue + } + if ((n > window_size) && (n <= input_size)) { + Y[y] += H_arr[n-m+1]*X_arr[y,m] + continue + } + if ((n > window_size) && (n > input_size)) { + Y[y] += H_arr[n-m+1]*X_arr[y,m] + continue + } + else { + Y[y] += 0 + continue + } + } + } + printf(X_arr[y,input_size] OFS Y[y]) + if (y < nf_max) + printf(OFS) + else + printf(ORS) + X_arr[input_size] = 0 + } + } +} -- cgit v1.2.3