From 9458a881601016c81e12c273a83183f7cae04371 Mon Sep 17 00:00:00 2001
From: Erik Kooistra <kooistra@astron.nl>
Date: Thu, 30 Nov 2017 10:40:37 +0000
Subject: [PATCH] Use fir_wb_reverse to try effect of wrong wideband factor P
 order of the FIR coefficients.

---
 applications/apertif/matlab/run_pfir_coeff.m | 37 ++++++++++++++++----
 1 file changed, 30 insertions(+), 7 deletions(-)

diff --git a/applications/apertif/matlab/run_pfir_coeff.m b/applications/apertif/matlab/run_pfir_coeff.m
index 107686f199..cff3d954f0 100644
--- a/applications/apertif/matlab/run_pfir_coeff.m
+++ b/applications/apertif/matlab/run_pfir_coeff.m
@@ -65,16 +65,16 @@ close all;
 fig=0;
 
 %% Select application
-%application = 'lofar_subband';      % load LOFAR subband filterbank coefficients from file
-application = 'apertif_subband';    % calculate Apertif subband filterbank coefficients using fir1 or fircls1
-application = 'apertif_channel';    % calculate Apertif channel filterbank coefficients using fir1 or fircls1
+application = 'lofar_subband';      % load LOFAR subband filterbank coefficients from file
+%application = 'apertif_subband';    % calculate Apertif subband filterbank coefficients using fir1 or fircls1
+%application = 'apertif_channel';    % calculate Apertif channel filterbank coefficients using fir1 or fircls1
 %application = 'arts_channel';       % calculate Arts channel filterbank coefficients using fir1 or fircls1
 %application = 'test_bypass';        % create bypass pfir coefficients with 1 in first tap and 0 in remaining taps
 %application = 'test_incrementing';  % create incrementing pfir coefficients 1:L*N for PFIR implementation verification purposes
 
 
 %% - Application specific settings
-% Default settings
+% Default settings (will get overruled dependend on application)
 config.hp_factor = 1;
 config.hp_adjust = false;
 config.dc_adjust = false;
@@ -91,15 +91,19 @@ elseif strcmp(application, 'test_incrementing')
     L = 8;
     coeff_w = 16;
     %coeff_w = 9;
+    q_full_scale = 2^(coeff_w-1);
     coeff = [1:L*N]';                                   % row
+    coeff = coeff / q_full_scale;                       % or use coeff = coeff / (max(coeff)+1);
     config.design = 'incrementing';
 elseif strcmp(application, 'lofar_subband')
     % Load the quantized FIR coefficients of the subband filterbank in a LOFAR station
     N = 1024;
     L = 16;
     coeff_w = 16;
+    q_full_scale = 2^(coeff_w-1);
     coeff = load('data/Coeffs16384Kaiser-quant.dat');   % column
     coeff = coeff';                                     % row
+    coeff = coeff / q_full_scale;
     config.design = 'lofar_subband';
 else
     if strcmp(application, 'apertif_subband')
@@ -126,15 +130,16 @@ else
     end
     
     % Enable or disable adjustment of the PFIR coefficients. Uncomment to
-    % overrule default:
+    % overrule application default for test purposes:
     %config.hp_adjust = true;
-    config.hp_adjust = false;
+    %config.hp_adjust = false;
     
     %config.dc_adjust = true;
     %config.dc_adjust = false;
     
     % Select FIR filter design method (fircls1 yields better results than
-    % fir1 regarding stop band suppression). Uncomment to overrule default:
+    % fir1 regarding stop band suppression). Uncomment to overrule
+    % application default for test purposes:
     %config.design = 'fircls1';
     %config.design = 'fir1';
     
@@ -163,6 +168,24 @@ else
 end
 NL = N*L;                % Total number of FIR filter coefficients (taps)
 
+% Try effect of wrong wideband factor P order of the FIR coefficients.
+% It is noticable in the FIR transfer function as about factor 2 in dB
+% less attenuation outside the passband for bins that are multiples of
+% about N/P. For P = 4 the attenuation spikes occur at:
+% . bin 255.6
+% . bin 256.4
+% . bin 511.6
+% In a time domain simulation a CW at those bins will then also show in
+% the DC bin.
+fir_wb_reverse = true;
+%fir_wb_reverse = false;   % default
+if fir_wb_reverse
+    P = 4;
+    coeff = reshape(coeff, P, NL/P);
+    coeff = flipud(coeff);
+    coeff = reshape(coeff, 1, NL);
+end
+
 % Scale to actual frequency
 fs = 200e6;              % Lofar ADC sample rate = 200.0 MHz
 fs = 200e6/1024;         % Lofar subband sample rate = 200.0 MHz
-- 
GitLab