Home > WaveComBox > Example > FBMC_OQAM > ChromaticDispersionCompensation.m

ChromaticDispersionCompensation

PURPOSE ^

Example showing a comparison of advanced chromatic dispersion

SYNOPSIS ^

This is a script file.

DESCRIPTION ^

 Example showing a comparison of advanced chromatic dispersion
 compensation algorithms for optical fiber FBMC-OQAM systems

 References: F. Rottenberg, T. H. Nguyen, S. P. Gorza, F. Horlin and J.
 Louveaux, "Advanced Chromatic Dispersion Compensation in Optical Fiber
 FBMC-OQAM Systems," in IEEE Photonics Journal, vol. 9, no. 6, pp. 1-10,
 Dec. 2017.

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 % Example showing a comparison of advanced chromatic dispersion
0002 % compensation algorithms for optical fiber FBMC-OQAM systems
0003 %
0004 % References: F. Rottenberg, T. H. Nguyen, S. P. Gorza, F. Horlin and J.
0005 % Louveaux, "Advanced Chromatic Dispersion Compensation in Optical Fiber
0006 % FBMC-OQAM Systems," in IEEE Photonics Journal, vol. 9, no. 6, pp. 1-10,
0007 % Dec. 2017.
0008 
0009 % This file is part of WaveComBox: www.wavecombox.com and is distributed under
0010 % the terms of the MIT license. See accompanying LICENSE file.
0011 % Original author: François Rottenberg, May 8, 2018.
0012 % Contributors:
0013 % Change log:
0014 
0015 
0016 % Definition of general Parameters
0017 Para=InitializeChainParameters( 'FBMC-OQAM' ) % initialize parameters of the FBMC-OQAM chain
0018 Para.Ns=2000;
0019 Para.Es_N0_dB=45; % We consider a high SNR scenario to better observe the distortion due to channel frequency selectiviy
0020 Para.T = 1/30e9*Para.nSubcarriers; % sampling period
0021 clight      = 299792458 ; % light speed (m/s)
0022 lambda      = 1550e-9 ; % m
0023 Para.CenterFrequency = clight/lambda ; % m
0024 
0025 %% Transmitter
0026 d = GenerateData (Para); % Generate data symbols
0027 s = Modulator(d, Para ); % FBMC-OQAM modulation
0028 
0029 %% Channel
0030 L_fiber     = 400e3; % m => Change here for CD
0031 D           = 17e-6; % s/(m*m)
0032 r = Channel_ChromaticDispersion( s, L_fiber, D, Para );
0033 r=Channel_AWGN( r, Para ); % AWGN channel, SNR fixed in Para
0034 
0035 %% Receiver
0036 z = Demodulator( r, Para ); % FBMC demodulation
0037 
0038 %% Single_tap_equalizer
0039 M=Para.nSubcarriers/2;
0040 lambda = clight/Para.CenterFrequency ; % m
0041 Ts=Para.T/Para.nSubcarriers;
0042 alpha=D*lambda^2*L_fiber*pi./clight;
0043 alpha_tilde=alpha/((2*pi*Ts)^2);
0044 omega_axis   = fftshift((2*pi/(2*M)).*(-M:M-1)');
0045 b   = exp(1i*alpha_tilde.*omega_axis.^2);
0046 [x, ~] = FBMC_OQAM_EqualizerSingleTap( z, 0, 'Specific', Para, b );
0047 
0048 d_hat=real(x);
0049 MSE_single_tap_equalizer = MSEComputes( d, d_hat, Para );
0050 
0051 %% Multi-tap equalizer (frequency sampling)
0052 L=3;
0053 P=(L-1)/2;
0054 omega_axis   =fftshift( (2*pi/(2*M*(L+1)/2)).*(-M*(L+1)/2:M*(L+1)/2-1)');
0055 Harg  = exp(-1i*alpha_tilde.*omega_axis.^2);
0056 [ x ] = FBMC_OQAM_EqualizerMultiTapFS( z, 0, L, 'Specific', Para, Harg );
0057 d_hat=real(x);
0058 MSE_multi_tap_equalizer_FS = MSEComputes( d, d_hat, Para );
0059 
0060 L=7;
0061 P=(L-1)/2;
0062 omega_axis   =fftshift( (2*pi/(2*M*(L+1)/2)).*(-M*(L+1)/2:M*(L+1)/2-1)');
0063 Harg  = exp(-1i*alpha_tilde.*omega_axis.^2);
0064 [ x ] = FBMC_OQAM_EqualizerMultiTapFS( z, 0, L, 'Specific', Para, Harg );
0065 d_hat=real(x);
0066 MSE_multi_tap_equalizer_FS7 = MSEComputes( d, d_hat, Para );
0067 
0068 
0069 %% Parallel equalization
0070 omega_axis   = fftshift((2*pi/(2*M)).*(-M:M-1)');
0071 b   = exp(1i*alpha_tilde.*omega_axis.^2);
0072 b1  = 2*1i*alpha_tilde.*omega_axis.*exp(1i*alpha_tilde.*omega_axis.^2);
0073 b2  = 2*1i*alpha_tilde.*exp(1i*alpha_tilde.*omega_axis.^2)+(2*1i*alpha_tilde.*omega_axis).^2.*exp(1i*alpha_tilde.*omega_axis.^2);
0074 
0075 R=1;
0076 [ x ] = FBMC_OQAM_EqualizerParallelMultistage( r, 0, R, 'Specific', Para, b, b1, b2 );
0077 d_hat=real(x);
0078 MSE_Parallel_multistage_1 = MSEComputes( d, d_hat, Para );
0079 R=2;
0080 [ x ] = FBMC_OQAM_EqualizerParallelMultistage( r, 0, R, 'Specific', Para, b, b1, b2 );
0081 d_hat=real(x);
0082 MSE_Parallel_multistage_2 = MSEComputes( d, d_hat, Para );
0083 
0084 
0085 %% Frequency spreading receiver
0086 omega_axis   = fftshift((2*pi/(2*M*Para.kappa)).*(-M*Para.kappa:M*Para.kappa-1)');
0087 b_over   = exp(1i*alpha_tilde.*omega_axis.^2);
0088 [ x ] = FBMC_OQAM_EqualizerFrequencySpreadingReceiver( r, 0, 'Specific', Para, b_over );
0089 d_hat=real(x);
0090 MSE_frequency_spreading = MSEComputes( d, d_hat, Para );
0091  
0092 %% Time domain equalization (implented in frequency domain using
0093 % overlap-and-save method)
0094 Kov=110; % Number of discarded samples (needs to be even)
0095 N=512; % Transform size
0096 omega_axis   = fftshift((2*pi/N).*(-N/2:N/2-1)');
0097 b   = exp(1i*alpha_tilde.*omega_axis.^2);
0098 
0099 r_equ = EqualizerTimeDomainOverlapandsave( r, 0, N, Kov, 'Specific', Para, b );
0100 z = Demodulator( r_equ, Para ); % FBMC demodulation
0101 d_hat=real(z);
0102 MSE_time_domain = MSEComputes( d, d_hat, Para );
0103 
0104 
0105 %% Plot performance
0106 green=[0 0.5 0];
0107 magenta=[0.6 0 0.6];
0108 red=[0.8 0 0];
0109 pas=3;
0110 
0111 figure1=figure
0112 plot(-M:pas:M-1,10*log10(fftshift(0.5./MSE_single_tap_equalizer(1:pas:end))),'linewidth',1.5,'MarkerFaceColor','w')
0113 hold on
0114 plot(-M:pas:M-1,10*log10(fftshift(0.5./MSE_Parallel_multistage_1(1:pas:end))),'--o','Color',red,'linewidth',1.5,'MarkerFaceColor','w')
0115 plot(-M:pas:M-1,10*log10(fftshift(0.5./MSE_multi_tap_equalizer_FS(1:pas:end))),'-.','Color',green,'linewidth',1.5,'MarkerFaceColor','w')
0116 plot(-M:pas:M-1,10*log10(fftshift(0.5./MSE_frequency_spreading(1:pas:end))),'-s','Color',magenta,'linewidth',1.5,'MarkerFaceColor','w')
0117 plot(-M:pas:M-1,10*log10(fftshift(0.5./MSE_time_domain(1:pas:end))),'k','linewidth',1.5,'MarkerFaceColor','w')
0118 plot(-M:pas:M-1,10*log10(fftshift(0.5./MSE_Parallel_multistage_2(1:pas:end))),'--o','Color',red,'linewidth',1.5,'MarkerFaceColor','w')
0119 plot(-M:pas:M-1,10*log10(fftshift(0.5./MSE_multi_tap_equalizer_FS7(1:pas:end))),'-.','Color',green,'linewidth',1.5,'MarkerFaceColor','w')
0120 
0121 xlim([-M max(-M:pas:M-1)])
0122 xlabel('Subcarrier index')
0123 ylabel('SNDR [dB]')
0124 legend('Single-tap','R // multistage','Multi-tap FS','Frequency spreading','Time domain','Location','SouthEast')
0125 title(strcat('L_{fiber}=',int2str(L_fiber/1e3),'km, 2M=', int2str(2*M)))
0126 
0127 
0128 
0129 % Create ellipse
0130 annotation(figure1,'ellipse',...
0131     [0.21742857142857 0.604999999999999 0.0436428571428572 0.0515873015873011]);
0132 
0133 % Create textbox
0134 annotation(figure1,'textbox',...
0135     [0.189154761904761 0.587142857142854 0.00346428571428576 0.00198412698412653],...
0136     'String',{'N_{taps}=7'},...
0137     'FitBoxToText','off',...
0138     'EdgeColor',[1 1 1]);
0139 
0140 % Create ellipse
0141 annotation(figure1,'ellipse',...
0142     [0.304571428571428 0.464285714285714 0.0436428571428572 0.0515873015873011]);
0143 
0144 % Create textbox
0145 annotation(figure1,'textbox',...
0146     [0.313499999999999 0.458333333333331 0.00346428571428576 0.00198412698412653],...
0147     'String',{'N_{taps}=3'},...
0148     'FitBoxToText','off',...
0149     'EdgeColor',[1 1 1]);
0150 
0151 % Create textbox
0152 annotation(figure1,'textbox',...
0153     [0.753142857142855 0.551428571428568 0.00346428571428576 0.00198412698412653],...
0154     'String',{'R=2'},...
0155     'FitBoxToText','off',...
0156     'EdgeColor',[1 1 1]);
0157 
0158 % Create textbox
0159 annotation(figure1,'textbox',...
0160     [0.807369047619045 0.755634920634915 0.00346428571428576 0.00198412698412653],...
0161     'String',{'R=3'},...
0162     'FitBoxToText','off',...
0163     'EdgeColor',[1 1 1]);
0164

Generated on Mon 14-Oct-2019 13:48:34 by m2html © 2005