基于Matlab实现BPSK、QPSK 和 16QAM 调制的循环前缀和直接序列扩频(Matlab代码实现)

     目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码

💥1 概述

该项目的目的是模拟不同调制方案(BPSK,QPSK,16QAM)的OFDM系统,无需编码,并使用(1/3)重复编码。

用于瑞利平坦衰落通道和频率选择性衰落通道。

📚2 运行结果

主函数部分代码:

clc, clear, close all
% Generate Random Bit stream bk
L = 1e6;
Eb_BPSK = 1;
bk = randi([0 1], 1, L);


% Generate BPSK symbols based on the bit stream xk
xk = bk;
xk(xk == 1) = sqrt(Eb_BPSK);
xk(xk == 0) = -sqrt(Eb_BPSK);


% Generate the complex channel vector and complex noise vector
N = 1:10;
N0 = Eb_BPSK ./ (10 .^ (N ./ 10)); % assumption
BER_v = zeros(1, 10);
SNR = zeros(1, 10);
for i = 1:10
    hr = normrnd(0, sqrt(0.5), 1, L);
    hi = normrnd(0, sqrt(0.5), 1, L);
    channel_BPSK = hr + 1j * hi;
    nc = normrnd(0, sqrt(N0(i) / 2), 1, L);
    ns = normrnd(0, sqrt(N0(i) / 2), 1, L);
    Noise_BPSK = nc + 1j * ns;
    % Compute the received symbol vector yk
    yk = channel_BPSK .* xk + Noise_BPSK;
    % Compensate for the channel gain at the receiver
    bk_telda = yk ./ channel_BPSK;                
    bk_telda(bk_telda > 0) = 1;
    bk_telda(bk_telda < 0) = 0;
    
    % Compute the bit-error rate (BER) for SNR
    BER = 0;
    for n = 1:L
        if(bk_telda(n) ~= bk(n))
            BER = BER + 1;
        else
            continue;
        end
    end
    BER_v(i) = BER / L;
    SNR(i) = 10 * log10(Eb_BPSK / N0(i));
end
semilogy(SNR, BER_v);
title('BER vs. SNR for BPSK before repetition');
xlabel('SNR (dB)');
ylabel('BER');
grid on;
hold on;


% % Theoritacl Calculation
% BER_TH = zeros(length(N), 20);
% BER_TH(:, 1) = berfading(N, 'psk', 4, 1);
% semilogy(N, BER_TH)
% legend('Practical BER','Theoritical BER')


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Repeat the code
clc, clear
% Generate Random Bit stream bk
L = 1e6;
Eb_BPSK = 1;
bk = randi([0 1], 1, L);


% Generate BPSK symbols based on the bit stream xk
xk = bk;
xk(xk == 1) = sqrt(Eb_BPSK);
xk(xk == 0) = -sqrt(Eb_BPSK);
xk_rep = repelem(xk, 3);
xk_ver = zeros(1, L);
BER_ver = zeros(1, 10);
% Generate the complex channel vector and complex noise vector
N = 1:10;
N0 = Eb_BPSK ./ (10 .^ (N ./ 10)); % assumption
SNR = zeros(1, 10);
for i = 1:10
    hr = normrnd(0, sqrt(0.5), 1, 3 * L);
    hi = normrnd(0, sqrt(0.5), 1, 3 * L);
    channel_BPSK = hr + 1j * hi;
    nc = normrnd(0, sqrt(N0(i) / 2), 1, 3 * L);
    ns = normrnd(0, sqrt(N0(i) / 2), 1, 3 * L);
    Noise_BPSK = nc + 1j * ns;
    % Compute the received symbol vector yk
    yk = channel_BPSK .* xk_rep + Noise_BPSK;
    % Compensate for the channel gain at the receiver
    bk_telda = yk ./ channel_BPSK;                
    bk_telda(bk_telda > 0) = 1;
    bk_telda(bk_telda < 0) = 0;
    
    % make the decsion
    counter = 1;
    for j = 1:3:3*L
        if((bk_telda(j) + bk_telda(j+1) + bk_telda(j+2)) > 1)
            xk_ver(counter) = 1;
        else
            xk_ver(counter) = 0;
        end
        counter = counter + 1;
    end

🎉3 参考文献

[1]于江,王春岭,沈刘平,张磊.扩频通信技术原理及其应用[J].中国无线电,2010(03):44-47.

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

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Simulink是MATLAB公司推出的一款可视化建模和仿真工具,可用于模拟和设计各种通信系统,包括扩频通信系统。扩频通信是一种利用扩频技术将窄带信号转换为宽带信号并传输的通信方式。在Simulink中,可以使用现有的扩频通信模块,例如扩频码发生器、扩频码识别器、扩频解调器等,来构建扩频通信系统模型。下面将详细介绍Simulink中扩频通信的建模和仿真过程。 1. 扩频码发生器模块 扩频通信中需要用到扩频码,可以使用Simulink中提供的扩频码发生器模块生成。在Simulink库中搜索“Pseudorandom Binary Sequence Generator”模块,可以找到扩频码发生器模块。该模块可以生成不同长度的伪随机二进制序列(PRBS),用于扩频调制。 2. 扩频调制模块 扩频调制模块将基带信号与扩频码进行乘积运算,得到扩频信号。在Simulink库中搜索“Direct Sequence Spread Spectrum Modulator”模块,可以找到扩频调制模块。该模块可以将基带信号与扩频码进行乘积运算得到扩频信号,同时支持不同的调制方式,如BPSK、QPSK16QAM等。 3. 扩频解调模块 扩频解调模块将接收到的扩频信号与接收端的扩频码进行乘积运算,得到基带信号。在Simulink库中搜索“Direct Sequence Spread Spectrum Demodulator”模块,可以找到扩频解调模块。该模块可以将接收到的扩频信号与接收端的扩频码进行乘积运算得到基带信号。 4. 信道模型模块 在实际的通信中,信号会受到信道的影响。为了更真实地模拟通信系统,需要加入信道模型。在Simulink库中搜索“Additive White Gaussian Noise”模块,可以找到信道模型模块。该模块可以模拟加性高斯白噪声(AWGN)信道,可以设置信噪比(SNR)等参数。 5. BER性能分析模块 为了评估通信系统的性能,需要进行误码率(BER)的分析。在Simulink库中搜索“Error Rate Calculation”模块,可以找到BER性能分析模块。该模块可以计算接收信号与发送信号的误差,并输出误码率等性能参数。 通过上述步骤,可以利用Simulink建立扩频通信系统的模型,并进行仿真分析。在建立模型的过程中,需要考虑信号的采样率、信噪比、信道模型等因素。通过仿真分析,可以优化系统参数,提高通信系统的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值