global Nrxdec;
Nrxdec=31;
global rxec;
- rxdec = fir1(Nrxdec, 0.25);
+ rxdec = 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
global freq_pol;
global Nfilter;
global gt_alpha5_root;
+ global Q;
% update memory of rx_fdm
N=M/P; k = 1;
for i=1:N:nin
- rx_filt(c,k) = rx_baseband(st+i-1:st+i-1+Nfilter-1) * gt_alpha5_root';
+ 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))';
k+=1;
end
end
fbb_phase_tx = 1;
global fbb_phase_rx;
fbb_phase_rx = 1;
+global rxdec_lpf_mem;
+ rxdec_lpf_mem = zeros(1,Nrxdec-1+M);
+global Q=M/4;
% Spread initial FDM carrier phase out as far as possible. This
% helped PAPR for a few dB. We don't need to adjust rx phase as DQPSK
% Simulation Parameters --------------------------------------
-frames = 20;
-EbNo_dB = 73;
+frames = 100;
+EbNo_dB = 6.3;
Foff_hz = -100;
modulation = 'dqpsk';
hpa_clip = 150;
rx_fdm(i) = rx_fdm(i)*foff_phase;
end
- % LP filter
- % Decimate to rate M/4
+ % LP filter +/- 1000 Hz
- rx_filt = down_convert_and_rx_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;
+
+ 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_symbols rx_timing] = rx_est_timing(rx_filt, M);
rx_timing_log = [rx_timing_log rx_timing];