您现在的位置:首页 >> 通信 >> 内容

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

时间:2023/1/7 20:15:56 点击:

  核心提示:A_192,包括程序操作录像+论文+参考文献...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/Y56Tl5Zu

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览




3.算法概述

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

4.部分源码

for jk=2:1:num_fram

    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

A_192

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168