m基于扩频解扩的通信链路误码率matlab仿真,调制对比QPSK,16QAM,64QAM,扩频参数可以设置

发布时间 2023-07-13 00:11:18作者: 我爱C编程

1.算法仿真效果

matlab2022a仿真结果如下:

 

 

 

 

 

 

 

 

2.算法涉及理论知识概要

       与很多的通信技术类似,扩频技术最初也应用于保密通信和制导系统等军事技术。除了在军事通信中的应用,扩频技术在无线通信领域也有发展。目前扩频通信技术已经在测距、卫星通信、GPS导航定位、移动通信、电子对抗、跟踪、遥控和蓝牙技术等方面广泛应用。扩频通信技术具有很多独特的优点:具有抗干扰能力强和截获率低等独特优点,而且具备码分多址(CDMACode Divided Multiple Access)或称为扩频多址(SSMASpreadSpectrumMultiple Access)的能力,因此广泛应用于商业、银行、宾馆、能源和交通业等行业。因为应用广泛受到世界各国的特别关注,尤其是在近年来随着超大规模的集成电路和微处理技术快速发展,使得扩频技术在各个行业得到更多的发展。随着数字技术的飞速发展,数字扩频技术不仅完成模拟扩频的所有功能,而且在性能和精度方面都有很大的优势,所以数字扩频技术将在未来被更广泛的应用。

 

        在扩频通信技术中,发送端将原始信号的频带进行扩展,得到扩频信号,然后在接收端通过对信号进行解扩处理,恢复原始信号。根据通信系统产生的扩频方式,可以将扩频通信分为5类:直接序列扩展频谱(Direct Sequence Spread Spectrum Communication Systems)、频率跳变扩频通信系统(Frequecy Hopping Spread Spectrum Communication SystemsFH-SS)、跳时扩频通信系统(Time Hopping Spectrum Communication SystemsTH-SS)、线性脉冲调频系统(chirp)和混合扩频通信系统,扩频技术在未来无线通信技术中,仍是重要部分,很多方面需要继续去探索,因此扩频技术的研究不能停滞不前。

 

       基于扩频解扩的通信链路是一种数字通信技术,它可以在低信噪比条件下实现高速数据传输。该技术的基本思想是将原始数据信号通过扩频码进行编码,然后将编码后的信号传输到接收端进行解码。下面我们将从数学公式和算法实现两个方面详细介绍基于扩频解扩的通信链路。

 

       其中,$n(t)$ 是噪声信号。由于编码和解码过程中所用的码是对称的,因此解扩过程可以实现信号的抗干扰和抗多径传播的能力,并且在一定程度上可以提高信号的安全性。

       基于扩频解扩的通信链路的算法实现可以分为两个部分:编码和解码。编码过程将原始数据信号编码为扩频信号,解码过程将接收到的扩频信号解码为原始数据信号。下面我们将分别介绍编码和解码的具体实现过程。

 

2.1 扩频过程

具体实现过程如下:

 

将原始数据信号按照一定的比特数分组,每组比特数为$2n$,其中$n$为正整数。

对于每组比特,将其分成两部分,前$n$个比特表示幅度,后$n$个比特表示相位。

将幅度和相位映射到一组幅度和相位点上,得到幅度$A_i$和相位$\theta_i$

将幅度$A_i$和相位$\theta_i$编码为扩频码$c_i$,得到扩频信号$s_i$。具体实现方法有多种,其中一种常用的方法是使用Walsh-Hadamard码。

将所有的扩频信号$s_i$相加得到总的扩频信号$x(t)$

 

 

2.2 解扩过程

具体实现过程如下:

 

对接收到的扩频信号进行解扩,得到解扩信号$z(t)$。具体实现方法有多种,其中一种常用的方法是使用相关器进行解扩。

将解扩信号$z(t)$分为幅度和相位两部分,分别得到幅度$A_i$和相位$\theta_i$

对于每组幅度和相位,根据其对应的扩频码$c_i$进行解码,得到原始数据信号的幅度和相位。

将每组幅度和相位恢复为原始数据信号,得到解码后的原始数据信号。

 

 

       综上所述,基于扩频解扩的通信链路是一种可以提高信号抗干扰和抗多径传播能力的数字通信技术。其实现过程包括编码和解码两个部分,编码过程将原始数据信号映射到幅度和相位点上,然后编码为扩频信号,解码过程将接收到的扩频信号解扩,并将解扩信号解码为原始数据信号。在实际应用中,还需要考虑多种因素,如信道的噪声特性、码的长度、码的频率特性等,以实现更好的性能和效果。

 

3.MATLAB核心程序

 

N        = 516;   
TJL      = 2000;
%得到扩频倍数,设置1,4,8
fp       = 8;
 
if fp==1
   SNR      = [0:1:24];
end
if fp==4
   SNR      = [0:1:22];
end
if fp==8
   SNR      = [0:1:20];
end
 
 
 
for i=1:length(SNR)
    Bit_err(i) = 0;
    Num_err    = 0;
    Numbers    = 0; %误码率累加器
    while Num_err <= TJL
          Num_err
          fprintf('Eb/N0 = %f\n', SNR(i));
          %产生需要发送的随机数
          Trans_data = round(rand(1,N));  
          %DSSS   
          pseudoNumber          = round(rand(1,fp)');
          [dsss,converted,PN2]  = func_dsss(Trans_data,pseudoNumber,fp);
          Trans_BPSK            = QAM64_modulation(dsss);
          %通过高斯信道
          Rec_BPSK   = awgn(Trans_BPSK,SNR(i),'measured');   
 
          ReData     = QAM64_demodulation(Rec_BPSK);
          %DSSS
          dsss2      = func_dsss2(ReData,pseudoNumber,fp);
 
          x_hat      = round([dsss2+1]/2);
          [nberr,rat]= biterr(x_hat,Trans_data);
          Num_err    = Num_err+nberr;
          Numbers    = Numbers+1;    
    end 
    Bit_err(i)=Num_err/(N*Numbers);
end
figure;
semilogy(SNR,Bit_err,'o-r');
xlabel('Eb/N0(dB)');
ylabel('BER');
grid on;
if fp==1
   save data_QAM641.mat SNR Bit_err
end
if fp==4
   save data_QAM644.mat SNR Bit_err
end
if fp==8
   save data_QAM648.mat SNR Bit_err
end