基于MATLAB的OFDM通信链路仿真,输出星座图以及频偏锁定同步

简介: 基于MATLAB的OFDM通信链路仿真,输出星座图以及频偏锁定同步

1.算法描述

      正交频分复用(orthogonal frequency-division multiplexing, OFDM) 技术是一种多载波数字调制技术,它具有抗多径能力强,频谱利用率高等优点,与其他技术结合在一起应用到第四代移动通信中。但OFDM 技术的缺点是对定时同步误差和频率偏差非常敏感。定时偏差会造成相位的旋转,而频率偏移会使OFDM 各子载波间正交性遭到破坏,系统性能急剧恶化。因此准确地时频同步对提升OFDM 系统的整体性能起到非常关键的作用。

    正交频分复用(OFDM)技术的概念最早出现于20世纪50年代中期。当时由于使用模拟滤波器实现的系统,复杂度较高,因此一直没有真真正正发展起来。到了60年代,人们开始对多载波调制(MCM)技术进行了许多理论上的研究,形成了并行数据传输以及频分复用(FDM)的思想,这些思想使得OFDM技术最先在美国军用高频通信系统得到应用。Weinstem和Ebert于1971年建议使用离散傅立叶逆变换(IDFT)以及离散傅立叶变换(DFT)来实现基带的调制和解调,这样就大大降低了多载波系统的复杂度。Saltzberg对OFDM进行了性能分析,并得出以下结论:在OFDM中主要限制就是信道的干扰。为了对抗信道间干扰(ICI)和符号间干扰(ISI),Peled和Ruiz引入了循环前缀(CP,Cyclic Prefix)的概念,其中不是使用空的保护空间,而是使用OFDM码元的周期扩展,只要循环前缀大于信道的最大多径时延扩展,就可以有效地模拟实现周期卷积的信道。但是,使用CP的代价是要丧失部分信号能量,这些能量与CP的长度成正比,然而使用CP所获得的好处通常要远大于信号能量损失。正交频分复用(OFDM)是一种特殊的多载波调制方式,它的基本思想是将高速传输的数据流通过串/并变换,变成在若干个正交的窄带子信道上并行传输的低速数据流。OFDM技术将传送的数据信息分散到各个子载波上,从而大大增加了每个符号的持续时间,使得符号周期大于多径时延,因此可以减轻由无线信道的多径时延扩展所产生的时间弥散性对系统所造成的影响。并且还可以在OFDM符号之间插入保护间隔,令保护间隔大于无线信道的最大时延扩展,这样就可以最大限度地消除由于多径而带来的符号间干扰(ISI)。而且一般都采用循环前缀作为保护间隔,从而可以避免由多径而带来的信道间干扰(ICI)。OFDM技术利用信号的时频正交性,允许子信道频谱有部分重叠,使得频谱利用率提高近一倍,因而具有非常高的频谱利用率。

   OFDM系统框图如图所示。

84ce0623a966dbe30f2bd8a1ab2fd701_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
958bf8f85cdc88a9a798afa426d81c91_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

    符号定时同步的任务是在接受数据流中寻找OFDM符号的分界。MIMO-OFDM系统的符号定时和单载波系统有很大的区别,单载波系统传送的符号有一个最佳抽样点,也就是其眼图张开的最大点处;而OFDM的符号不存在眼图,也就没有所谓的最佳抽样点。它的特点是一个符号由N个抽样点(N为系统子载波个数)组成,符号定时也就是要确定一个符号开始的时间。符号同步的结果用来判定各个OFDM符号中用来解调符号中的各子载波。当符号同步算法定时在OFDM符号的第一个样值时,MIMO-OFDM接收机的抗多径效应的性能达到最佳。 理想的符号同步就是选择最佳的FFT窗,使子载波保持正交,且ISI被完全消除或者降至最小。由于使用了循环前缀技术,MIMO-OFDM 系统能够容忍一定的符号定时误差而不受到性能上损失。所以MIMO-OFDM系统对定时偏差不像对频率偏差那么敏感。 

    采样频率的同步是指发射端 的D/A变换器和接收端的A/D变换器的工作频率保持一致。一般地,连接各个变换器之间的偏差较小,相对于载波频移的影响来说也较小,而一帧的数据如果不太长的话,只要保证了帧同步的情况下,可以忽略采样时钟不同步时造成的漏采样或多采样,而只需要在一帧数据中补偿由于采样偏移造成的相位噪声。

    整数频偏尽管造成信息符号在子信道上平移,但并不破坏子载波间的正交性,只会引起OFDM 信号的频谱结构错位,导致接收机恢复的数据码元序列的循环移位和相位旋转,使接收数据经过FFT 运算输出的顺序相对于发送端产生偏移。小数频偏导致抽样点有些错位,使得在某位置为零时,另一子载波不为零,破坏各子载波间的正交性。因此在完成系统定时同步之后,通过在时域内利用找到的训练符号相关最大值进行小数频偏估计,在频域内利用训练符号移动相关估计整数频偏的方法,就显得极为重要。

