0001 function [ C, Psi ] = GenerateRayleighChannelReal(PowerDelayProfile, Para, DopplerSpectrum, nFrameSamples)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041 if exist('DopplerSpectrum','var')==0
0042 DopplerSpectrum='time_invariant';
0043 end
0044
0045 switch PowerDelayProfile
0046 case 'OneTap'
0047
0048 delays=0;
0049 powers=0;
0050
0051 case 'ITU_PedA'
0052
0053 delays=1e-9*[0 110 190 410];
0054 powers=[0 -9.7 -19.2 -22.8];
0055 case 'ITU_PedB'
0056
0057 delays=1e-9*[0 200 800 1200 2300 3700];
0058 powers=[0 -0.9 -4.9 -8 -7.8 -23.9];
0059 case 'ITU_EPedA'
0060
0061 delays=1e-9*[0 30 70 90 110 190 410];
0062 powers=[0 -1 -2 -3 -8 -17.2 -20.8];
0063 case 'ITU_VehB'
0064
0065 delays=1e-9*[0 300 8900 12900 17100 20000];
0066 powers=[-2.5 0 -12.8 -10 -25.2 -16];
0067 case 'ITU_VehA'
0068
0069 delays=1e-9*[0 300 700 1100 1700 2500];
0070 powers=[0 -1 -9 -10 -15 -20];
0071 case 'ITU_EVehA'
0072
0073 delays=1e-9*[0 30 150 310 370 710 1090 1730 2510];
0074 powers=[0 -1.5 -1.4 -3.6 -0.6 -9.1 -7 -12 -16.9];
0075 case 'ITU_TUA'
0076
0077 delays=1e-6*[0 0.217 0.512 0.514 0.517 0.674 0.882 1.230 1.287 1.311 1.349 1.533 1.535 1.622 1.818 1.836 1.884 1.943 2.048 2.140] ;
0078 powers=[ -5.7 -7.6 -10.1 -10.2 -10.2 -11.5 -13.4 -16.3 -16.9 -17.1 -17.4 -19.0 -19.0 -19.8 -21.5 -21.6 -22.1 -22.6 -23.5 -24.3];
0079 case 'ITU_ETU'
0080
0081 delays=1e-9*[0 50 120 200 230 500 1600 2300 5000];
0082 powers=[-1 -1 -1 0 0 0 -3 -5 -7];
0083 case 'IC_Hyperlan2'
0084
0085 delays=1e-9*[0 10 20 30 40 50 60 70 80 90 110 140 170 200 240 290 340 390];
0086 powers=[0 -0.9 -1.7 -2.6 -3.5 -4.3 -5.2 -6.1 -6.9 -7.8 -4.7 -7.3 -9.9 -12.5 -13.7 -18.0 -22.4 -26.7];
0087
0088
0089 case '3GPP_TU'
0090
0091 powers = [-5.7 -7.6 -10.1 -10.2 -10.2 -11.5 -13.4 -16.3 -16.9 -17.1 -17.4 -19.0 -19.0 -19.8 -21.5 -21.6 -22.1 -22.6 -23.5 -24.3];
0092 delays = [0 217 512 514 517 674 882 1230 1287 1311 1349 1533 1535 1622 1818 1836 1884 1943 2048 2140]*1e-9;
0093 stem(delays,powers)
0094 case '3GPP_RA'
0095
0096 powers = [-5.2 -6.4 -8.4 -9.3 -10 -13.1 -15.3 -18.5 -20.4 -22.4];
0097 delays = [0 42 101 129 149 245 312 410 469 528]*1e-9;
0098 stem(delays,powers)
0099 case '3GPP_HT'
0100
0101 powers = [-3.6 -8.9 -10.2 -11.5 -11.8 -12.7 -13 -16.2 -17.3 -17.7 -17.6 -22.7 -24.1 -25.8 -25.8 -26.2 -29 -29.9 -30 -30.7];
0102 delays = [0 356 441 528 546 609 625 842 916 941 15000 16172 16492 16876 16882 16978 17615 17827 17849 18016]*1e-9;
0103
0104 otherwise
0105 error('"PowerDelayProfile" not defined')
0106
0107 end
0108
0109 Ts=Para.T/Para.nSubcarriers;
0110 delays=round(delays/Ts)+1;
0111 nbtaps=length(powers);
0112 L=max(delays);
0113 p_b=zeros(1,L);
0114 variances=10.^(powers/10);
0115 variances=variances/sum(variances);
0116 for i=1:nbtaps
0117 p_b(delays(i))=p_b(delays(i))+ variances(i);
0118 end
0119
0120 switch DopplerSpectrum
0121 case 'time_invariant'
0122 C=zeros(Para.N_R,Para.N_T,L);
0123 Psi=[];
0124 for i=1:Para.N_R
0125 for j=1:Para.N_T
0126 for b=1:L
0127 C(i,j,b)=sqrt(p_b(b)/2)*(randn+1j*randn);
0128 end
0129 end
0130 end
0131 case 'Jakes'
0132 if exist('nFrameSamples','var')==0
0133 error('Argurment "nFrameSamples" missing')
0134 end
0135
0136 c=3e8;
0137 lambda=c/Para.CenterFrequency;
0138 fd=Para.Velocity/3.6/lambda;
0139 L_nu=floor(fd*nFrameSamples*Ts);
0140 if L_nu==0
0141 p_nu=1;
0142 else
0143 p_nu=1./sqrt(1-((-L_nu:L_nu)./(fd*nFrameSamples*Ts)).^2);
0144 p_nu=p_nu/sum(p_nu);
0145 end
0146 Psi=zeros(Para.N_R,Para.N_T,L,2*L_nu+1);
0147 for i=1:Para.N_R
0148 for j=1:Para.N_T
0149 for b=1:L
0150 for nu=1:2*L_nu+1
0151 Psi(i,j,b,nu)=sqrt(p_b(b)*p_nu(nu)/2)*(randn+1j*randn);
0152 end
0153 end
0154 end
0155 end
0156 C=zeros(Para.N_R,Para.N_T,L,nFrameSamples);
0157 for index_N_R=1:Para.N_R
0158 for index_N_T=1:Para.N_T
0159 for index_L=1:L
0160 C(index_N_R,index_N_T,index_L,:)=exp(1j*2*pi/nFrameSamples*(0:nFrameSamples-1)'*(-L_nu:L_nu))*squeeze(Psi(index_N_R,index_N_T,index_L,:));
0161 end
0162 end
0163 end
0164 case 'Flat'
0165 if exist('nFrameSamples','var')==0
0166 error('Argurment "nFrameSamples" missing')
0167 end
0168
0169 c=3e8;
0170 lambda=c/Para.CenterFrequency;
0171 fd=Para.Velocity/3.6/lambda;
0172 L_nu=floor(fd*nFrameSamples*Ts);
0173 if L_nu==0
0174 p_nu=1;
0175 else
0176 p_nu=ones(1,2*L_nu+1);
0177 p_nu=p_nu/sum(p_nu);
0178 end
0179 Psi=zeros(Para.N_R,Para.N_T,L,2*L_nu+1);
0180 for i=1:Para.N_R
0181 for j=1:Para.N_T
0182 for b=1:L
0183 for nu=1:2*L_nu+1
0184 Psi(i,j,b,nu)=sqrt(p_b(b)*p_nu(nu)/2)*(randn+1j*randn);
0185 end
0186 end
0187 end
0188 end
0189 C=zeros(Para.N_R,Para.N_T,L,nFrameSamples);
0190 for index_N_R=1:Para.N_R
0191 for index_N_T=1:Para.N_T
0192 for index_L=1:L
0193 C(index_N_R,index_N_T,index_L,:)=exp(1j*2*pi/nFrameSamples*(0:nFrameSamples-1)'*(-L_nu:L_nu))*squeeze(Psi(index_N_R,index_N_T,index_L,:));
0194 end
0195 end
0196 end
0197 otherwise
0198 error('"DopplerSpectrum" not defined')
0199 end
0200
0201 end
0202