👨🎓个人主页:研学社的博客
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
OFDM技术作为地面4G系统的核心技术,仍为5G系统的基本传输体制[5],在地面系统已得到较为广泛的应用。针对星间通信系统,该技术相比于串行的单载波体制,能够将频带利用率提高将近倍,从而更加充分地利用频带资源,实现高码速率传输;对于衰落或窄带干扰,可能会导致单载波通信系统瘫痪,而OFDM 系统只影响几个子信道,可采用针对受干扰的子信道降低数据传输速率等方法来保证星间通信系统的通信质量;OFDM 技术起源于模拟调制的频分复用( frequency division multiplexing ,FDM)和多载波调制( multi-carrier modulation , MCM)。其主要思想是将一个高速串行的数据流通过串并变换转换成N个低速并行的子数据流,并调制到多个正交的子载波上进行传输,其中每个子载波承载一个低速子数据流.
OFDM信号采用了多载波调制,通过设置相邻子载波频率间隔等于各子载波上码元周期的倒数,保证各载波信号在频谱上的正交性。OFDM信号根据调制方式不同,可以分为两大类,即循环前缀正交频分复用技术(Cyclic Prefix Orthogonal Freque;ncyDivision Multiplexing,CP-OFDM)和时域同步正交频分复用技术(Time Domain Synchronous Orthogolnal Frequency Division Multiplexing,TDS-OFDM)。CP-OFDM信号在有用OFDM符号数据前加入循环前缀充当帧头,而TDS-OFDM信号将OFDM符号有效数据作为帧体, PN(Pseudo Noise)序列作为帧头。本文在处理CP-OFDM或TDS-OFDM信号前需要去除帧头,并对处理后的参考信号和监测信号根据帧体长度进行分段处理,如图1所示。
本文 将使用稀疏信道估计的系统与使用LSE信道估计的系统进行比较。结果表明,使用稀疏技术可以提高系统的性能。
📚2 运行结果
部分代码:
%% Loop
for cnt1 = 1 : loop.End1
for cnt2 = 1 : loop.End2
% loop parameters
chan.snrdB = chan.snrdBV(cnt2);
% Data generation
data = randi([0 ofdm.M-1],ofdm.N,ofdm.B);
% modulation
if ofdm.M == 4
dataMod = qammod(data,ofdm.M)/sqrt(2);
else
error('Not defined')
end
% pilot insertion
ofdm.Pilot = ones(ofdm.NP,1);% or randsrc(ofdm.NP,ofdm.B,[-1 1]).*exp(-sqrt(-1)*pi*rand(ofdm.NP,ofdm.B));
dataMod(ofdm.PP,:) = ofdm.Pilot;
% ifft operation
dataIFFT = sqrt(ofdm.N)*ifft(dataMod);
% adding gaurd interval
dataIFFTGI = [dataIFFT((ofdm.N-ofdm.GI+1):ofdm.N,:);dataIFFT;];
% channel (rayleigh and gaussian noise)
ch = rayleighchan(ofdm.T,chan.fd,chan.tau_p(chan.Delay(1:chan.L)),chan.Gain(chan.Delay(1:chan.L)));
dataChann = awgn(filter(ch,dataIFFTGI(:)),chan.snrdB );
% reshaping the signal
dataChann = reshape(dataChann,ofdm.N+ofdm.GI,ofdm.B);
% Guard interval removal
dataRx = dataChann((ofdm.GI+1):(ofdm.N+ofdm.GI),:);
% ofdm demodulation
dataRxFFT =1/sqrt(ofdm.N)*fft(dataRx);
%% Saprse Channel estimation
H_Sparse = zeros(ofdm.N,ofdm.B);
lambda1 = ofdm.NP*10^(-chan.snrdB/10)/sum(abs(ch.pathGains));
for b = 1 : ofdm.B
y = dataRxFFT(ofdm.PP,b);
A = chan.Gamma(ofdm.PP,:).*repmat(ofdm.Pilot(:,b),1,chan.Nt);
cvx_begin quiet
variable x(chan.Nt) complex
% sparse minimization formula (A is built from dictionary, y is received data and x is the channel coeff at pilot locations)
minimize( quad_form(y-A*x,eye(ofdm.NP))+lambda1*norm(x,1) )
cvx_end
% building channel at all location (simply from the dictionar)
H_Sparse(:,b) = chan.Gamma*x;
end
dataRxMod_Sparse = dataRxFFT(ofdm.DP,:)./H_Sparse(ofdm.DP,:);
dataRxDeMod_Sparse = qamdemod(dataRxMod_Sparse,ofdm.M);
[~,BER_Sparse] = biterr(dataRxDeMod_Sparse,data(ofdm.DP,:),ofdm.M);
%% LSE
H_LSE = zeros(ofdm.N,ofdm.B);
for b = 1 : ofdm.B
H_LSE(:,b) = ofdm.N/ofdm.NP * fft(ifft(dataRxFFT(ofdm.PP,b)./dataMod(ofdm.PP,b)),ofdm.N);
end
dataRxMod_LSE = dataRxFFT(ofdm.DP,:)./H_LSE(ofdm.DP,:);
dataRxDeMod_LSE = qamdemod(dataRxMod_LSE,ofdm.M);
[~,BER_LSE] = biterr(dataRxDeMod_LSE,data(ofdm.DP,:),ofdm.M);
% saving the output
loop.Sparse(cnt1,cnt2) = BER_Sparse;
loop.LSE(cnt1,cnt2) = BER_LSE;
end
disp([num2str(round(cnt1/loop.End1*100)),'% has been done'])
end
%% Figure
f1 = figure(1);
semilogy(chan.snrdBV,mean(loop.Sparse,1),'b-o')
hold on
semilogy(chan.snrdBV,mean(loop.LSE,1),'r.-')
hold off
legend('Sparse','LSE')
grid on
🎉3 参考文献
部分理论来源于网络,如有侵权请联系删除。
[1]王彦革,武加纯,张瀚青,张康雷,殷鹏程.高速星间收发通信机OFDM调制解调研究[J].空间电子技术,2023,20(01):70-75.
[2]饶云华,丁添,谢德强,万显荣,易建新.OFDM外辐射源雷达线性调频干扰抑制[J].信号处理,2023,39(02):202-211.DOI:10.16798/j.issn.1003-0530.2023.02.002.
[3]Hamid Ramezani (2023). OFDM Sparse Channel estimation.