时域和频域同步

  OFDM系统对定时以及频率偏移敏感,特别是实际应用中与FDMA、TDMA和CDMA等多址方式相结合使用时,时域和频域同步就更显得尤为重要。与其他的数字通信系统一样,同步分为捕获和跟踪两个阶段。在下行链路中,基站向各个移动终端广播发送同步信号,因此,下行链路的同步相对简单,比较容易实现。在上行链路中,来自不同终端的信号必需同步地到达基站,这样才能保证子载波间的正交性。基站根据各移动终端发来的子载波携带的信息进行时域和频域同步信息的提取,再由基站发回移动终端,以便让移动终端进行同步。在具体实现时,同步将分为时域同步和频域同步,也可以时域和频域同时进行同步;

信道估计

   在OFDM系统中,信道估计器的设计主要有以下两个问题:一、导频信息的选择。由于无线信道通 常是衰落信道,需要不断地对信道进行跟踪,因此导频信息也必须不断传送;二、复杂度比较低以及导频跟踪能力良好的信道估计器的设计。而在实际的设计中,导频信息的选择和最佳估计器的设计又是相互关联的,因为估计器的性能与导频信息的传输方式有很大关系;

3.信道编码和交织

  为了提高数字通信系统的性能,信道编码和交织是普通采用的方法。对于衰落信道中的随机错误,可以采用信道编码;对于存在于衰落信道中的突发错误,可以采用交织技术。实际应用中,通常同时采用信道编码和交织这两种技术,进一步改善整个系统的性能。在OFDM系统中,如果信道衰落不是太严重,均衡时无法再利用信道的分集特性来改善系统性能的,因为OFDM系统自身具有利用信道分集的能力,一般的信道特性信息已经被OFDM这种调制方式本身所利用了。但是,OFDM系统的结构却为在子载波间进行编码提供了机会,形成了COFDM方式。编码可以采用各种码,如分组码、卷积码等,其中卷积码的效果要比分组码好;

4.降低峰值平均功率比

  由于OFDM信号在时域上表现为N个正交子载波信号的叠加,当这N个信号恰好全部以峰值相加时,这时,OFDM信号也将产生最大峰值,该峰值功率可以达到平均功率的N倍。尽管峰值功率出现的概率较低,但为了不失真地传输这些高PAPR的OFDM信号,发送端对高功率放大器(HPA)的线性度要求很高,从而导致发送效率极低,接收端对前端放大器以及A/D变换器的线性度要求也很高。因此,高的PAPR值使得OFDM系统的性能大大下降甚至直接影响实际应用。为了解决这一问题,人们提出了基于信号畸变技术、信号扰码技术和基于信号空间扩展等降低OFDM系统PAPR的方法;

