📄 gen_sui_corrcir.m
字号:
function gen_SUI_CorrCIR(chantype,AntennaConfig,numframe)
% generate SUI MIMO Fading Correlation Channel impulse response
% Also independent Channel
N = 10000; % number of independent random realizations
M = 256; % number of taps of the Doppler filter
randn('state',sum(100*clock));
switch chantype,
case 1, % SUI-1 Channel
tau = [0 0.4 0.9]; % tap delay in us
Power = [0 -15 -20]; % power in each tap in dB
K = [4 0 0]; % Ricean K-factor in linear
Dop = [0.4 0.3 0.5]; % Doppler maximal frequency parameter in Hz
Fnorm = -0.1771; % gain normalization factor in dB
rho = 0.7; % envelope correlation coeficient
case 2, % SUI-2 Channel
tau = [0 0.4 1.1];
Power = [0 -12 -15];
K = [2 0 0];
Dop = [0.2 0.15 0.25];
Fnorm = -0.3930;
rho = 0.5;
case 3, % SUI-3 Channel
tau = [0 0.4 0.9];
Power = [0 -5 -10];
K = [1 0 0];
Dop = [0.4 0.3 0.5];
Fnorm = -1.5113;
rho = 0.4;
case 4, % SUI-4 Channel
tau = [0 1.5 4];
Power = [0 -4 -8];
K = [0 0 0];
Dop = [0.2 0.15 0.25];
Fnorm = -1.9218;
rho = 0.3;
case 5, % SUI-5 Channel
tau = [0 4 10];
Power = [0 -5 -10];
K = [0 0 0];
Dop = [2 1.5 2.5];
Fnorm = -1.5113;
rho = 0.3;
case 6, % SUI-6 Channel
tau = [0 14 20];
Power = [0 -10 -14];
K = [0 0 0];
Dop = [0.4 0.3 0.5];
Fnorm = -0.5683;
rho = 0.3;
otherwise,
error('Unrecognized channel model');
end
Power = 10.^((Power+Fnorm)/10); % calculate normalized linear power
s2 = Power./(K+1);
s = sqrt(s2); % calculate Rayleigh part
m2 = Power.*(K./(K+1));
m = sqrt(m2); % calculate constant part
% Create the Ricean channel coefficients with the specified powers
L = length(Power); % number of taps
paths_r = sqrt(1/2)*(randn(L,N)+j*randn(L,N)).*(s'*ones(1,N)); % white Gaussian noise
paths_c = m'*ones(1,N);
% Doppler PSD shaping
for p=1:L
D = Dop(p)/max(Dop)/2; % convert to digital frequency
f0 = [0:floor(M*D)]/floor(M*D); % frequency vector
PSD = 1.0-1.72*f0.^2+0.785*f0.^4; % Power spectrum density approximation
filt = [PSD(1:end-1) zeros(1,M-2*floor(M*D)) PSD(end:-1:2)]; % S(f)
filt = sqrt(filt); % |H(f)|
filt = ifftshift(ifft(filt));
filt = real(filt);
filt = filt/sqrt(sum(filt.^2)); % normalize filter in time domain
path = fftfilt(filt, [paths_r(p,:) zeros(1,M)]); % Doppler shaping
paths_r(p,:) = path(1+M/2:end-M/2);
end
% -------------Independent Channel-----------------------
paths = paths_r + paths_c;
switch chantype,
case 1, % SUI-1 Channel
save paths_sui1.mat paths;
case 2, % SUI-2 Channel
save paths_sui2.mat paths;
case 3, % SUI-3 Channel
save paths_sui3.mat paths;
case 4, % SUI-4 Channel
save paths_sui4.mat paths;
case 5, % SUI-5 Channel
save paths_sui5.mat paths;
case 6, % SUI-6 Channel
save paths_sui6.mat paths;
otherwise,
error('Unrecognized channel model');
end
% -------------Correlate independent Channels-------------
% Currently Only Support 2*2,2*1,4*2 configurations
CorrMatrix_sqrt=getCorrMatrix(rho,AntennaConfig);
paths_c = m'*ones(1,numframe);
switch AntennaConfig,
case '2*1', % 2 Tx, 1 Rx
paths_r_11=paths_r(:,1:numframe);
paths_r_21=paths_r(:,numframe+1:2*numframe);
% Correlate Operation
for p=1:L
tmp=CorrMatrix_sqrt*[paths_r_11(p,:);paths_r_21(p,:)];
paths_r_11(p,:)=tmp(1,:);
paths_r_21(p,:)=tmp(2,:);
end
paths_11=paths_r_11+paths_c;
paths_21=paths_r_21+paths_c;
% Save
switch chantype,
case 1, % SUI-1 Channel
save paths_sui1_11.mat paths_11;
save paths_sui1_21.mat paths_21;
case 2, % SUI-2 Channel
save paths_sui2_11.mat paths_11;
save paths_sui2_21.mat paths_21;
case 3, % SUI-3 Channel
save paths_sui3_11.mat paths_11;
save paths_sui3_21.mat paths_21;
case 4, % SUI-4 Channel
save paths_sui4_11.mat paths_11;
save paths_sui4_21.mat paths_21;
case 5, % SUI-5 Channel
save paths_sui5_11.mat paths_11;
save paths_sui5_21.mat paths_21;
case 6, % SUI-6 Channel
save paths_sui6_11.mat paths_11;
save paths_sui6_21.mat paths_21;
otherwise,
error('Unrecognized channel model');
end % end switch chantype
case '2*2', % 2 Tx, 2 Rx
paths_r_11=paths_r(:,1:numframe);
paths_r_21=paths_r(:,numframe+1:2*numframe);
paths_r_12=paths_r(:,2*numframe+1:3*numframe);
paths_r_22=paths_r(:,3*numframe+1:4*numframe);
% Correlate Operation
for p=1:L
tmp=CorrMatrix_sqrt*[paths_r_11(p,:); paths_r_21(p,:);
paths_r_12(p,:); paths_r_22(p,:)];
paths_r_11(p,:)=tmp(1,:);
paths_r_21(p,:)=tmp(2,:);
paths_r_12(p,:)=tmp(3,:);
paths_r_22(p,:)=tmp(4,:);
end
paths_11=paths_r_11+paths_c;
paths_21=paths_r_21+paths_c;
paths_12=paths_r_12+paths_c;
paths_22=paths_r_22+paths_c;
% Save
switch chantype,
case 1, % SUI-1 Channel
save paths_sui1_11.mat paths_11;
save paths_sui1_21.mat paths_21;
save paths_sui1_12.mat paths_12;
save paths_sui1_22.mat paths_22;
case 2, % SUI-2 Channel
save paths_sui2_11.mat paths_11;
save paths_sui2_21.mat paths_21;
save paths_sui2_12.mat paths_12;
save paths_sui2_22.mat paths_22;
case 3, % SUI-3 Channel
save paths_sui3_11.mat paths_11;
save paths_sui3_21.mat paths_21;
save paths_sui3_12.mat paths_12;
save paths_sui3_22.mat paths_22;
case 4, % SUI-4 Channel
save paths_sui4_11.mat paths_11;
save paths_sui4_21.mat paths_21;
save paths_sui4_12.mat paths_12;
save paths_sui4_22.mat paths_22;
case 5, % SUI-5 Channel
save paths_sui5_11.mat paths_11;
save paths_sui5_21.mat paths_21;
save paths_sui5_12.mat paths_12;
save paths_sui5_22.mat paths_22;
case 6, % SUI-6 Channel
save paths_sui6_11.mat paths_11;
save paths_sui6_21.mat paths_21;
save paths_sui6_12.mat paths_12;
save paths_sui6_22.mat paths_22;
otherwise,
error('Unrecognized channel model');
end % end switch chantype
case '4*2', % 4 Tx, 2 Rx
paths_r_11=paths_r(:,1:numframe);
paths_r_21=paths_r(:,numframe+1:2*numframe);
paths_r_31=paths_r(:,2*numframe+1:3*numframe);
paths_r_41=paths_r(:,3*numframe+1:4*numframe);
paths_r_12=paths_r(:,4*numframe+1:5*numframe);
paths_r_22=paths_r(:,5*numframe+1:6*numframe);
paths_r_32=paths_r(:,6*numframe+1:7*numframe);
paths_r_42=paths_r(:,7*numframe+1:8*numframe);
% Correlate Operation
for p=1:L
tmp=CorrMatrix_sqrt*[paths_r_11(p,:); paths_r_21(p,:); paths_r_31(p,:); paths_r_41(p,:);
paths_r_12(p,:); paths_r_22(p,:); paths_r_32(p,:); paths_r_42(p,:)];
paths_r_11(p,:)=tmp(1,:);
paths_r_21(p,:)=tmp(2,:);
paths_r_31(p,:)=tmp(3,:);
paths_r_41(p,:)=tmp(4,:);
paths_r_12(p,:)=tmp(5,:);
paths_r_22(p,:)=tmp(6,:);
paths_r_32(p,:)=tmp(7,:);
paths_r_42(p,:)=tmp(8,:);
end
paths_11=paths_r_11+paths_c;
paths_21=paths_r_21+paths_c;
paths_31=paths_r_31+paths_c;
paths_41=paths_r_41+paths_c;
paths_12=paths_r_12+paths_c;
paths_22=paths_r_22+paths_c;
paths_32=paths_r_32+paths_c;
paths_42=paths_r_42+paths_c;
% Save
switch chantype,
case 1, % SUI-1 Channel
save paths_sui1_11.mat paths_11;
save paths_sui1_21.mat paths_21;
save paths_sui1_31.mat paths_31;
save paths_sui1_41.mat paths_41;
save paths_sui1_12.mat paths_12;
save paths_sui1_22.mat paths_22;
save paths_sui1_32.mat paths_32;
save paths_sui1_42.mat paths_42;
case 2, % SUI-2 Channel
save paths_sui2_11.mat paths_11;
save paths_sui2_21.mat paths_21;
save paths_sui2_31.mat paths_31;
save paths_sui2_41.mat paths_41;
save paths_sui2_12.mat paths_12;
save paths_sui2_22.mat paths_22;
save paths_sui2_32.mat paths_32;
save paths_sui2_42.mat paths_42;
case 3, % SUI-3 Channel
save paths_sui3_11.mat paths_11;
save paths_sui3_21.mat paths_21;
save paths_sui3_31.mat paths_31;
save paths_sui3_41.mat paths_41;
save paths_sui3_12.mat paths_12;
save paths_sui3_22.mat paths_22;
save paths_sui3_32.mat paths_32;
save paths_sui3_42.mat paths_42;
case 4, % SUI-4 Channel
save paths_sui4_11.mat paths_11;
save paths_sui4_21.mat paths_21;
save paths_sui4_31.mat paths_31;
save paths_sui4_41.mat paths_41;
save paths_sui4_12.mat paths_12;
save paths_sui4_22.mat paths_22;
save paths_sui4_32.mat paths_32;
save paths_sui5_42.mat paths_42;
case 5, % SUI-5 Channel
save paths_sui5_11.mat paths_11;
save paths_sui5_21.mat paths_21;
save paths_sui5_31.mat paths_31;
save paths_sui5_41.mat paths_41;
save paths_sui5_12.mat paths_12;
save paths_sui5_22.mat paths_22;
save paths_sui5_32.mat paths_32;
save paths_sui5_42.mat paths_42;
case 6, % SUI-6 Channel
save paths_sui6_11.mat paths_11;
save paths_sui6_21.mat paths_21;
save paths_sui6_31.mat paths_31;
save paths_sui6_41.mat paths_41;
save paths_sui6_12.mat paths_12;
save paths_sui6_22.mat paths_22;
save paths_sui6_32.mat paths_32;
save paths_sui6_42.mat paths_42;
otherwise,
error('Unrecognized channel model');
end % end switch chantype
otherwise,
error('Not Support Now!');
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -