作者:少女24梦_276 | 来源:互联网 | 2023-10-10 18:45
目录
1.算法概述
2.部分程序
3.算法部分仿真结果图
4.完整程序获取
1.算法概述
在现代短波通信系统中,其信道一般具有频率多样性和频率选择性,因此在短波通信过程中,多径的传播将产生信号的符号干扰和衰落。和传统的频分复用相比,OFDM通信技术可以最大限度的增加频谱利用率,同时OFDM将高速传输数据进行串并转换,从而增加子载波的符号周期,最终将频率选择性衰落的信道转换为平衰落信道。因此,OFDM技术具有优良的抗多径能力,较高的频谱利用率,在短波通信中有着十分重要的应用。
OFDM系统模型的基本结构如下图所示:
由于OFDM系统对多普勒频偏和定时有着较为严格的要求,因此,载波同步和符号同步是OFDM系统中的一个重要模块。同步过程分为同步捕获阶段和同步跟踪节点,目前较为常见的同步捕获算法主要包括T.Schmidl&D.Cox算法,Minn算法,Park算法以及Landstrom算法。
T.Schmidl&D.Cox算法(简称SC算法)主要是通过两个OFDM符号作为训练序列进行时间和频率同步,SC算法的帧结构如下图所示:
Minn算法是在SC算法基础之上改进得到,常见的Minn算法主要有基于训练符号结构的SC改进算法以及基于滑动窗口法的SC改进算法。但是基于滑动窗口法的SC改进算法会产生较多的峰值,从而影响判决。因此,本章节采用基于训练符号结构的SC改进算法,其帧结构如下所示:
Park算法,其主要通过新构造的帧结构和定时度量函数来最大程度的加大相邻点定时度量函数的差别,从而保证估计得到的定时点和其他干扰定时度量值之间的差值最大化。Park算法的帧结构如下所示:
Landstrom同步算法是一种不需要借助辅助数据的同步捕获算法,该算法是基于Van de Beek算法改进得到,其主要通过导频和循环前缀进行同步捕获。
2.部分程序
Radius = 100;
Nh = 1;
Nv = 1;
Scale1 = (rand(Nh,1)/2+0.5);
Scale2 = (rand(Nv,1)/2+0.5);
%速度
v = 200;
%载波频率
fc = 128e6;
%光速
c = 3e8;
fd = v*fc/c;
%采样间隔为1us
timeval = 1e-5;
%多径时延
delay_multi = [0,1,3,6]*timeval;
%多径增益
Pow_avg = [0,-20,-40,-60];
%多径个数
Nmultipath = length(Pow_avg);
%多径平均延迟
delay_avg = 100e-6;
%多普勒频偏
Fre_offset = 0.001;
Nc = 8;
%多载波
Sub = Nc;
Len = 1024;
%信号带宽
BW = 180e3;
T = 1/BW;
TG = T/4;
%间隔
BWs = 3.75e3;
%信号采样率
Fd = 8;
SNR_dB = [0:7];
%仿真指标保持变量
Err_Rate = zeros(1,length(SNR_dB));
%PILOT设置
pilot_type = 1;
%仿真循环次数,循环次数越大,仿真效果越好
nloop = [40,40,40,40,40,60,80,300];
%turbo编码参数
N = 512;
M = 167;
%FFT
fftlen = 512;
%每个SNR点上仿真若干次
for i=1:length(SNR_dB) iError = 0; err_all = 0;for iii=1:nloop(i)iii%产生测试信号msg = rand(Len*Nc/4,1)>=0.5;%turbo编码seridata1 = func_turbo_code(msg,N,M);seridata = [seridata1,zeros(1,Len*Nc-length(seridata1))]';%QPSK映射[Qpsk0,Dqpsk_pilot,symbol_bit] = func_piQPSK_mod(seridata);%变换为矩阵 Qpsk_matrix = reshape(Qpsk0,fftlen,Nc);[Pilot_in,pilot_num,Pilot_seq,pilot_space] = func_insert_pilot(Dqpsk_pilot,Qpsk_matrix,pilot_type,T,TG);Pilot_in = fft(Pilot_in);%sub carrier mappingPilot_in = func_subcarrierMap(Pilot_in); %IFFT transform,产生OFDM信号ifft_out = ifft(Pilot_in);%插入包含间隔 Guard_int = ceil(BWs/fftlen); Guard_int_ofdm = func_guard_interval_insert(ifft_out,fftlen,Guard_int);%将矩阵数据转换为串行进行输出Guard_int_ofdm_out = reshape(Guard_int_ofdm,1,(fftlen+Guard_int)*(Nc+pilot_num));%短波带宽信道,加入多径干扰[Hm,Hmmatrix] = func_mychannels(Radius,Scale1,Scale2,Nh,Nv); [passchan_ofdm_symbol] = func_conv_channels(Hmmatrix,Guard_int_ofdm_out,Nmultipath,Pow_avg,delay_multi,Fre_offset,timeval,iii);Rec_ofdm_symbol = awgn(passchan_ofdm_symbol,SNR_dB(i),'measured');%开始接收%加载同步带来的影响数据load 单独各种同步算法测试\R2.matERR = mean(err1,2);Guard_int_remove = func_guard_interval_remove(Rec_ofdm_symbol,(fftlen+Guard_int),Guard_int,(Nc+pilot_num));Guard_int_remove = Guard_int_remove;%FFTfft_out = fft(Guard_int_remove);%sub carrier demappingfft_out = func_desubcarrierMap(fft_out);fft_out = ifft(fft_out);%信道估计%lmmse[Sig_Lrmmse,Hs] = func_lmmse_est(fft_out,pilot_space,Pilot_seq,pilot_num,delay_avg/timeval,4e-6/timeval,10^(SNR_dB(i)/10));%解调Dqpsk = func_pideMapping(Sig_Lrmmse,fftlen*Nc);%turbo解码Dqpsk_decode = [func_turbo_decode(2*Dqpsk(1:end-(Len*Nc-length(seridata1)))-1,N,M)]';%计算误码率err_num = Len*Nc/4-length(find(msg==Dqpsk_decode(1:Len*Nc/4)));Error = Error + err_num*(1+5*ERR(i+10));end%计算误码率err_all = err_all+Len*Nc/4;Err_Rate(i) = Error/err_all/nloop(i);
end
3.算法部分仿真结果图
01_167m
4.完整程序获取
使用版本matlab2022a
解压密码:C+123456
获得方式1:
m基于OFDM的同步技术的研究,对比schmidl,minn,park,Landstrom
获取方式2:
如果下载链接失效,加博主微信,或私信。