1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/Y5qVlJtv
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
CP-OFDM(Cyclic Prefix Orthogonal Frequency Division Multiplexing,循环前缀正交频分复用)通信系统采用多个正交子载波(Orthogonalsub-Carrier)并行传输数据,可以高效传输数据并且有效对抗频率选择性衰落信道带来的影响。但是在数据传输过程中,对子载波的正交性有严苛的要求,所以CP-OFDM系统对载波及采样时钟的频率偏差(即频偏)非常敏感,必须通过频偏估计与纠正技术,使得频率偏差处于接收机可容忍范围内,从而保证数据的正确传输。CP-OFDM 技术利用多个平行窄带子载波来传输信息,而不使用单个宽带载波。该技术定义充分,已在 4G LTE 下行链路和Wi-Fi通信标准成功实施,因此也适合用于 5G NR 设计。
4.部分源码
v1 = 1;
v2 = 3;
nBit = 1024*2;
lSymbol = 4;
nChannel = 4;
baseFreq = 100; % 1Hz
tSymbol = nChannel/baseFreq; % time for one symbol
nSymbol = nBit/(nChannel*lSymbol);
bitSequence = bit_generate(nBit);
mapQAM = mapping_16QAM(v1,v2);
for k = 1:nBit/lSymbol
rInd = fix((k-1)/nChannel) +1;
cInd = k-(rInd-1)*nChannel;
fr = (k-1)*lSymbol +1;
bSymbol(rInd,cInd).bit = bitSequence(fr:fr+lSymbol-1);
end
fBase = 100; %100Hz for base frequence
fFirst = 200; %500Hz for first channel
Fs = 1024;
rTg = 1/8; %Ratio of guard
Tsym = 1/fBase;
Tg = Tsym*rTg;
Tsig = nSymbol*(Tsym+Tg);
bSymbol = generateSymbolWave(bSymbol,mapQAM,fBase,fFirst,rTg,Fs);
sOFDM = [];
for k=1:nSymbol
tmpSignal = 0;
for j= 1:nChannel
tmpSignal = tmpSignal + bSymbol(k,j).symbol;
end
sOFDM = [sOFDM tmpSignal];
end
fftOFDM = fft(sOFDM);
fftOFDM = fftshift(fftOFDM);
freq = (-length(sOFDM)/2:length(sOFDM)/2-1)*fBase;
powerOFDM = 0;
for k= 1: length(pOFDM)
powerOFDM = powerOFDM + pOFDM(k);
end
powerOFDM = powerOFDM/length(pOFDM);
snr_lin = 10^(5/10); % 5dB
var = powerOFDM/snr_lin;
%var =2000;
noise = (var/sqrt(2))*(randn(1,length(sOFDM)) +i*randn(1,length(sOFDM)));
sOFDM_fft = fft(sOFDM) + noise*Fs/2;
%sOFDM = sOFDM + abs(noise);
sOFDM = ifft(sOFDM_fft); %add noise into signal
sorted_noise = sort(abs(noise));
dx = 0:0.001:20;
count =1;
Fx = zeros(1,length(dx));
k=1;
while ( k<= length(sorted_noise))
if count <length(dx)
if sorted_noise(k)<=dx(count)
Fx(count)= Fx(count) +1;
k = k+1;
else
count = count +1;
Fx(count) = Fx(count-1);
end
else
Fx(count)= Fx(count) +1;
k=k+1;
end
end
Fx = Fx./length(sorted_noise);
dx1 = 0:0.1:20;
Px = zeros(1,length(dx1));
Px(1) = Fx(100)/(dx(100));
for k = 2:length(dx1)-2
Px(k) =(Fx(k*100)-Fx((k-1)*100))/(dx(k*100)-dx((k-1)*100));
end
A125