global Nrxdec;
Nrxdec=31;
-global rxec;
- rxdec = fir1(Nrxdec-1, 0.25);
+global rxdec_coeff;
+ rxdec_coeff = fir1(Nrxdec-1, 0.25);
if 0
% tmp code to plot freq resp. 20dB attn of any aliases should be fine
% not real sensitive to in-band attn, e.g. outer tones a dB down should be OK
endfunction
+% LP filter +/- 1000 Hz, allows us to perfrom rx filtering at a lower rate saving CPU
+
+function rx_fdm_filter = rxdec_filter(rx_fdm, nin)
+ global M;
+ global Nrxdec;
+ global rxdec_coeff;
+ global rxdec_lpf_mem;
+
+ rxdec_lpf_mem(1:Nrxdec-1+M-nin) = rxdec_lpf_mem(nin+1:Nrxdec-1+M);
+ rxdec_lpf_mem(Nrxdec-1+M-nin+1:Nrxdec-1+M) = rx_fdm(1:nin);
+
+ rx_fdm_filter = zeros(1,nin);
+ for i=1:nin
+ rx_fdm_filter(i) = rxdec_lpf_mem(i:Nrxdec-1+i) * rxdec_coeff;
+ end
+end
+
+
% Combined down convert and rx filter, more memory efficient but less intuitive design
-function rx_filt = down_convert_and_rx_filter(rx_fdm, nin)
+function rx_filt = down_convert_and_rx_filter(rx_fdm, nin, dec_rate)
global Nc;
global M;
global P;
rx_baseband(i) = rx_fdm_mem(i)*phase_rx(c)';
end
- % now we can filter this carrier's P symbols
+ % now we can filter this carrier's P symbols. Due to filtering of rx_fdm we can filter at rate at rate M/Q
N=M/P; k = 1;
for i=1:N:nin
- rx_filt(c,k) = (M/Q)*rx_baseband(st+i-1:M/Q:st+i-1+Nfilter-1) * gt_alpha5_root(1:M/Q:length(gt_alpha5_root))';
+ rx_filt(c,k) = (M/Q)*rx_baseband(st+i-1:dec_rate:st+i-1+Nfilter-1) * gt_alpha5_root(1:dec_rate:length(gt_alpha5_root))';
k+=1;
end
end
% Simulation Parameters --------------------------------------
-frames = 100;
-EbNo_dB = 6.3;
+frames = 20;
+EbNo_dB = 63;
Foff_hz = -100;
modulation = 'dqpsk';
hpa_clip = 150;
rx_fdm(i) = rx_fdm(i)*foff_phase;
end
- % LP filter +/- 1000 Hz
+ rx_fdm_filter = rxdec_filter(rx_fdm, M);
- rxdec_lpf_mem(1:Nrxdec-1) = rxdec_lpf_mem(M+1:Nrxdec-1+M);
- rxdec_lpf_mem(Nrxdec:Nrxdec-1+M) = rx_fdm;
+ % TODO: Decimate to rate Q at this point, this will save some more CPU
+ % in down_convert_and_rx_filter
- rx_fdm_filter = zeros(1,M);
- for i=1:M
- rx_fdm_filter(i) = rxdec_lpf_mem(i:Nrxdec-1+i) * rxdec;
- end
-
- % Decimate to rate Q to reduce CPU load of rx filtering
-
- rx_filt = down_convert_and_rx_filter(rx_fdm_filter, M);
+ rx_filt = down_convert_and_rx_filter(rx_fdm_filter, M, M/Q);
[rx_symbols rx_timing] = rx_est_timing(rx_filt, M);
rx_timing_log = [rx_timing_log rx_timing];