建设公司网站需要什么资料,asp绿色网站源码,网站建设证有,免费电商网站建设平台文章目录 前言一、OFDM 同步技术二、MATLAB 仿真1、STO 估计技术①、核心源码②、仿真结果 2、CFO 估计技术①、核心源码②、仿真结果 三、资源自取 前言
本文对 OFDM 同步技术以思维导图的形式呈现#xff0c;有关仿真部分进行了讲解实现。 一、OFDM 同步技术
OFDM 同步技术… 文章目录 前言一、OFDM 同步技术二、MATLAB 仿真1、STO 估计技术①、核心源码②、仿真结果 2、CFO 估计技术①、核心源码②、仿真结果 三、资源自取 前言
本文对 OFDM 同步技术以思维导图的形式呈现有关仿真部分进行了讲解实现。 一、OFDM 同步技术
OFDM 同步技术思维导图如下图所示如有需求请到文章末尾端自取。
二、MATLAB 仿真
1、STO 估计技术
①、核心源码
%基于CP采用最大相关和最小距离算法完成STO的估计clear, figure(1), clf, figure(2), clf
nSTOs [-3 -3 2 2]; % 对应 STO 的采样数 提前、提前、滞后、滞后
CFOs [0 0.5 0 0.5]; % CFO 向量
SNRdB 30; % SNR
MaxIter 10; % 迭代次数
%CFOs [0 0 0 0];
Nfft 128; % FFT 大小
Ng Nfft/4; % GI 长度
Nofdm Nfft Ng; % OFDM 符号长度
Nbps 2; % 2/4 对应 QPSK/16QAM
M 2^Nbps; % 符号对应的可能性数量
Es 1;
A sqrt(3/2/(M-1)*Es); % QAM 归一化因子
N Nfft;
com_delay Nofdm/2; % 公共时延
Nsym 100; % 一共有一百个 OFDM 符号
rand(seed,1); % 设置种子
randn(seed,1);
for i 1:length(nSTOs) % 对于每一个不同的 \delta STOnSTO nSTOs(i); CFO CFOs(i);x []; % 初始化信号块最后 x 就是发送出来的 OFDM 模块for m 1:Nsym % 随机位生成 msgintrandi([0 M-1], 1, N); % 生成传输符号,1*128 个 0-3 的数Xf A .* qammod(msgint, M, UnitAveragePower, true);% 调制成复数%***********************缺少了倒置的过程***********************%xt ifft(Xf, Nfft); % 发送x_sym add_CP(xt, Ng); % 加 CPx [x x_sym];end%*********************** 信道 ************************%%%%%%在这里根据需求添加信道先假设是没有信道y x; % 没有信道影响sig_pow y*y / length(y); % 计算能量sig_pow mean(mean(y.*conj(y),2))% 频率偏移 符号定时偏移 y_CFO add_CFO(y, CFO, Nfft); % 加 CFOy_CFO_STO add_STO(y_CFO, -nSTO); % 加STO这是加在整个信号上的因此头尾补零就行了但是取-是因为δ0 是提前δ0是滞后v_ML zeros(1, Ng); % 初始化v_Cl zeros(1, Ng);Mag_cor 0; % arg的结果Mag_dif 0;%%添加加性高斯白噪声for iter 1:MaxIter% 加噪声y_aw awgn(y_CFO_STO, SNRdB, measured);%%%%%%%符号定时获取[STO_cor, mag_cor] STO_by_correlation(y_aw, Nfft, Ng, com_delay); % 书中自带[STO_cor_temp,mag_cor_temp] STO_by_correlation_sim1(y_aw,Nfft,Ng,com_delay); % 我自己编写%%%%%经验证以上两者函数结果一致[STO_dif,mag_dif] STO_by_difference(y_aw,Nfft,Ng,com_delay); %书中自带[STO_dif_temp,mag_dif_temp] STO_by_difference_sim1(y_aw,Nfft,Ng,com_delay); %我自己编写%%%%%经验证以上两者函数结果一致% 计数% 这里取反了返回了符合左加右减的直觉的STOv_ML(-STO_corNg/2) v_ML(-STO_corNg/2)1;v_Cl(-STO_difNg/2) v_Cl(-STO_difNg/2)1;Mag_cor Mag_cor mag_cor;Mag_dif Mag_dif mag_dif;end % End of for loop of iter%%%%%%% Probabilityv_ML_v_Cl [v_ML; v_Cl]*(100/MaxIter); % 取百分数figure(1i-1); set(gca,fontsize,9); % 将当前坐标轴的字体大小设置为9
% subplot(220i)bar(-Ng/21:Ng/2,v_ML_v_Cl);hold on, grid onstr sprintf(nSTO Estimation: nSTO%d, CQFO%1.2f, SNR%3d[dB],nSTO,CFO,SNRdB); title(str); xlabel(Sample), ylabel(Probability);legend(ML,Classen); axis([-Ng/2-1 Ng/21 0 100])%%%%%%% Time metricMag_cor Mag_cor/MaxIter; [Mag_cor_max,ind_max] max(Mag_cor);nc ind_max-1-com_delay;Mag_dif Mag_dif/MaxIter; [Mag_dif_min,ind_min] min(Mag_dif);nd ind_min-1-com_delaynn -Nofdm/2 [0:length(Mag_cor)-1]; % -80~79
% nt nSTO;
% figure(2);
% subplot(220i);figure(5i-1); plot(nn,Mag_cor,nn,1.5*Mag_dif,r:,markersize,1);hold onstem(nc,Mag_cor_max,b,markersize,5);stem(nSTO,Mag_cor(nSTOcom_delay1),k.,markersize,5); % Estimated/True Maximum valuestr1 sprintf(STO Estimation - ML(b-)/Classen(r:) for nSTO%d, CFO%1.2f,nSTO,CFO); %,SNRdB);title(str1); xlabel(Sample), ylabel(Magnitude); %stem(n1,Mag_dif_min,r,markersize,5)stem(nd,Mag_dif(ndcom_delay1),r,markersize,5);stem(nSTO,Mag_dif(nSTOcom_delay1),k.,markersize,5); % Estimated/True Minimum valueset(gca,fontsize,9, XLim,[-32 32], XTick,[-10 -3 0 2 10]); %, xlim([-50 50]),legend(基于相关的,基于差值最小的);
end % End of for loop of i完整源码文末自取
②、仿真结果 由上两个图所示当 STO -3CFO 0时可以看到基于差值最小的方法估计的 STO 更为准确。 由上两个图所示当 STO -3CFO 0.5时可以看到基于差值最小的方法和基于相关估计的 STO 都很准确。 由上两个图所示当 STO 2CFO 0 时可以看到基于差值最小的方法和基于相关估计的 STO 都很准确。 由上两个图所示当 STO 2CFO 0.5 时可以看到基于差值最小的方法估计的 STO 更为准确。
2、CFO 估计技术
①、核心源码
%完成时域基于CP的方法和频域的Moose/Classen方法用于后续CFO补偿
clear, clf
CFO 0.15; % CFO载波频率偏移大小
% CFO 0;
Nfft128; % FFT采样数
Nbps2; % QPSK或QAM
M2^Nbps; % 每个符号代表几比特
Es1; % 能量
Asqrt(3/2/(M-1)*Es); % QAM归一化
NNfft; % 发送的符号长度为了方便和Nfft保持一致
NgNfft/4; % GI长度
NofdmNfftNg; % 一个OFDM符号的长度
Nsym3; % 一共发送了3个OFDM符号前两个是导频最后一个是真正发送的数据符号
% hcomplex(randn,randn)/sqrt(2);
% %h[1 zeros(1,5)];
% channel(h,0);
%Transmit signal
x[];
for m1:Nsym % 前两个是导频最后一个是真正发送的数据符号msgintrandi([0 M-1],1,N); % 生成要发送的符号if m2 % Xp add_pilot(zeros(1,Nfft),Nfft,4); % 生成导频XfXp; % add_pilotelse %Xf QAM(msgint((i-1)*N1:i*N),Nbps); % constellation mapping. average power1 Xf A.*qammod(msgint,M,UnitAveragePower,true);end xt ifft(Xf,Nfft); % ifft x_sym add_CP(xt,Ng); % 加CPx [x x_sym]; % 将三个OFDM符号依次拼接
end %channel 可添加所需信道
yx; % No channel effect%Signal power calculation
sig_pow y*y/length(y); % Signal power calculation%%%%
SNRdBs 0:3:30;
% SNRdBs 100; 设100是为调试程序
MaxIter 100;
for i1:length(SNRdBs)SNRdB SNRdBs(i);MSE_CFO_CP 0; MSE_CFO_Moose 0; MSE_CFO_Classen 0;rand(seed,1); % 设置种子来保证每次仿真结果一致randn(seed,1);y_CFO add_CFO(y,CFO,Nfft); % 增加CFO此处是在时域添加的因此是×相位% 多次迭代取平均for iter1:MaxIter%y_awadd_AWGN(y_CFO,sig_pow,SNRdB,SNR,Nbps); % AWGN added, signal power1y_aw awgn(y_CFO,SNRdB,measured); % 增加高斯白噪声Est_CFO_CP CFO_CP(y_aw,Nfft,Ng); % CP-based % 根据CP测算CFOMSE_CFO_CP MSE_CFO_CP (Est_CFO_CP-CFO)^2; % 平方累计Est_CFO_Moose CFO_Moose(y_aw,Nfft); % Moose估计MSE_CFO_Moose MSE_CFO_Moose (Est_CFO_Moose-CFO)^2;% 平方累计Est_CFO_Classen CFO_Classen(y_aw,Nfft,Ng,Xp); % Classen (Pilot-based)MSE_CFO_Classen MSE_CFO_Classen (Est_CFO_Classen-CFO)^2;end % the end of for (iter) loopMSE_CP(i) MSE_CFO_CP/MaxIter; MSE_Moose(i) MSE_CFO_Moose/MaxIter; MSE_Classen(i) MSE_CFO_Classen/MaxIter;
end%ebn0 end
semilogy(SNRdBs, MSE_CP,-);
grid on, hold on
semilogy(SNRdBs, MSE_Moose,-x); semilogy(SNRdBs, MSE_Classen,-*);
xlabel(SNR[dB]), ylabel(MSE); title(CFO Estimation); %axis([0 30 10e-8 10e-2])
% strsprintf(CFO %1.2f,CFO);
legend(CP-based technique,Moose (Preamble-based),Classen (Pilot-based));
% legend(str);完整源码文末自取
②、仿真结果 可以观察到随着接收信号的 SNR 增大CFO 估计的 MSE 减小。估计技术的性能取决于用于 CFO 估计的 CP 中的采样数、前导数和导频数。
三、资源自取
链接OFDM同步技术 我的qq2442391036欢迎交流