构建直接序列扩频系统模型(Matlab代码实现)

  欢迎关注

个人主页:我爱Matlab


点赞➕评论➕收藏 == 养成习惯(一键三连)

希望大家多多支持~一起加油

语录:将来的我一定会感谢现在奋斗的自己!

摘要

本文构建直接序列扩频系统模型,使用Matlab对BPSK直接序列扩频通信系统在AWGN信道下性能进行基带建模和仿真,并进行分析。

✨⚡运行结果⚡✨

  1. 编程产生周期长度为31的m序列;
  2. 产生随机发送信息,并分别进行BPSK调制;
  3. 采用m序列作为扩频码,产生扩频信号发送信号;
  4. 对扩频发送信号加入白噪声,得到接收扩频信号;
  5. 对接收信号进行解扩;
  6. 对接收信号进行BPSK解调;
  7. 通过蒙特卡洛方法,仿真系统误码率,画出误码率曲线。
  8. 产生周期长度为31的m序列,记为w; (实验6的内容,m序列周期T=2n-1)(需转换成1、-1)
  9. 产生发送信息0、1比特; (三种方法:循环判断、rand+round、randint/randi)(数据长度L自定,尽量大一些,比如1000)
  10. 对信息比特进行BPSK调制,记为d; (即码型变换:1→1, 0→-1)(注:出于简化,本实验省略载波调制部分)
  11. 对发送信息进行扩频,即d*w; (实现提示1:采用循环的方式,对每位数据进行扩频,运行速度较慢) (实现提示2:可将d的每位数据重复31次,w扩大L次(L为发送数据长度),再点乘。可用函数:repmat函数、reshape函数)
  12. 信号经过信道,叠加白噪声,得到接收端接收信号 ; (噪声功率由信噪比决定,仿真结果横坐标为信噪比,可取-30:5,单位dB) (可使用awgn函数,也可自行实现)
  13. 对接收端信号进行恢复,包括解扩、解调、判决。方法如下:a. 首先与扩频码相乘进行解扩, ;b. 对每位数据扩大的31次进行求和,以第一个数据b1为例,sum(b1);c. 判决,sum(b1)>0,判为1,否则为-1。
  14. 误码率统计,并画图。 (画图函数:semilogy)

构建直接序列扩频系统模型(Matlab代码实现)_第1张图片

♨️‍Matlab代码‍♨️

clc;clear all;
r=5;
N=2^r-1;%周期31
a=ones(1,r);   
m=zeros(1,N);  
for i=1:(2^r-1) 
    temp= mod((a(5)+a(2)),2); 
    for j=r:-1:2
        a(j)=a(j-1);
    end 
    a(1)=temp;
    m(i)=a(r); 
end
m=m*2-1;%双极性码
%产生随机发送信息,并进行BPSK/QPSK调制
n=1000;
Y_BIT_sum=zeros(1,36);
for jj=1:100%跑100次,得到平滑曲线
    source=randi([0 1],1,n);
    % s_imag=randi(1,n);
    s_BPSK=2*source-1;
    % s=source+j*s_imag;
    % j=sqrt(-1);
    % s_QPSK=s*2-(1+j);
    %产生扩频信号:
    % for z=1:1:100
    %     y_QPSK(31*(z-1)+(1:31))=m*s_QPSK(z);
    % end
    for z=1:1000
        y_BPSK(31*(z-1)+(1:31))=m*s_BPSK(z);
    end
    %加入高斯白噪声
    SNR=-30:5;
    for i=1:length(SNR)
        y(i,:)=awgn(y_BPSK,SNR(i));
    end
    %解扩
    for z=1:1000
        for i=1:length(SNR)
            o_BPSK(i,z)=y(i,31*(z-1)+(1:31))/m;
        end
    end
    Y_RE=o_BPSK;
    %判决
    Y_RE(o_BPSK>0)=1;
    Y_RE(o_BPSK<0)=0;
    Y_ERRO=zeros(length(SNR),1000);
    Y_BIT=zeros(1,length(SNR));
    for i=1:length(SNR)
        Y_ERRO(i,:)=abs(Y_RE(i,:)-source);
        Y_BIT(i)=sum(Y_ERRO(i,:))/n;
    end
    Y_BIT_sum=Y_BIT_sum+Y_BIT;
end
Y_BIT_av=Y_BIT_sum/100;
semilogy(SNR,Y_BIT_av);
xlabel('SNR');ylabel('误码率');
grid on;
title('wml');

参考文献

[1]曹旺斌,康辉,谢志远,梁晓林,胡正伟.MIMO-PLC直接序列扩频系统编码方法研究[J].中国电机工程学报,2021,41(S1):121-129.DOI:10.13334/j.0258-8013.pcsee.211063.

你可能感兴趣的:(优化算法,算法,matlab,开发语言)