HE/WaveAdp/tx_FFTSymbolGen_PilotBlockPN_CPrand.m

69 lines
2.3 KiB
Mathematica
Raw Permalink Normal View History

2024-03-30 16:35:40 +08:00
function [serialOFDMsym,pilot,serialFrameLen,symbolNum] = tx_FFTSymbolGen_PilotBlockPN_CPrand(dataModInMatrix,WaveformPara,CPset,SysParameters)
numOfdmSymbol = WaveformPara.FrameSymNum;
N_used = WaveformPara.UsedSubcarrier;
CP_Len = WaveformPara.CP_Len;
pnSequence = comm.PNSequence('Polynomial',[8 6 5 4 0], ...
'SamplesPerFrame',N_used,'InitialConditions',[0 0 0 0 0 0 0 1]);
pilotPower = WaveformPara.Power_sym;
pilot = generatePilot(pnSequence,pilotPower);
m = WaveformPara.PilotNum-1;
dataModAddPilot = zeros(N_used,numOfdmSymbol);
for i = 1:m
dataModAddPilot(:,(i-1)*(WaveformPara.PilotInterval+1)+1:i*(WaveformPara.PilotInterval+1)) = ...
[pilot,dataModInMatrix(:,(i-1)*WaveformPara.PilotInterval+1:i*WaveformPara.PilotInterval)];
end
dataModAddPilot(:,m*(WaveformPara.PilotInterval+1)+1:end) = ...
[pilot,dataModInMatrix(:,m*WaveformPara.PilotInterval+1:end)];
dataModAddPilot_shift = [zeros(1,WaveformPara.FrameSymNum);...
dataModAddPilot(1:(N_used-1)/2,:);...
zeros(WaveformPara.NullSubcarrier,WaveformPara.FrameSymNum);...
dataModAddPilot(1+(N_used-1)/2:end,:)];
OFDMsym = ifft(dataModAddPilot_shift,[],1)*sqrt(WaveformPara.N_FFT);
[~,symNum]=size(OFDMsym);
serialOFDMsym = [];
lenCPset = length(CPset);
%
if lenCPset<symNum
for i = 1:symNum
if i <= lenCPset
serialOFDMsym = [serialOFDMsym; OFDMsym(WaveformPara.N_FFT-CPset(i)+1:end,i); OFDMsym(:,i)];
else
serialOFDMsym = [serialOFDMsym; OFDMsym(WaveformPara.N_FFT-CPset(end)+1:end,i); OFDMsym(:,i)];
end
end
elseif length(CPset) == symNum
for i = 1:symNum
serialOFDMsym = [serialOFDMsym; OFDMsym(WaveformPara.N_FFT-CPset(i)+1:end,i); OFDMsym(:,i)];
end
else
print('waiting for solve')
end
symbolNum = symNum;
serialFrameLen = length(serialOFDMsym);
% OFDMsymAddCP = [OFDMsym(WaveformPara.N_FFT-CP_Len+1:end,:);OFDMsym]; % CP
%
% serialOFDMsym = reshape(OFDMsymAddCP,[],1);
end
function pilot = generatePilot(pnSequence,Power)
pilot = pnSequence();
bpskModulator = comm.BPSKModulator;
pilot = bpskModulator(pilot)*sqrt(Power);
end