diff --git a/applications/apertif/matlab/pfft.m b/applications/apertif/matlab/pfft.m index 9d30aab8434702eccec8dc1bc3b4d7514416e6fc..de868e147de51fb3d427b3526a21b2edd64c22e7 100644 --- a/applications/apertif/matlab/pfft.m +++ b/applications/apertif/matlab/pfft.m @@ -23,13 +23,19 @@ % Purpose : FFT per block of data % Description : -function [data] = pfft(ctrl, data) +function [out_data] = pfft(ctrl, in_data) % Data processing - dat = fft(data, ctrl.fft_size); + out_data = fft(in_data, ctrl.fft_size); - if ctrl.complex - data = dat; - else + if ~ctrl.complex % because we have real input, we can omit half of the fft result - data = dat(1:ctrl.fft_size/2); + out_data = out_data(1:ctrl.fft_size/2); + end + + % Normalize output to [-1 1] + out_data = out_data / ctrl.gain; + + % Quantization + if ctrl.data_w>0 + out_data = quantize(out_data, 1, ctrl.data_w, 'half_away'); end diff --git a/applications/apertif/matlab/pfir.m b/applications/apertif/matlab/pfir.m index 73d7ce43f85c943c56b6b684bd679817818ba6b4..1f2f70d28e370374c893c95ba873862cfbeee8dd 100644 --- a/applications/apertif/matlab/pfir.m +++ b/applications/apertif/matlab/pfir.m @@ -26,7 +26,15 @@ function [state, out_data] = pfir(ctrl, in_data) % Data processing for t = 1:ctrl.downsample_factor - [out_data(t), ctrl.Zdelays(t,:)] = filter(ctrl.coeff(t,:), 1, in_data(t), ctrl.Zdelays(t,:)); % ctrl.nof_taps coefficients and ctrl.nof_taps-1 Zdelays + [out_data(t), ctrl.Zdelays(t,:)] = filter(ctrl.coeff(t,:), 1, in_data(t), ctrl.Zdelays(t,:)); % range ctrl.nof_taps coefficients and range ctrl.nof_taps-1 Zdelays + end + + % Normalize output to [-1 1] + out_data = out_data / ctrl.gain; + + % Quantization + if ctrl.data_w>0 + out_data = quantize(out_data, 2^ctrl.scale_w, ctrl.data_w, 'half_away'); end % Keep state for next call