5.均衡

   在一般的衰落环境下,在OFDM系统中,均衡技术不是有效地改善系统性能的方法。因为均衡技术的实质就是补偿多径信道引起的码间干扰,而OFDM技术本身就已经利用了多径信道的分集特性,所以说,在普通的情形下,OFDM系统就不需要再做均衡了。在高度散射的信道中,信道记忆长度很长,循环前缀(CP,Cyclic Prefix)的长度必须很长,才能够使ISI尽量不出现。但是,循环前缀的长度过长必然导致能量的大量损失,尤其对于那些子载波个数不是很大的系统。这时,可以考虑加均衡器以使CP的长度适当减小,即通过增加系统的复杂性换取系统频带利用率的提高。

2.仿真效果预览
matlab2022a仿真结果如下:

619c4adbb148d188ad4704a89169f9aa_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
5e9e268d3cc57b261c121008f0c91ec8_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
62ad5f045558f9e54597e57229f8039f_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

3.MATLAB核心程序

    jk
    seed_num=jk;
    
    
    rand('state',seed_num);
    
    Bits_IN(1:FFTLen*sym_num*M)=rand(1,FFTLen*sym_num*M)>0.5;  %  产生OFDM采样点
    
    %-----------------串并转换-----------------------------------------
    
    paradata=reshape(Bits_IN,FFTLen,sym_num*M); %串并转换排成256列
    
    
    %----------------QPSK调制------------------------------------------
    
    paradata2=paradata.*2-1;
    
    qpsk_i = zeros(FFTLen,sym_num);
    qpsk_q = zeros(FFTLen,sym_num);
    
    for jj=1:sym_num
        qpsk_i((1:FFTLen),jj)= 1/sqrt(2)*paradata2((1:FFTLen),2*jj-1);
        qpsk_q((1:FFTLen),jj)= 1/sqrt(2)*paradata2((1:FFTLen),2*jj);
    end
    
    qpsk_out1=qpsk_i+1i*qpsk_q;
    
    
    %--------------------加连续导频-------------------------------------
    [row_num,rank_num]=size(qpsk_out1);
    cpilot_slot=[10,43,75,105,151,181,213,246];
    cpilot=1/sqrt(2)*(ones(1,rank_num)+1i*ones(1,rank_num));
    for ii=1:1:length(cpilot_slot)
        qpsk_out1(cpilot_slot(ii),:)=cpilot;
    end
    
   
    %------------------上采样添0---------------------------------------
    
    qpsk_out2=zeros(FFTLen8,sym_num);
    
    qpsk_out2=[qpsk_out1(1:FFTLen/2,:);zeros((FFTLen8-FFTLen),sym_num);qpsk_out1(FFTLen/2+1:end,:)];%添零
    
 
    %----------------insert pilot加导频--------------------------------
    
    qpsk_add_pilot=zeros(FFTLen,sym_num+1);
    qpsk_add_pilot=[tain_qpsk_out,qpsk_out2];
    
    %-----------------2048点IFFT ---------------------------------------
    qpsk_out_ifft = sqrt(FFTLen8)*ifft(qpsk_add_pilot);
    
  
    %----------------加入 guard interval-------------------------------
    %----------------取后1/8为循环前缀----------------------------------
    qpsk_out_ifft_ext=zeros(FFTLen8+CPLen8,sym_num+1);
    qpsk_out_ifft_ext=[qpsk_out_ifft(FFTLen8-CPLen8+1:FFTLen8,:);qpsk_out_ifft];
    
    %---------------并串转换-------------------------------------------
    ofdm_out=reshape(qpsk_out_ifft_ext,1,(FFTLen8+CPLen8)*(sym_num+1));
    
    %+----------------------------------------------------------------+
    %|                   信道仿真                       |
    %+----------------------------------------------------------------+
    %+----------------------------------------------------------------+
    %|                   采样频偏 (立方插值)                          |
    %+----------------------------------------------------------------+
    
    %-------------------------------------------------------------------
    
    delta_samp=1e-4;%归一化采样时钟频偏delta_samp*fs,50ppm
    ofdm_samp_index=1:1:length(ofdm_out);
    ofdm_samp_cubic_index=1:0.9999:length(ofdm_out);
    num_cubic=length(ofdm_samp_index);
    ofdm_samp_cubic=interp1(ofdm_samp_index,ofdm_out,ofdm_samp_cubic_index,'cubic');
 
    %----------------------------------------------------------------
    EbNo=20;
    ofdm_Freq_I=zeros(1,length(ofdm_receive1));
    ofdm_Freq_Q=zeros(1,length(ofdm_receive1));
    ofdm_noise_I=zeros(1,length(ofdm_receive1));
    ofdm_noise_Q=zeros(1,length(ofdm_receive1));
    Noise_I=zeros(1,length(ofdm_receive1));
    Noise_Q=zeros(1,length(ofdm_receive1));
    ofdm_noise=zeros(1,length(ofdm_receive1));
    %------------------------------------------------------------------
    
    randn('state',seed_num+2);
    Noise_I=sqrt(var(real(ofdm_receive1))*10^(-EbNo/10))*randn(1,length(ofdm_receive1));
    randn('state',seed_num+4);
    Noise_Q=sqrt(var(real(ofdm_receive1))*10^(-EbNo/10))*randn(1,length(ofdm_receive1));
    ofdm_noise2_I=real(ofdm_receive1)+Noise_I;
    ofdm_noise2_Q=imag(ofdm_receive1)+Noise_Q;
    ofdm_noise2=(ofdm_noise2_I+1i*ofdm_noise2_Q);
    
    fd_est(jk)=fd_residue(jk-1);
    fs_est(jk)=fs_residue(jk-1);
    %fd_est(jk)=fd;
    %fs_est(jk)=-delta_samp;
    
    %--------------去除残余频偏------------------------------------------
    
    ofdm_noise4=ofdm_noise3((jk-2)*N_sym_fram+1:(jk-1)*N_sym_fram);%每一帧符号*帧数
    kkj=1:1:N_sym_fram;
    fd_offset=exp(-1i*2*pi*fd_est(jk).*(kkj-1)/FFTLen);
    ofdm_offset_fd=ofdm_noise4.*fd_offset;
    
    %ofdm_offset_fd=ofdm_noise4;
    
    
    %-------------------平滑--------------------------------------------
    if jk<30
        c2=0.25;
    else c2=0.05;
    end
    fs_residue(jk)=fs_residue(jk-1)+c2*fs_residue_jk(jk);
    fd_residue(jk)=fd_residue(jk-1)+c2*fd_residue_jk(jk);
    fd_est_theory(jk)=fd;
    fs_est_theory(jk)=-delta_samp;
    
    
end
相关文章
|
7天前
|
算法 Serverless
基于魏格纳函数和焦散线方法的自加速光束matlab模拟与仿真
本项目基于魏格纳函数和焦散线方法,使用MATLAB 2022A模拟自加速光束。通过魏格纳函数法生成多种自加速光束,并设计相应方法,展示仿真结果。核心程序包括相位和幅度的计算、光场分布及拟合分析,实现对光束传播特性的精确控制。应用领域涵盖光学成像、光操控和光束聚焦等。 关键步骤: 1. 利用魏格纳函数计算光场分布。 2. 模拟并展示自加速光束的相位和幅度图像。 3. 通过拟合分析,验证光束加速特性。 该算法原理基于魏格纳函数描述光场分布,结合数值模拟技术,实现对光束形状和传播特性的精确控制。通过调整光束相位分布,可改变其传播特性,如聚焦或加速。
|
4天前
|
机器学习/深度学习 算法 计算机视觉
基于CNN卷积神经网络的金融数据预测matlab仿真,对比BP,RBF,LSTM
本项目基于MATLAB2022A,利用CNN卷积神经网络对金融数据进行预测,并与BP、RBF和LSTM网络对比。核心程序通过处理历史价格数据,训练并测试各模型,展示预测结果及误差分析。CNN通过卷积层捕捉局部特征,BP网络学习非线性映射,RBF网络进行局部逼近,LSTM解决长序列预测中的梯度问题。实验结果表明各模型在金融数据预测中的表现差异。
|
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实现代码
|
8月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
8月前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)