summaryrefslogtreecommitdiff
path: root/lpf.awk
diff options
context:
space:
mode:
authorwukong <wukong@longaeva>2018-09-09 23:48:31 -0700
committerwukong <wukong@longaeva>2018-09-09 23:48:31 -0700
commitd1f6c89be163d9399d569e01458242d8ce15e041 (patch)
treea263822af5cb1532f9eb1abe7b7ae6334c27d170 /lpf.awk
parente42cee748f5bc38d11742739b5e2cad4b6a07c43 (diff)
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
Diffstat (limited to 'lpf.awk')
-rw-r--r--lpf.awk125
1 files changed, 125 insertions, 0 deletions
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
+ }
+ }
+}