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

📄 alamouti_bpsk.m

📁 这是Alamouti的STBC的Matlab源程序
💻 M
字号:
function BER = Alamouti_BPSK( num_trans, num_rx, SNR)
%计算BPSK调制方式下Alamouti编码的误比特率
%BER:误比特率;num_trans:发送的比特组数;
%num_rx:接收天线的个数;SNR:给定的信噪比
%

if (num_trans < 1) || (num_rx < 1) || (SNR < 0)
    disp('参数错误');
    return;
end;

num_biterr_total = 0;   %总的误比特个数
for loop = 1 : num_trans
    
    %产生信源
    %S:2×2,sij:第i根发射天线在第j个slot发送的信号
    S = zeros(2, 2);
    seed = sign(randn(1, 2));
    S(1, 1) = seed(1);
    S(2, 1) = seed(2);
    S(1, 2) = -conj(seed(2));
    S(2, 2) = conj(seed(1));
    
    %产生信道衰落系数
    %H:2×num_rx,hij:第i根发射天线和第j根接收天线之间的衰落系数
    H = zeros(2, num_rx);
    A = randn(2, num_rx);
    B = randn(2, num_rx);
    H = complex(A, B);
    H = H / sqrt(2);    %信道矩阵归一化
    
    %产生接收端AWGN
    %N:2×num_rx,nij:第i个slot内第j根接收天线处的噪声
    sigma = 2 * 10 ^ (-SNR / 10);   %噪声的功率;因为有两根发射天线,每根发射天线的发射功率均为1,所以要乘以2
    N = zeros(2, num_rx);
    C = randn(2, num_rx);
    D = randn(2, num_rx);
    N = complex(C, D);
    N = N / sqrt(2);
    N = sqrt(sigma) * N;    %噪声矩阵归一化,使其中每一个元素的功率=sigma
    
    %接收信号
    %产生接收矩阵:R:2×num_rx,rij:第i个slot内第j根接收天线接收到的信号
    R = zeros(2, num_rx);
    R = S' * H + N;  %生成接收信号
    
    %构造判决统计
    X_kepa = zeros(2, 1);   %最终判决统计结果
    temp1 = zeros(1, num_rx);
    temp2 = zeros(1, num_rx);
    temp3 = zeros(1, num_rx);
    temp4 = zeros(1, num_rx);
    
    temp1 = R(1, :) .* conj(H(1, :));
    temp2 = conj(R(2, :)) .* H(2, :);
    temp3 = R(1, :) .* conj(H(2, :));
    temp4 = conj(R(2, :)) .* H(1, :);
    
    deposit1 = 0;
    deposit2 = 0;
    deposit3 = 0;
    deposit4 = 0;
    
    for subloop = 1 : num_rx
        deposit1 = deposit1 + temp1(subloop);
        deposit2 = deposit2 + temp2(subloop);
        deposit3 = deposit3 + temp3(subloop);
        deposit4 = deposit4 + temp4(subloop);
    end
    
    X_kepa(1, 1) = deposit1 + deposit2;
    X_kepa(2, 1) = deposit3 - deposit4;
    
    %进行最大似然译码
    dist = zeros(2, 2); %距离矩阵
    result = zeros(1, 2); %译码结果
    
    dist(1, 1) = Eucl_Dist(X_kepa(1, 1), -1);
    dist(1, 2) = Eucl_Dist(X_kepa(1, 1), 1);
    dist(2, 1) = Eucl_Dist(X_kepa(2, 1), -1);
    dist(2, 2) = Eucl_Dist(X_kepa(2, 1), 1);
    
    if dist(1, 1) < dist(1, 2)
        result(1) = -1;
    else
        result(1) = 1;
    end;
    if dist(2, 1) < dist(2, 2)
        result(2) = -1;
    else
        result(2) = 1;
    end;
    
    %统计误比特个数
    num_biterr_temp = 0;
    if result(1) ~= S(1, 1)
        num_biterr_temp = num_biterr_temp + 1;
    end;
    if result(2) ~= S(2, 1)
        num_biterr_temp = num_biterr_temp + 1;
    end;
    num_biterr_total = num_biterr_total + num_biterr_temp;
end
%计算误比特率
BER = num_biterr_total / (num_trans * 2);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -