基于matlab的扩频通信误码率仿真

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 基于matlab的扩频通信误码率仿真

1.算法描述

   扩展频谱通信,简称扩频通信,是一种信息传输方式,其信号所占有的频带宽度远大于所传信息必需的最小带宽;频带的扩展是通过一个独立的码序列(一般是伪随机码)来完成,用编码及调制的方法来实现的,与所传信息数据无关;在接收端则用同样的码进行相关同步接收、解扩及恢复所传信息数据。

  根据香农(C.E.Shannon)在信息论研究中总结出的信道容量公式,即香农公式:

C=W×Log2(1+S/N)

式中:C--信息的传输速率S--有用信号功率W--频带宽度N--噪声功率

   为了提高信息的传输速率C,可以从两种途径实现,既加大带宽W或提高信噪比S/N。换句话说,当信号的传输速率C一定时,信号带宽W和信噪比S/N是可以互换的,即增加信号带宽可以降低对信噪比的要求,当带宽增加到一定程度,允许信噪比进一步降低,有用信号功率接近噪声功率甚至淹没在噪声之下也是可能的。扩频通信就是用宽带传输技术来换取信噪比上的好处,这就是扩频通信的基本思想和理论依据。

   在扩频发信机中,射频载波通常经过两次调制过程:一次同常规调制一样,被信息信号所调制;另一次由码序列进行扩频调制,相应地在收信机中先用约定的码序列做相关处理(解扩),然后再进行信息信号的解调。
    在发端输入的信息先经信息调制形成数字信号,然后由扩频码发生器产生的扩频码序列去调制数字信号以展宽信号的频谱。展宽后的信号再调制到射频发送出去。

在接收端收到的宽带射频信号,变频至中频,然后由本地产生的与发端相同的扩频码序列去相关解扩。再经信息解调、恢复成原始信息输出。

   由此可见,—般的扩频通信系统都要进行三次调制和相应的解调。一次调制为信息调制,二次调制为扩频调制,三次调制为射频调制,以及相应的信息解调、解扩和射频解调。与一般通信系统比较,扩频通信就是多了扩频调制和解扩部分。

扩频系统包括以下几种扩频方式:

(1)直接序列扩频

简称DS(DirectSequence):就是用高码率的扩频码序列在发端直接去扩展信号的频谱,在收端直接使用相同的扩频码序列对扩展的信号频谱进行解调,还原出原始的信息。直接序列扩频信号由于将信息信号扩展成很宽的频带,它的功率频谱密度比噪声还要低,使它能隐蔽在噪声之中,不容易被检测出来。对于干扰信号,收信机的码序列将对它进行非相关处理,使干扰电平显著下降而被抑制。这种方式运用最为普遍,成为行业领域研究的热点。

(2)跳频扩频

简称FH(FrequencyHopping):所谓跳频,比较确切的意思是:用一定码序列进行选择的多频率频移键控。也就是说,用扩频码序列去进行频移键控调制,使载波频率不断地跳变,所以称为跳频。频率跳变系统有称为"多频、码选、频移键控"系统,主要由码产生器和频率合成器两部分组成。一般选取的频率数为十几个至几百个,频率跳变的速率为10~105跳/秒。信号在许多随机选取的频率上迅速跳频,可以避开跟踪干扰或有干扰的频率点。

(3)跳时扩频

简称TH(TimeHopping):与跳频相似,跳时是使发射信号在时间轴上跳变。首先把时间轴分成许多时片。在一帧内哪个时片发射信号由扩频码序列去进行控制。可以把跳时理解为:用一定码序列进行选择的多时片的时移键控。跳时扩频系统主要通过扩频码控制发射机的通断,可以减少时分复用系统之间的干扰。

(4)宽带线性调频

简称Chirp(ChirpModulation):如果发射的射频脉冲信号在一个周期内,其载频的频率作线性变化,则称为线性调频。因为其频率在较宽的领带内变化,信号的频带也被展宽了。这种扩频调制方式主要用在雷达中,但在通信中也有应用。

(5)混合方式

上述几种基本扩频系统各有优缺点,单独使用一种系统有时难以满足要求,将以上集中扩频方法结合就构成了混合扩频系统,常见的有FH/DS、TH/DS、FH/TH等。

2.仿真效果预览
matlab2022a仿真结果如下:
7459de18bad53fe65b7e06daf86b9b1b_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

3.MATLAB核心程序

        %内插,使数据在调制之前与调制信号采样率相同
        %如果有成型滤波,则内插零;如成型滤波器为矩形,内插相当于采样
        % disp('成型滤波')
        % define filter-related parameters
        rolloff=0.5; % rolloff factor of filter
        rate=nsamp; % rate is the number of points in each input symbol period of length T
        N_T=[-2 2]; % a length-two vector that indicates the number of symbol periods before and after the peak response
        FirCoefNum=4*nsamp;
        % create a square root raised cosine filter
        [rrcfilter,sample_time] = rcosfir(rolloff, N_T, rate, 1,'sqrt');
        % % plot impulse response
        % figure; impz(rrcfilter,1);
        % figure; freqz(rrcfilter,1);
        % upsample and apply square root raised cosine filter
        BW_rrcfilter=10;
        rrcfilter_FixPoint=HSSSim_FixPointFunc(rrcfilter,max(abs(rrcfilter)),BW_rrcfilter);
        
        ShapedDataI= (rcosflt(FrameDataI,1,nsamp,'filter',rrcfilter))';
        ShapedDataQ= (rcosflt(FrameDataQ,1,nsamp,'filter',rrcfilter))';
        
        SendData=ShapedDataI+1i*ShapedDataQ;
        %%
        %通过信道
        %choice1:不加噪声和相偏
%                 ReceivedData=SendData;
        %choice2:通过高斯加性白噪声信道
        ReceivedData=awgn(SendData,EcN0(tt),'measured','db');
%         % %加随机相偏
        ReceivedData=ReceivedData*exp(1i*2*pi*0.33);
%         %         %         % % % %         %加频偏
        fd=53; %频偏为60k
        Rc=3840;%码片速率
        afa=fd/Rc/nsamp;%频偏
        ReceivedData=ReceivedData.*exp(1i*2*pi*afa*[1:length(ReceivedData)]);
        %%
        %AD:满量程为16V 量化为13个比特
        BW_AD=13;
        ReceivedDataI=real(ReceivedData);
        ReceivedDataQ=imag(ReceivedData);
        ReceivedDataI_FixPoint=HSSSim_FixPointFunc(ReceivedDataI,16,BW_AD);
        ReceivedDataQ_FixPoint=HSSSim_FixPointFunc(ReceivedDataQ,16,BW_AD);
        
        %%
        %匹配滤波
        
        MatchedDataI=filter(rrcfilter_FixPoint,1,ReceivedDataI_FixPoint);
        MatchedDataQ=filter(rrcfilter_FixPoint,1,ReceivedDataQ_FixPoint);
        
        Es_BW_MatchedData=ceil(log2(max([abs(MatchedDataI) abs(MatchedDataQ)])))+1; %匹配滤波后数据的有效位长
        
        BW_MatchedDataTrunc=10; %截尾7比特
        MatchedDataI=HSSSim_TruncateFunc(MatchedDataI,BW_MatchedDataTrunc);
        MatchedDataQ=HSSSim_TruncateFunc(MatchedDataQ,BW_MatchedDataTrunc);
        %%
        %码同步
        X=16;
        P=256;
        M=P*X;
        %做码相关
        i=0; %采样点序号
        k=0; %部分相关后的序号
        ChipSynFlag=0;
        FirstSampleChipSyn=0;
        SynLoc=0;
        ChipSynFailNum=0;
        UniqueCodeCorrFailNum=0;
        while ChipSynFlag==0
            i=i+1;
            k=0;
            for ii=1:X*P %一次PMF运算需要的点数
                PMFInputI(ii)=MatchedDataI(i+(ii-1)*nsamp)*SynCodeIni_polar(rem(ii-1,SynCodeLength)+1);
                PMFInputQ(ii)=MatchedDataQ(i+(ii-1)*nsamp)*SynCodeIni_polar(rem(ii-1,SynCodeLength)+1);
                
                if rem(ii,X)==0  %部分相加
                    k=k+1;
                    PMFDataI(k)=sum(PMFInputI(ii-X+1:ii));
                    PMFDataQ(k)=sum(PMFInputQ(ii-X+1:ii));
                end;
            end;
            Es_BW_PMFData=ceil(log2(max([abs(PMFDataI) abs(PMFDataQ)])))+1; %PMF数据的有效位长
            
            PMFData=PMFDataI+1i*PMFDataQ;
            PMF_FFT=floor(fft(PMFData,P));
            
            %对FFT后的数据加窗
            PMF_FFT_W=PMF_FFT(2:end-1)-floor(0.5*PMF_FFT(1:end-2))-floor(0.5*PMF_FFT(3:end));
            
            Es_BW_PMF_FFT_W=ceil(log2(max([abs(real(PMF_FFT_W)) abs(real(PMF_FFT_W))])))+1; %PMF做FFT运算后数据的有效位长
            
            %             Abs_PMF_FFT=abs(PMF_FFT)/M;%归一化FFT
            Abs_Max_PMF_FFT_W=floor(abs(PMF_FFT_W)/M);%归一化FFT
            %             [Max_PMF_FFT Max_loc]=max(Abs_PMF_FFT);
            [Max_PMF_FFT_W(i) Max_loc_W]=max(Abs_Max_PMF_FFT_W);%频偏为afa=Max_loc_W/X/P/nsamp
            
            TH_Max_PMF_FFT_W=2*mean(Max_PMF_FFT_W); %自适应捕获门限
            
            if FirstSampleChipSyn==0
                if Max_PMF_FFT_W(i)>TH_Max_PMF_FFT_W
                    FirstSampleChipSyn=1; %用来寻找最佳采样点
                    SynLoc=i;
                    FreqOffsetLoc=Max_loc_W;
                    Max_PMF_FFT_In3=Max_PMF_FFT_W(i);
                else
                    FirstSampleChipSyn=0;
                end;
            elseif FirstSampleChipSyn==1 %状态判断 %只要超出门限,就继续计算该样点后面两个点的Max_PMF_FFT_W,取3个中的最大点作为同步点。
                FirstSampleChipSyn=2; %状态判断
                if Max_PMF_FFT_W(i)>Max_PMF_FFT_In3
                    Max_PMF_FFT_In3=Max_PMF_FFT_W(i);
                    SynLoc=i;
                    FreqOffsetLoc=Max_loc_W;
                end;
            elseif FirstSampleChipSyn==2
                ChipSynFlag=1;
                FirstSampleChipSyn=0;
                if Max_PMF_FFT_W(i)>Max_PMF_FFT_In3
                    Max_PMF_FFT_In3=Max_PMF_FFT_W(i);
                    SynLoc=i;
                    FreqOffsetLoc=Max_loc_W;
                end;
            end;
        end;
        %%
%         %频偏校正
        if ChipSynFlag==1 %如果完成码同步和频偏估计,则进行频偏校验及独特码同步
            afa_est=Max_loc_W/X/P/nsamp;
            MatchedData=MatchedDataI+1i*MatchedDataQ;
            MatchedData_FdRevised=MatchedData.*exp(-1i*2*pi*afa_est*[1:length(ReceivedData)]);
            MatchedDataI=real(MatchedData_FdRevised);
            MatchedDataQ=imag(MatchedData_FdRevised);
            %%
            %独特码同步
            %直扩码解扩
            
            SynLoc2=SynLoc+X*P*nsamp; %同步后第一个码片的采样位置
            CorrValueI=0; %相关值
            CorrValueQ=0; %相关值
            UniqueCodeCorrFlag=0; %独特码相关标志
            FirstCorr=0;
            while ~UniqueCodeCorrFlag
                CorrValueI=0; %相关值
                CorrValueQ=0; %相关值
                for i=1:SynCodeLength
                    CorrValueI=CorrValueI+MatchedDataI(SynLoc2+(i-1)*nsamp)*SynCodeIni_polar(i); %解扩后的值
                    CorrValueQ=CorrValueQ+MatchedDataQ(SynLoc2+(i-1)*nsamp)*SynCodeIni_polar(i);
                end;
                if FirstCorr==0
                    FirstCorr=1;
                    CorrValueCnt=1;
                    PreCorrValueI=CorrValueI;
                    PreCorrValueQ=CorrValueQ;
                    SynLoc2=SynLoc2+nsamp*SynCodeLength;
                else
                    DiffValue=-sign(CorrValueI*PreCorrValueI+CorrValueQ*PreCorrValueQ); %对QPSK解调
                    if CorrValueCnt<13
                        DiffValueArray(CorrValueCnt)=DiffValue;
                        CorrValueCnt=CorrValueCnt+1;
                    else
                        DiffValueArray(CorrValueCnt)=DiffValue;
                        UniqueCorrValue=DiffValueArray*UniqueCode_polar';
                        if UniqueCorrValue>10
                            UniqueCodeCorrFlag=1;
                        end;
                        DiffValueArray(1:end-1)=DiffValueArray(2:end); %寄存器移位
                    end;
                    PreCorrValueI=CorrValueI;
                    PreCorrValueQ=CorrValueQ;
                    SynLoc2=SynLoc2+nsamp*SynCodeLength;
                end;
            end;
%             SynLoc2
            %%
            if UniqueCodeCorrFlag==1 %如果完成独特码同步,则进行多进制解扩
                %多进制解扩
                %先解扩
                EndofArray=0; %运算结束标记
                CulCnt=0;
                while ~EndofArray
                    CulCnt=CulCnt+1;
                    for i=1:BranchI
                        OrthCorrValueI(i)=0;
                        OrthCorrValueQ(i)=0;
                        for j=1:OrthCodeLength
                            OrthCorrValueI(i)=OrthCorrValueI(i)+(MatchedDataI(SynLoc2+(j-1)*nsamp)+1i*MatchedDataQ(SynLoc2+(j-1)*nsamp))*OrthCodeI_polar(i,j);
                            OrthCorrValueQ(i)=OrthCorrValueQ(i)+(MatchedDataQ(SynLoc2+(j-1)*nsamp)-1i*MatchedDataI(SynLoc2+(j-1)*nsamp))*OrthCodeQ_polar(i,j);
相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
相关文章
|
8天前
|
机器学习/深度学习 算法 机器人
基于QLearning强化学习的较大规模栅格地图机器人路径规划matlab仿真
本项目基于MATLAB 2022a,通过强化学习算法实现机器人在栅格地图中的路径规划。仿真结果显示了机器人从初始位置到目标位置的行驶动作序列(如“下下下下右右...”),并生成了详细的路径图。智能体通过Q-Learning算法与环境交互,根据奖励信号优化行为策略,最终学会最优路径。核心程序实现了效用值排序、状态转换及动作选择,并输出机器人行驶的动作序列和路径可视化图。
149 85
|
7天前
|
算法 Serverless
基于魏格纳函数和焦散线方法的自加速光束matlab模拟与仿真
本项目基于魏格纳函数和焦散线方法,使用MATLAB 2022A模拟自加速光束。通过魏格纳函数法生成多种自加速光束,并设计相应方法,展示仿真结果。核心程序包括相位和幅度的计算、光场分布及拟合分析,实现对光束传播特性的精确控制。应用领域涵盖光学成像、光操控和光束聚焦等。 关键步骤: 1. 利用魏格纳函数计算光场分布。 2. 模拟并展示自加速光束的相位和幅度图像。 3. 通过拟合分析,验证光束加速特性。 该算法原理基于魏格纳函数描述光场分布,结合数值模拟技术,实现对光束形状和传播特性的精确控制。通过调整光束相位分布,可改变其传播特性,如聚焦或加速。
|
7天前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。
|
4天前
|
机器学习/深度学习 算法 计算机视觉
基于CNN卷积神经网络的金融数据预测matlab仿真,对比BP,RBF,LSTM
本项目基于MATLAB2022A,利用CNN卷积神经网络对金融数据进行预测,并与BP、RBF和LSTM网络对比。核心程序通过处理历史价格数据,训练并测试各模型,展示预测结果及误差分析。CNN通过卷积层捕捉局部特征,BP网络学习非线性映射,RBF网络进行局部逼近,LSTM解决长序列预测中的梯度问题。实验结果表明各模型在金融数据预测中的表现差异。
|
8天前
|
算法
基于龙格库塔算法的锅炉单相受热管建模与matlab数值仿真
本设计基于龙格库塔算法对锅炉单相受热管进行建模与MATLAB数值仿真,简化为喷水减温器和末级过热器组合,考虑均匀传热及静态烟气处理。使用MATLAB2022A版本运行,展示自编与内置四阶龙格库塔法的精度对比及误差分析。模型涉及热传递和流体动力学原理,适用于优化锅炉效率。
|
6天前
|
移动开发 算法 计算机视觉
基于分块贝叶斯非局部均值优化(OBNLM)的图像去噪算法matlab仿真
本项目基于分块贝叶斯非局部均值优化(OBNLM)算法实现图像去噪,使用MATLAB2022A进行仿真。通过调整块大小和窗口大小等参数,研究其对去噪效果的影响。OBNLM结合了经典NLM算法与贝叶斯统计理论,利用块匹配和概率模型优化相似块的加权融合,提高去噪效率和保真度。实验展示了不同参数设置下的去噪结果,验证了算法的有效性。
|
5天前
|
算法 决策智能
基于SA模拟退火优化算法的TSP问题求解matlab仿真,并对比ACO蚁群优化算法
本项目基于MATLAB2022A,使用模拟退火(SA)和蚁群优化(ACO)算法求解旅行商问题(TSP),对比两者的仿真时间、收敛曲线及最短路径长度。SA源于金属退火过程,允许暂时接受较差解以跳出局部最优;ACO模仿蚂蚁信息素机制,通过正反馈发现最优路径。结果显示SA全局探索能力强,ACO在路径优化类问题中表现优异。
|
5月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
253 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
5月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
150 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
5月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
121 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码