69 lines
2.3 KiB
Matlab
69 lines
2.3 KiB
Matlab
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 |