HE/WaveAdp/generatePreamble.m
2024-03-30 16:35:40 +08:00

47 lines
1.5 KiB
Matlab

function [preamble,c1,c2] = generatePreamble(WaveformPara,Power)
N = WaveformPara.N_FFT;
L = WaveformPara.CP_Len;
pnSequence = comm.PNSequence('Polynomial',[8 6 5 4 0], ...
'SamplesPerFrame',N,'InitialConditions',[0 0 0 0 0 0 0 1]);
pnSeq1 = pnSequence();
Modulator = comm.QPSKModulator;
dataInMatrix1 = reshape(pnSeq1,N/2,2);
dataSymbolsIn1 = bi2de(dataInMatrix1);
pnSeq1 = Modulator(dataSymbolsIn1);
c1 = sqrt(2)*kron(pnSeq1,[1,0]');
pnSequence = comm.PNSequence('Polynomial',[8 6 5 4 0], ...
'SamplesPerFrame',N,'InitialConditions',[0 1 0 0 0 0 0 1]);
pnSeq2 = pnSequence();
dataInMatrix2 = reshape(pnSeq2,N/2,2);
dataSymbolsIn2 = bi2de(dataInMatrix2);
pnSeq2 = Modulator(dataSymbolsIn2);
pnSequence = comm.PNSequence('Polynomial',[8 6 5 4 0], ...
'SamplesPerFrame',N,'InitialConditions',[1 1 0 0 1 0 0 1]);
pnSeq3 = pnSequence();
dataInMatrix3 = reshape(pnSeq3,N/2,2);
dataSymbolsIn3 = bi2de(dataInMatrix3);
pnSeq3 = Modulator(dataSymbolsIn3);
c2 = zeros(N,1);
c2(1:2:N-1) = pnSeq2;
c2(2:2:N) = pnSeq3;
ofdmSymbol = ifft(c1,N)*sqrt(N);
cp = ofdmSymbol(length(ofdmSymbol)-L+1:end);
trainingSym1 = [cp;ofdmSymbol];
ofdmSymbol = ifft(c2,N)*sqrt(N);
cp = ofdmSymbol(length(ofdmSymbol)-L+1:end);
trainingSym2 = [cp;ofdmSymbol];
preamble = sqrt(Power)/sqrt(2)*([trainingSym1;trainingSym2]);
end