⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gen_sui_corrcir.m

📁 两发两收的空时分组编码OFDM系统 采用SUI5信道模型
💻 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 + -