基于Alamouti 编码的 M-PSK 信号通过莱斯平坦衰落信道传输附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机  电力系统

⛄ 内容介绍

基于Alamouti 编码的 M-PSK 信号通过莱斯平坦衰落信道传输附matlab代码

⛄ 完整代码

clear all; close all; clc

snapshots = 100000;

EbNo = 0:10;

K = [4.0; 0.6];

M = [4; 8]; %Positions of modulation (M-PSK)

Mt = 2;

Mr = [1; 2];

ostbcEnc = comm.OSTBCEncoder('NumTransmitAntennas', Mt); % Alamouti

ric_ber = zeros(length(EbNo), length(M), length(K), length(Mr));

sum_BER = zeros(length(EbNo), length(M), length(K), length(Mr));

for mr = 1:length(Mr)

    ostbcComb = comm.OSTBCCombiner('NumTransmitAntennas', Mt, 'NumReceiveAntennas', Mr(mr));

    H = zeros(Mr(mr), Mt, snapshots);

    ric_msg = zeros(snapshots, Mr(mr));

    for k = 1:length(K)

        mu = sqrt( K(k)/(K(k)+1));

        s = sqrt(1/(K(k)+1));

        for m = 1:length(M)

            hModulator = comm.PSKModulator('ModulationOrder', M(m), 'BitInput', false); 

            hDemod = comm.PSKDemodulator('ModulationOrder', M(m), 'BitOutput', false);

            ric_ber(:,m,k,mr) = berfading(EbNo, 'psk', M(m), Mr(mr)*Mt, K(k));

            snr = EbNo+10*log10(log2(M(m)));

            message = randi([0,M(m)-1],100000,1);

            mod_msg = step(hModulator,message);

            Es = mean(abs(mod_msg).^2);

            alam_msg = step(ostbcEnc, mod_msg);

            % Channel

            h = mu + s*(1/sqrt(2))*(randn(Mr(mr),Mt,snapshots/Mt)...

            + 1j*randn(Mr(mr),Mt, snapshots/Mt));

            H(:,:,1:2:end-1) = h;

            H(:,:,2:2:end) = h;

            pathGainself = permute(H,[3,2,1]);

            % Transmit through the channel

            for q = 1:snapshots;  

                ric_msg(q,:) = (sqrt(Es/Mt)*H(:,:,q)*alam_msg(q,:).').';

            end

            for c = 1:100

                for jj = 1:length(EbNo)

                    noisy_mod = awgn(ric_msg,snr(jj),'measured','dB');

                    decodeData = step(ostbcComb,noisy_mod,pathGainself);

                    demod_msg = step(hDemod,decodeData);

                    [number,BER(c,jj)] = biterr(message,demod_msg);

                end

            end

            sum_BER(:,m, k, mr) = sum(BER)./c;

        end

    end

end

figure(1)

semilogy(EbNo,sum_BER(:,1,1,1),'r-o',EbNo,sum_BER(:,2,1,1),'g-o',...

         EbNo,ric_ber(:,1,1,1),'r-',EbNo,ric_ber(:,2,1,1),'g-',...

         EbNo,sum_BER(:,1,1,2),'b-o',EbNo,sum_BER(:,2,1,2),'y-o',...

         EbNo,ric_ber(:,1,1,2),'b-',EbNo,ric_ber(:,2,1,2),'y-',...

         'LineWidth', 1.5) 

title('Rician model (K = 4.0)') 

legend('QPSK(simulated) 2x1', '8-PSK(simulated) 2x1',...

    'QPSK(theory) 2x1','8-PSK(theory) 2x1',...

    'QPSK(simulated) 2x2', '8-PSK(simulated) 2x2',...

    'QPSK(theory) 2x2','8-PSK(theory) 2x2') 

xlabel('EbNo (dB)') 

ylabel('BER')

grid on

figure(2) 

semilogy(EbNo,sum_BER(:,1,2,1),'r-o',EbNo,sum_BER(:,2,2,1),'g-o',...

         EbNo,ric_ber(:,1,2,1),'r-',EbNo,ric_ber(:,2,2,1),'g-',...

         EbNo,sum_BER(:,1,2,2),'b-o',EbNo,sum_BER(:,2,2,2),'y-o',...

         EbNo,ric_ber(:,1,2,2),'b-',EbNo,ric_ber(:,2,2,2),'y-',...

         'LineWidth', 1.5) 

title('Rician model (K = 0.6)') 

legend('QPSK(simulated) 2x1', '8-PSK(simulated) 2x1',...

    'QPSK(theory) 2x1','8-PSK(theory) 2x1',...

    'QPSK(simulated) 2x2', '8-PSK(simulated) 2x2',...

    'QPSK(theory) 2x2','8-PSK(theory) 2x2')  

xlabel('EbNo (dB)') 

ylabel('BER')

grid on

⛄ 运行结果

⛄ 参考文献

[1]于子甲, 董全德, 徐旭. 基于Alamouti的MIMO系统仿真设计[J]. 贵阳学院学报:自然科学版, 2020, 15(1):5.

[21]李万臣, 鄂颖. 基于Alamouti空时码的网络编码协作技术的研究[J].  2013.

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,这是一个关于MATLAB仿真的具体问题。以下是一些可能有用的步骤和代码: 1. 定义系统参数,例如发送天线数,接收天线数,符号数,信道矩阵等。 ``` ntx = 1; % 发送天线数 nrx = 2; % 接收天线数 M = 4; % QPSK调制的符号数 SNR_dB = 0:2:20; % 信噪比范围 N = 1e6; % 仿真次数 H = (randn(nrx,ntx)+1j*randn(nrx,ntx))/sqrt(2); % 信道矩阵 ``` 2. 定义发送信号,并进行Alamouti编码。 ``` x = randi([0,M-1],ntx,N); % 发送符号 s = qammod(x,M); % QPSK调制 s_alamouti = [s; -conj(s(2,:)); conj(s(1,:)); s(2,:)]; % Alamouti编码 ``` 3. 传输信号并加入高斯白噪声。 ``` y = zeros(nrx,N,length(SNR_dB)); for ii = 1:length(SNR_dB) noise_var = 10^(-SNR_dB(ii)/10); % 噪声方差 n = sqrt(noise_var/2)*(randn(nrx,N)+1j*randn(nrx,N)); % 高斯白噪声 r = H*s_alamouti + n; % 接收信号 y(:,:,ii) = r; % 存储接收信号 end ``` 4. 进行信号解码,并计算误码率。 ``` ber = zeros(1,length(SNR_dB)); for ii = 1:length(SNR_dB) r = y(:,:,ii); % 从存储中获取接收信号 y1 = r(1,:); % 第一根接收天线的信号 y2 = r(2,:); % 第二根接收天线的信号 s_hat = zeros(ntx,N); % 估计的发送符号 for jj = 1:N H_hat = [H(1,jj) -conj(H(2,jj)); H(2,jj) conj(H(1,jj))]; % 估计信道矩阵 y_hat = [y1(jj); y2(jj)]; % 估计的接收信号 s_hat(:,jj) = qamdemod(H_hat'*y_hat,M); % 解调并估计发送符号 end ber(ii) = sum(sum(x~=s_hat))/N/ntx; % 计算误码率 end ``` 以上是一个简单的MATLAB仿真代码,可以用于研究Alamouti编码在瑞利平衰落信道下的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值