From eb4d72c7c27b6bcfc2eca12ffb1a7f59ce53d346 Mon Sep 17 00:00:00 2001 From: ti_mo Date: Mon, 22 Jun 2026 22:03:28 +0200 Subject: [PATCH] lab5 task1 done, task2 nearly finished --- lab_5/HelperNRNTNThroughput.m | 1221 +++++++++++++++++++++++++ lab_5/HelperNTNPositionEstimate.m | 151 +++ lab_5/create_baseline_configuration.m | 73 ++ lab_5/create_satellite_sim.m | 12 + lab_5/distance_over_time.svg | 207 +++++ lab_5/elevation_angle_over_time.svg | 226 +++++ lab_5/lab_5.m | 31 + lab_5/leo_satellite_pass.md | 29 + lab_5/parfor_waitbar.m | 29 + lab_5/perform_access_analysis.m | 75 ++ lab_5/receive_power_over_time.svg | 262 ++++++ lab_5/required_transmit_power.svg | 196 ++++ lab_5/simulateTransmission.m | 106 +++ lab_5/task1.m | 45 + lab_5/task2.m | 64 ++ tasks/05-leo-pass.pdf | Bin 0 -> 179823 bytes 16 files changed, 2727 insertions(+) create mode 100755 lab_5/HelperNRNTNThroughput.m create mode 100755 lab_5/HelperNTNPositionEstimate.m create mode 100644 lab_5/create_baseline_configuration.m create mode 100644 lab_5/create_satellite_sim.m create mode 100644 lab_5/distance_over_time.svg create mode 100644 lab_5/elevation_angle_over_time.svg create mode 100644 lab_5/lab_5.m create mode 100644 lab_5/leo_satellite_pass.md create mode 100644 lab_5/parfor_waitbar.m create mode 100644 lab_5/perform_access_analysis.m create mode 100644 lab_5/receive_power_over_time.svg create mode 100644 lab_5/required_transmit_power.svg create mode 100644 lab_5/simulateTransmission.m create mode 100644 lab_5/task1.m create mode 100644 lab_5/task2.m create mode 100644 tasks/05-leo-pass.pdf diff --git a/lab_5/HelperNRNTNThroughput.m b/lab_5/HelperNRNTNThroughput.m new file mode 100755 index 0000000..1859ed5 --- /dev/null +++ b/lab_5/HelperNRNTNThroughput.m @@ -0,0 +1,1221 @@ +classdef HelperNRNTNThroughput + %HelperNRNTNThroughput Class defining the supporting functions used in + %the NR NTN PDSCH Throughput example + % + % Note: This is an undocumented class and its API and/or + % functionality may change in subsequent releases. + + % Copyright 2021-2026 The MathWorks, Inc. + + methods (Static) + function validateNumLayers(simParameters) + % Validate the number of layers, relative to the antenna geometry + + if isfield(simParameters, 'PDSCH') + numlayers = simParameters.PDSCH.NumLayers; + else + numlayers = simParameters.PUSCH.NumLayers; + end + ntxants = simParameters.NumTransmitAntennas; + nrxants = simParameters.NumReceiveAntennas; + + if contains(simParameters.NTNChannelType,'Narrowband','IgnoreCase',true) + if (ntxants ~= 1) || (nrxants ~= 1) + error(['For NTN narrowband channel, ' ... + 'the number of transmit and receive antennas must be 1.']); + end + end + + antennaDescription = sprintf(... + 'min(NumTransmitAntennas,NumReceiveAntennas) = min(%d,%d) = %d', ... + ntxants,nrxants,min(ntxants,nrxants)); + if numlayers > min(ntxants,nrxants) + error('The number of layers (%d) must satisfy NumLayers <= %s', ... + numlayers,antennaDescription); + end + + % Display a warning if the maximum possible rank of the channel equals + % the number of layers + if (numlayers > 2) && (numlayers == min(ntxants,nrxants)) + warning(['The maximum possible rank of the channel, given by %s, is equal to' ... + ' NumLayers (%d). This may result in a decoding failure under some channel' ... + ' conditions. Try decreasing the number of layers or increasing the channel' ... + ' rank (use more transmit or receive antennas).'],antennaDescription, ... + numlayers); %#ok + end + + % For NTN CDL channel, the parameters NumTrasnmitAntennas and + % NumReceiveAntennas must align with that of TxArraySize and + % RxArraySize respectively + if simParameters.NTNChannelType == "CDL" + numElementsTxArray = prod(simParameters.TxArraySize); + if numElementsTxArray ~= ntxants + error(['For NTN CDL channel, the product of all values in TxArraySize (%d) must be equal to ' ... + 'number of transmit antennas (%d)'],numElementsTxArray,ntxants); + end + numElementsRxArray = prod(simParameters.RxArraySize); + if numElementsRxArray ~= nrxants + error(['For NTN CDL channel, the product of all values in RxArraySize (%d) must be equal to ' ... + 'number of receive antennas (%d)'],numElementsRxArray,nrxants); + end + end + end + + function [estChannelGrid,sampleTimes] = getInitialChannelEstimate(... + carrier,nTxAnts,channel,dataType) + % Obtain channel estimate before first transmission. Use this function to + % obtain a precoding matrix for the first slot. + + ofdmInfo = nrOFDMInfo(carrier); + + chInfo = info(channel); + maxChDelay = ceil(max(chInfo.PathDelays*channel.SampleRate)) ... + + chInfo.ChannelFilterDelay; + + % Temporary waveform (only needed for the sizes) + tmpWaveform = zeros(... + (ofdmInfo.SampleRate/1000/carrier.SlotsPerSubframe)+maxChDelay,nTxAnts,dataType); + + % Filter through channel and get the path gains and path filters + [~,pathGains,sampleTimes] = channel(tmpWaveform); + if isa(channel,'nrTDLChannel') || isa(channel,'nrCDLChannel') + pathFilters = getPathFilters(channel); + else + pathFilters = chInfo.ChannelFilterCoefficients.'; + end + + % Perfect timing synchronization + offset = nrPerfectTimingEstimate(pathGains,pathFilters); + + % Perfect channel estimate + estChannelGrid = nrPerfectChannelEstimate(... + carrier,pathGains,pathFilters,offset,double(sampleTimes)); + + end + + function wtx = getPrecodingMatrix(carrier,pdsch,hestGrid,prgbundlesize) + % Calculate precoding matrices for all precoding resource block groups + % (PRGs) in the carrier that overlap with the PDSCH allocation + + % Maximum common resource block (CRB) addressed by carrier grid + maxCRB = carrier.NStartGrid + carrier.NSizeGrid - 1; + + % PRG size + if nargin==4 && ~isempty(prgbundlesize) + Pd_BWP = prgbundlesize; + else + Pd_BWP = maxCRB + 1; + end + + % PRG numbers (1-based) for each RB in the carrier grid + NPRG = ceil((maxCRB + 1) / Pd_BWP); + prgset = repmat((1:NPRG),Pd_BWP,1); + prgset = prgset(carrier.NStartGrid + (1:carrier.NSizeGrid).'); + + [~,~,R,P] = size(hestGrid); + wtx = zeros([pdsch.NumLayers P NPRG],'like',hestGrid); + for i = 1:NPRG + + % Subcarrier indices within current PRG and within the PDSCH + % allocation + thisPRG = find(prgset==i) - 1; + thisPRG = intersect(thisPRG,pdsch.PRBSet(:) + carrier.NStartGrid,'rows'); + prgSc = (1:12)' + 12*thisPRG'; + prgSc = prgSc(:); + + if (~isempty(prgSc)) + + % Average channel estimate in PRG + estAllocGrid = hestGrid(prgSc,:,:,:); + Hest = permute(mean(reshape(estAllocGrid,[],R,P)),[2 3 1]); + + % SVD decomposition + [~,~,V] = svd(Hest); + wtx(:,:,i) = V(:,1:pdsch.NumLayers).'; + + end + + end + + wtx = wtx / sqrt(pdsch.NumLayers); % Normalize by NumLayers + + end + + function estChannelGrid = precodeChannelEstimate(carrier,estChannelGrid,W) + % Apply precoding matrix W to the last dimension of the channel estimate + + [K,L,R,P] = size(estChannelGrid); + estChannelGrid = reshape(estChannelGrid,[K*L R P]); + estChannelGrid = nrPDSCHPrecode( ... + carrier,estChannelGrid,reshape(1:numel(estChannelGrid),[K*L R P]),W); + estChannelGrid = reshape(estChannelGrid,K,L,R,[]); + + end + + function [loc,wMovSum,pho,bestAnt] = detectOFDMSymbolBoundary(rxWave,nFFT,cpLen,thres) + % Detect OFDM symbol boundary by calculating correlation of cyclic prefix + + % Capture the dimensions of received waveform + [NSamples,R] = size(rxWave); + + % Append zeros of length nFFT across each receive antenna to the + % received waveform + waveformZeroPadded = [rxWave;zeros(nFFT,R,'like',rxWave)]; + + % Get the portion of waveform till the last nFFT samples + wavePortion1 = waveformZeroPadded(1:end-nFFT,:); + + % Get the portion of waveform delayed by nFFT + wavePortion2 = waveformZeroPadded(1+nFFT:end,:); + + % Get the energy of each sample in both the waveform portions + eWavePortion1 = abs(wavePortion1).^2; + eWavePortion2 = abs(wavePortion2).^2; + + % Initialize the temporary variables + wMovSum = zeros([NSamples R]); + wEnergyPortion1 = zeros([NSamples+cpLen-1 R]); + wEnergyPortion2 = wEnergyPortion1; + + % Perform correlation for each sample with the sample delayed by nFFT + waveCorr = wavePortion1.*conj(wavePortion2); + % Calculate the moving sum value for each cpLen samples, across each + % receive antenna + oneVec = ones(cpLen,1); + for i = 1:R + wConv = conv(waveCorr(:,i),oneVec); + wMovSum(:,i) = wConv(cpLen:end); + wEnergyPortion1(:,i) = conv(eWavePortion1(:,i),oneVec); + wEnergyPortion2(:,i) = conv(eWavePortion2(:,i),oneVec); + end + + % Get the normalized correlation value for the moving sum matrix + pho = abs(wMovSum)./ ... + (eps+sqrt(wEnergyPortion1(cpLen:end,:).*wEnergyPortion2(cpLen:end,:))); + + % Detect the peak locations in each receive antenna based on the + % threshold. These peak locations correspond to the starting location + % of each OFDM symbol in the received waveform. + loc = cell(R,1); + m = zeros(R,1); + phoFactor = ceil(NSamples/nFFT); + phoExt = [pho; -1*ones(phoFactor*nFFT - NSamples,R)]; + for col = 1:R + p1 = reshape(phoExt(:,i),[],phoFactor); + [pks,locTemp] = max(p1); + locTemp = locTemp + (0:phoFactor-1).*nFFT; + indicesToConsider = pks>=thres; + loc{col} = locTemp(indicesToConsider); + m(col) = max(pks); + end + bestAnt = find(m == max(m)); + + end + + function [out,detFlag] = estimateFractionalDopplerShift(rxWave,scs, ... + nFFT,cpLen,thres,flag) + % Estimate the fractional Doppler shift using cyclic prefix + + if flag + % Detect the OFDM boundary locations + [loc,wMovSum,~,bestAnt] = ... + HelperNRNTNThroughput.detectOFDMSymbolBoundary(rxWave, ... + nFFT,cpLen,thres); + + % Get the average correlation value at the peak locations for the + % first receive antenna having maximum correlation value + wSamples = nan(1,1); + if ~isempty(loc{bestAnt(1)}) + wSamples(1) = mean(wMovSum(loc{bestAnt(1)},bestAnt(1))); + end + + % Compute the fractional Doppler shift + if ~all(isnan(wSamples)) + out = -(mean(angle(wSamples),'omitnan')*scs*1e3)/(2*pi); + % Flag to indicate that there is at least one OFDM symbol + % detected + detFlag = 1; + else + out = 0; + detFlag = 0; + end + else + out = 0; + detFlag = 0; + end + + end + + function [out,shiftOut] = estimateIntegerDopplerShift(carrier,rx,refInd, ... + refSym,sampleOffset,usePrevShift,useDiffCorr,shiftIn,maxOffset,flag) + % Estimate the integer Doppler shift using demodulation reference signal + + arguments + carrier + rx + refInd + refSym + sampleOffset = 0 + usePrevShift = false + useDiffCorr = true + shiftIn = 0 + maxOffset = 0 + flag = false + end + + if flag + + % Get OFDM information + ofdmInfo = nrOFDMInfo(carrier); + cpLen = ofdmInfo.CyclicPrefixLengths(1); % Highest cyclic prefix length + K = carrier.NSizeGrid*12; % Number of subcarriers + L = carrier.SymbolsPerSlot; % Number of OFDM symbols in slot + P = ceil(max(double(refInd(:))/(K*L))); % Number of layers + + % Find the timing offset using differential correlation + offset = HelperNRNTNThroughput.diffcorr( ... + carrier,rx,refInd,refSym); + if offset > maxOffset + offset = 0; + end + + % Range of shift values to be used in integer frequency offset + % estimation + if useDiffCorr + % Use offset directly in the shift values + shiftValues = offset+1; + else + shiftValues = sampleOffset + shiftIn; + if ~(usePrevShift && (shiftIn > 0)) + % Update range of shift values such that whole cyclic prefix + % length is covered + shiftValues = sampleOffset + (1:(cpLen+offset)); + end + end + + % Initialize temporary variables + shiftLen = length(shiftValues); + maxValue = complex(zeros(shiftLen,1)); + binIndex = zeros(shiftLen,1); + [rxLen,R] = size(rx); + xWave = zeros([rxLen P],'like',rx); + + % Generate reference waveform + refGrid = nrResourceGrid(carrier,P); + refGrid(refInd) = refSym; + refWave = nrOFDMModulate(carrier,refGrid,'Windowing',0); + refWave = [refWave; zeros((rxLen-size(refWave,1)),P,'like',refWave)]; + + % Find the fast Fourier transform (FFT) bin corresponding to + % maximum correlation value for each shift value + for shiftIdx = 1:shiftLen + % Use the waveform from the shift value and append zeros + tmp = rx(shiftValues(shiftIdx):end,:); + rx = [tmp; zeros(rxLen-size(tmp,1),R)]; + + % Compute the correlation of received waveform with reference + % waveform across different layers and receive antennas + for rIdx = 1:R + for p = 1:P + xWave(:,rIdx,p) = ... + rx(:,rIdx).*conj(refWave(1:length(rx(:,rIdx)),p)); + end + end + + % Aggregate the correlated waveform across multiple ports and + % compute energy of the resultant for each receive antenna + x1 = sum(xWave,3); + x1P = sum(abs(x1).^2); + + % Find the index of first receive antenna which has maximum + % correlation energy + idx = find(x1P == max(x1P),1); + + % Combine the received waveform which have maximum correlation + % energy + xWaveCombined = sum(x1(:,idx(1)),2); + + % Compute FFT of the resultant waveform + xWaveCombinedTemp = buffer(xWaveCombined,ofdmInfo.Nfft); + xFFT = sum(fftshift(fft(xWaveCombinedTemp)),2); + + % Store the value and location of peak + [maxValue(shiftIdx),binIndex(shiftIdx)] = max(xFFT); + end + + % FFT bin values + fftBinValues = (-ofdmInfo.Nfft/2:(ofdmInfo.Nfft/2-1))*(ofdmInfo.SampleRate/ofdmInfo.Nfft); + + % Find the shift index that corresponds to the maximum of peak + % value of all the shifted waveforms. Use the FFT bin index + % corresponding to this maximum shift index. The FFT bin value + % corresponding to this bin index is the integer frequency offset. + [~,maxId] = max(maxValue); + loc = binIndex(maxId); + out = fftBinValues(loc); + shiftOut = shiftValues(maxId); + else + out = 0; + shiftOut = 1+sampleOffset; + end + + end + + function out = compensateDopplerShift(inWave,fs,fdSat,flag) + % Perform Doppler shift correction + + if flag + out = frequencyOffset(inWave,fs,-fdSat); + else + out = inWave; + end + + end + + function [offset,mag] = diffcorr(carrier,rx,refInd,refSym) + % Perform differential correlation for the received signal + + % Get the number of subcarriers, OFDM symbols, and layers + K = carrier.NSizeGrid*12; % Number of subcarriers + L = carrier.SymbolsPerSlot; % Number of OFDM symbols in slot + P = ceil(max(double(refInd(:))/(K*L))); % Number of layers + + % Generate the reference signal + refGrid = nrResourceGrid(carrier,P); + refGrid(refInd) = refSym; + refWave = nrOFDMModulate(carrier,refGrid,'Windowing',0); + + % Get the differential of the received signal and reference signal + waveform = conj(rx(1:end-1,:)).*rx(2:end,:); + ref = conj(refWave(1:end-1,:)).*refWave(2:end,:); + [T,R] = size(waveform); + + % To normalize the xcorr behavior, pad the input waveform to make it + % longer than the reference signal + refLen = size(ref,1); + waveformPad = [waveform; zeros([refLen-T R],'like',waveform)]; + + % Store correlation magnitude for each time sample, receive antenna and + % port + mag = zeros([max(T,refLen) R P],'like',waveformPad); + for r = 1:R + for p = 1:P + % Correlate the given antenna of the received signal with the + % given port of the reference signal + refcorr = xcorr(waveformPad(:,r),ref(:,p)); + mag(:,r,p) = abs(refcorr(T:end)); + end + end + + % Sum the magnitudes of the ports + mag = sum(mag,3); + + % Find timing peak in the sum of the magnitudes of the receive antennas + [~,peakindex] = max(sum(mag,2)); + offset = peakindex - 1; + + end + + function [tO,fO] = jointTimeFreq(carrier,rx,varargin) + % Perform joint time-frequency synchronization + % jointTimeFreq(carrier,rx,refInd,refSym,fSearchSpace) + % jointTimeFreq(carrier,rx,refGrid,fSearchSpace) + fSearchSpace = varargin{end}; + numFreqVals = length(fSearchSpace); + peakVal = zeros(numFreqVals,1); + peakIdx = peakVal; + ofdmInfo = nrOFDMInfo(carrier); + fs = ofdmInfo.SampleRate; + for fIdx = 1:numFreqVals + rxCorrected = ... + HelperNRNTNThroughput.compensateDopplerShift( ... + rx,fs,fSearchSpace(fIdx),true); + [~,corr] = nrTimingEstimate(carrier,rxCorrected,varargin{1:end-1}); + corr = sum(abs(corr),2); + [peakVal(fIdx),peakIdx(fIdx)] = max(corr); + end + [~,id] = max(peakVal); + % Estimate frequency shift and timing offset + fO = fSearchSpace(id); + tO = peakIdx(id)-1; + end + + % Functions to model power amplifier nonlinearity + function out = paMemorylessGaAs2Dot1GHz(in) + % 2.1 GHz GaAs + absIn = abs(in).^(2*(1:7)); + out = (-0.618347-0.785905i) * in + (2.0831-1.69506i) * in .* absIn(:,1) + ... + (-14.7229+16.8335i) * in .* absIn(:,2) + (61.6423-76.9171i) * in .* absIn(:,3) + ... + (-145.139+184.765i) * in .* absIn(:,4) + (190.61-239.371i)* in .* absIn(:,5) + ... + (-130.184+158.957i) * in .* absIn(:,6) + (36.0047-42.5192i) * in .* absIn(:,7); + + end + + function out = paMemorylessGaN2Dot1GHz(in) + % 2.1 GHz GaN + absIn = abs(in).^(2*(1:4)); + out = (0.999952-0.00981788i) * in + (-0.0618171+0.118845i) * in .* absIn(:,1) + ... + (-1.69917-0.464933i) * in .* absIn(:,2) + (3.27962+0.829737i) * in .* absIn(:,3) + ... + (-1.80821-0.454331i) * in .* absIn(:,4); + + end + + function out = paMemorylessCMOS28GHz(in) + % 28 GHz CMOS + absIn = abs(in).^(2*(1:7)); + out = (0.491576+0.870835i) * in + (-1.26213+0.242689i) * in .* absIn(:,1) + ... + (7.11693+5.14105i) * in .* absIn(:,2) + (-30.7048-53.4924i) * in .* absIn(:,3) + ... + (73.8814+169.146i) * in .* absIn(:,4) + (-96.7955-253.635i)* in .* absIn(:,5) + ... + (65.0665+185.434i) * in .* absIn(:,6) + (-17.5838-53.1786i) * in .* absIn(:,7); + + end + + function out = paMemorylessGaN28GHz(in) + % 28 GHz GaN + absIn = abs(in).^(2*(1:5)); + out = (-0.334697-0.942326i) * in + (0.89015-0.72633i) * in .* absIn(:,1) + ... + (-2.58056+4.81215i) * in .* absIn(:,2) + (4.81548-9.54837i) * in .* absIn(:,3) + ... + (-4.41452+8.63164i) * in .* absIn(:,4) + (1.54271-2.94034i)* in .* absIn(:,5); + + end + + function paChar = getDefaultLookup + % The operating specification for the LDMOS-based Doherty + % amplifier are: + % * A frequency of 2110 MHz + % * A peak power of 300 W + % * A small signal gain of 61 dB + % Each row in HAV08_Table specifies Pin (dBm), gain (dB), phase + % shift (degrees) as derived from figure 4 of Hammi, Oualid, et + % al. "Power amplifiers' model assessment and memory effects + % intensity quantification using memoryless post-compensation + % technique." IEEE Transactions on Microwave Theory and + % Techniques 56.12 (2008): 3170-3179. + + HAV08_Table =... + [-35,60.53,0.01; + -34,60.53,0.01; + -33,60.53,0.08; + -32,60.54,0.08; + -31,60.55,0.1; + -30,60.56,0.08; + -29,60.57,0.14; + -28,60.59,0.19; + -27,60.6,0.23; + -26,60.64,0.21; + -25,60.69,0.28; + -24,60.76,0.21; + -23,60.85,0.12; + -22,60.97,0.08; + -21,61.12,-0.13; + -20,61.31,-0.44; + -19,61.52,-0.94; + -18,61.76,-1.59; + -17,62.01,-2.73; + -16,62.25,-4.31; + -15,62.47,-6.85; + -14,62.56,-9.82; + -13,62.47,-12.29; + -12,62.31,-13.82; + -11,62.2,-15.03; + -10,62.15,-16.27; + -9,62,-18.05; + -8,61.53,-20.21; + -7,60.93,-23.38; + -6,60.2,-26.64; + -5,59.38,-28.75]; + % Convert the second column of the HAV08_Table from gain to + % Pout for use by the memoryless nonlinearity System object. + paChar = HAV08_Table; + paChar(:,2) = paChar(:,1) + paChar(:,2); + end + + function out = getDefaultCoefficients + % The 2.44 GHz memory polynomial model defined in TR 38.803 + % Appendix A. Memory-polynomial depth is 5 and + % memory-polynomial degree is 5. Rows in the output corresponds + % to memory depth. + out = [20.0875+0.4240i -6.3792-0.5507i 0.5809+0.0644i 1.6619+0.1040i -0.3561-0.1033i; ... + -59.8327-34.7815i -2.4805+0.9344i 4.2741+0.7696i -2.0014-2.3785i -1.2566+1.0495i; ... + 3.2738e2+8.4121e2i 4.4019e2-3.0714e1i -3.5935e2-9.9152e0i 1.6961e2+7.3829e1i -4.1661-21.1090i; ... + -1.6352e3-5.5757e3i -2.5782e3+3.3332e2i 1.9915e3-1.4479e2i -9.0167e2-5.4617e2i -93.1907+14.2774i; ... + 2.3022e3+1.2348e4i 4.6476e3-1.4477e3i -2.9998e3+1.6071e3i 9.1856e2+9.8066e2i 8.2544e2+6.1424e2i].'; + end + + function [txWaveform,info] = generatePDSCHWaveform(carrier,pdsch,dlsch,wtx,dt,numSlots) + arguments + carrier + pdsch + dlsch = struct + wtx = eye(pdsch.NumLayers) + dt = "double" + numSlots = 1 + end + + % Initialize variables + nTx = size(wtx,2); + tmpGrid = nrResourceGrid(carrier,nTx,OutputDataType=dt); + pdschGrid = repmat(tmpGrid,[1 numSlots 1]); + refGrid = pdschGrid; + nSlotSymb = carrier.SymbolsPerSlot; + initialNSlot = carrier.NSlot; + numCW = pdsch.NumCodewords; + + % Process loop for each slot + for slotIdx = 0:numSlots-1 + [slotGrid,refSlotGrid] = deal(tmpGrid); + carrier.NSlot = initialNSlot + slotIdx; + + % Perform PDSCH modulation + [pdschIndices,pdschIndicesInfo] = nrPDSCHIndices(carrier,pdsch); + if isempty(fieldnames(dlsch)) + % Update the codeword with valid bits + cw = cell(1,numCW); + for i = 1:numCW + cw{i} = randi([0 1],pdschIndicesInfo.G(i),1); + end + else + % Encode with the inputs provided in the dlsch + % structure + cw = dlsch.Encoder(pdsch.Modulation,pdsch.NumLayers, ... + pdschIndicesInfo.G,dlsch.RedundancyVersion, ... + dlsch.HARQProcessID); + end + if ~isempty(cw) + pdschSymbols = nrPDSCH(carrier,pdsch,cw,OutputDataType=dt); + % Perform implementation-specific PDSCH MIMO precoding + % and mapping + [pdschAntSymbols,pdschAntIndices] = nrPDSCHPrecode( ... + carrier,pdschSymbols,pdschIndices,wtx); + slotGrid(pdschAntIndices) = pdschAntSymbols; + end + + % Perform implementation-specific PDSCH DM-RS MIMO + % precoding and mapping + dmrsSymbols = nrPDSCHDMRS(carrier,pdsch,OutputDataType=dt); + dmrsIndices = nrPDSCHDMRSIndices(carrier,pdsch); + [dmrsAntSymbols,dmrsAntIndices] = nrPDSCHPrecode( ... + carrier,dmrsSymbols,dmrsIndices,wtx); + slotGrid(dmrsAntIndices) = dmrsAntSymbols; + refSlotGrid(dmrsAntIndices) = dmrsAntSymbols; + + % Perform implementation-specific PDSCH PT-RS MIMO + % precoding and mapping + ptrsSymbols = nrPDSCHPTRS(carrier,pdsch,OutputDataType=dt); + ptrsIndices = nrPDSCHPTRSIndices(carrier,pdsch); + [ptrsAntSymbols,ptrsAntIndices] = nrPDSCHPrecode( ... + carrier,ptrsSymbols,ptrsIndices,wtx); + slotGrid(ptrsAntIndices) = ptrsAntSymbols; + refSlotGrid(ptrsAntIndices) = ptrsAntSymbols; + + % Map to the grid containing multiple slots + symIdx = (nSlotSymb*slotIdx)+1:(nSlotSymb*(slotIdx+1)); + pdschGrid(:,symIdx,:) = slotGrid; + refGrid(:,symIdx,:) = refSlotGrid; + end + + % Perform OFDM modulation + carrier.NSlot = initialNSlot; + [txWaveform,info] = nrOFDMModulate(carrier,pdschGrid); + + % Append the resource grids to output structure + info.ResourceGrid = pdschGrid; + info.ReferenceGrid = refGrid; + end + + function [slotTimes,symLen] = getSlotTimes(nSymbSlot,sl,fs,nf,dt) + % Get the slot time + symLen = cumsum(sl); % Lengths of each OFDM symbol in a slot + nSubFrames = 10; + samples = [0 symLen(nSymbSlot:nSymbSlot:end-1)]'./fs; + subframeTimes = (0:(nf*nSubFrames)-1)*1e-3; + slotTimes = cast(reshape(samples+subframeTimes,[],1),dt); + end + + function info = initializeDelayObjects(simParameters, waveformInfo, varargin) + %initializeDelayObjects Initialize delay objects for NR NTN links. + % + % info = initializeDelayObjects(simParameters, waveformInfo) + % computes delay and path loss based on simParameters and waveformInfo. + % + % info = initializeDelayObjects(simParameters, waveformInfo, delayInSeconds) + % uses the provided delayInSeconds instead of computing it. + + % Parse optional input + if nargin > 2 && ~isempty(varargin{1}) + delayInSeconds = varargin{1}; + computeGeometry = false; + if simParameters.EnableDelay==0 + delayModel = "None"; + else + delayModel = simParameters.LinkVariationModel; + end + else + computeGeometry = true; + delayModel = simParameters.DelayModel; + end + + % Compute geometry-based parameters if needed + if computeGeometry + c = physconst("lightspeed"); + lambda = c / simParameters.CarrierFrequency; + slotTimes = HelperNRNTNThroughput.getSlotTimes( ... + simParameters.Carrier.SymbolsPerSlot, waveformInfo.SymbolLengths, ... + waveformInfo.SampleRate, simParameters.NFrames, simParameters.DataType); + if (delayModel == "Time-varying") + SU = slantRangeCircularOrbit(simParameters.ElevationAngle, ... + simParameters.SatelliteAltitude, simParameters.MobileAltitude, slotTimes); + lambda = c / simParameters.CarrierFrequency; + pathLoss = fspl(double(SU), lambda) .* simParameters.IncludeFreeSpacePathLoss; + delayInSeconds = SU ./ c; + else + SU = slantRangeCircularOrbit(simParameters.ElevationAngle, ... + simParameters.SatelliteAltitude, simParameters.MobileAltitude); + pathLoss = fspl(SU, lambda) * simParameters.IncludeFreeSpacePathLoss; % dB + pathLoss = repmat(pathLoss,1,numel(slotTimes)); % dB + delayInSeconds = cast(SU ./ c, simParameters.DataType); + end + + else + SU = []; + pathLoss = []; + end + + % Initialize configuration objects for delay modeling + if delayModel == "None" + staticDelay = dsp.Delay(Length=0); + variableFractionalDelay = 0; + variableIntegerDelay = 0; + delayInSeconds = 0; + numVariableFracDelaySamples = 0; + numVariableIntegSamples = 0; + maxVarPropDelay = 0; + elseif delayModel == "Static" + delayInSamples = delayInSeconds .* waveformInfo.SampleRate; + integDelaySamples = floor(delayInSamples); + fracDelaySamples = delayInSamples - integDelaySamples; + numVariableFracDelaySamples = repmat(fracDelaySamples, 1, ... + (simParameters.Carrier.SlotsPerFrame * simParameters.NFrames) + 1); + + staticDelay = dsp.Delay(Length=integDelaySamples); + variableFractionalDelay = dsp.VariableFractionalDelay( ... + InterpolationMethod="Farrow", ... + FarrowSmallDelayAction="Use off-centered kernel", ... + MaximumDelay=1); + variableIntegerDelay = 0; + numVariableIntegSamples = 0; + maxVarPropDelay = 0; + elseif delayModel == "Time-varying" + delayInSamples = delayInSeconds .* waveformInfo.SampleRate; + integDelaySamples = floor(delayInSamples); + numStaticDelaySamples = min(integDelaySamples); + remVariableDelaySamples = delayInSamples - numStaticDelaySamples; + staticDelay = dsp.Delay(Length=numStaticDelaySamples); + numVariableIntegSamples = floor(remVariableDelaySamples); + numVariableIntegSamples(numVariableIntegSamples < 0) = 0; + maxVarPropDelay = max(numVariableIntegSamples) + 2; + variableIntegerDelay = dsp.VariableIntegerDelay( ... + MaximumDelay=maxVarPropDelay); + numVariableFracDelaySamples = remVariableDelaySamples - numVariableIntegSamples; + variableFractionalDelay = dsp.VariableFractionalDelay( ... + InterpolationMethod="Farrow", ... + FarrowSmallDelayAction="Use off-centered kernel", ... + MaximumDelay=1); + else + error('Unknown DelayModel: %s', delayModel); + end + + % Build output structure + info = struct; + info.StaticDelay = staticDelay; + info.VariableIntegerDelay = variableIntegerDelay; + info.VariableFractionalDelay = variableFractionalDelay; + info.MaxVariablePropDelay = maxVarPropDelay; + info.NumVariableIntegerDelaySamples = numVariableIntegSamples; + info.NumVariableFractionalDelaySamples = numVariableFracDelaySamples; + info.DelayInSeconds = delayInSeconds; + + % Add path loss and slant distance only if computed + if ~isempty(SU) + info.PathLoss = pathLoss; + info.SlantDistance = SU; + end + + end + + function [hpa,hpaDelay,paInputScaleFactor] = initializePA( ... + paModel,hasMemory,paCharacteristics,coefficients) + % Initialize the power amplifier function handle or System + % object depending on the input configuration + paInputScaleFactor = 0; % in dB + hpaDelay = 0; + if hasMemory == 1 + hpa = rf.PAmemory; % Requires RF Toolbox + if isempty(coefficients) + hpa.CoefficientMatrix = ... + HelperNRNTNThroughput.getDefaultCoefficients; + paInputScaleFactor = -35; + else + hpa.CoefficientMatrix = coefficients; + end + hpaDelay = size(hpa.CoefficientMatrix,1)-1; + else + if paModel == "Custom" + if isempty(paCharacteristics) + hpa = comm.MemorylessNonlinearity(Method="Lookup table", ... + Table=HelperNRNTNThroughput.getDefaultLookup); + paInputScaleFactor = -35; + else + hpa = comm.MemorylessNonlinearity(Method="Lookup table", ... + Table=paCharacteristics); + end + elseif paModel == "2.1GHz GaAs" + hpa = @(in) HelperNRNTNThroughput.paMemorylessGaAs2Dot1GHz(in); + elseif paModel == "2.1GHz GaN" + hpa = @(in) HelperNRNTNThroughput.paMemorylessGaN2Dot1GHz(in); + elseif paModel == "28GHz CMOS" + hpa = @(in) HelperNRNTNThroughput.paMemorylessCMOS28GHz(in); + else % "28GHz GaN" + hpa = @(in) HelperNRNTNThroughput.paMemorylessGaN28GHz(in); + end + end + end + + function params = computeAccessSlotParameters(simParameters,waveformInfo) + %computeAccessSlotParameters Finds the earliest access time + %between a moving UE and a satellite, and computes elevation + %angle, path loss, Doppler shift, and propagation delay for + %each slot. + + % Initialize scenario sample time and stop time + ScenarioStopTime = simParameters.ScenarioStartTime + seconds(simParameters.ScenarioRunTime); + tSlot = HelperNRNTNThroughput.getSlotTimes( ... + simParameters.Carrier.SymbolsPerSlot,waveformInfo.SymbolLengths, ... + waveformInfo.SampleRate,simParameters.NFrames,simParameters.DataType); + ScenarioSampleTime = min(diff(tSlot)); + % Create a satelliteScenario object + sc = satelliteScenario(simParameters.ScenarioStartTime,ScenarioStopTime,double(ScenarioSampleTime)); + + % Add a moving UE to the scenario + ueStartLLA = itrf2geographic(simParameters.UEPosition); + ueEndPos = simParameters.UEPosition+simParameters.UEVelocity*simParameters.ScenarioRunTime; + ueEndLLA = itrf2geographic(ueEndPos); + trajectory = geoTrajectory([ueStartLLA'; ueEndLLA'],[0 simParameters.ScenarioRunTime]); + gs = platform(sc,trajectory,"Name","UE"); + + % Add a satellite to the scenario using Keplerian elements + sat = satellite(sc,simParameters.SemiMajorAxis, ... + simParameters.Eccentricity, simParameters.Inclination, ... + simParameters.RAAN, simParameters.Argofperiapsis, ... + simParameters.TrueAnomaly, Name = "Satellite 1"); + + % Compute required access duration to transmit the entire data + totalTime = simParameters.NFrames*10e-3; % 10msec per frame + % Find the Access intervals + ac = access(sat, gs); + accessIntrvl = accessIntervals(ac); + if isempty(accessIntrvl) + error("No access intervals found: The satellite is not visible to the UE. " + ... + "Check satellite orbital parameters, UE position and velocity, " + ... + "and scenario start time and duration."); + end + % Find first interval with sufficient duration + disp('Access interval table (periods when satellite is visible to UE):'); + disp(accessIntrvl) + + if simParameters.LinkVariationModel=="Static" + accessStartTime = accessIntrvl.StartTime(1); + else + accessStartTime = []; + for idx=1:size(accessIntrvl,2) + if totalTime<=seconds(accessIntrvl.EndTime(idx)-accessIntrvl.StartTime(idx)) + accessStartTime = accessIntrvl.StartTime(idx); + break; + end + end + + if isempty(accessStartTime) + error("Insufficient visible time: The satellite's visibility duration is not long enough for continuous data transmission.") + end + end + disp("Transmission start time : " +string(accessStartTime) + " UTC") + + % Calculate slot times + if simParameters.LinkVariationModel ~= "Time-varying" + slotTimes = accessStartTime; + else + tSlot = HelperNRNTNThroughput.getSlotTimes( ... + simParameters.Carrier.SymbolsPerSlot, ... + waveformInfo.SymbolLengths, ... + waveformInfo.SampleRate, ... + simParameters.NFrames, simParameters.DataType); + + slotTimes = accessStartTime + seconds(tSlot); + end + + % Preallocate + nSlots = numel(slotTimes); + el = zeros(nSlots, 1); + pathLoss = zeros(nSlots, 1); + preCompDoppler = zeros(nSlots, 1); + satDoppler = zeros(nSlots, 1); + delayInSeconds = zeros(nSlots, 1); + + % Wavelength + c = physconst("lightspeed"); + lambda = c / simParameters.CarrierFrequency; + uevel = [0;0;0]; % Stationary UE + + for k = 1:nSlots + % Elevation angle + [~, el(k)] = aer(gs, sat, slotTimes(k)); + % Doppler due to satellite and UE motion + preCompDoppler(k) = simParameters.EnableDoppler*dopplershift(gs, sat, slotTimes(k), ... + Frequency=simParameters.CarrierFrequency); + % Doppler shift only due to satellite motion + [satpos,satvel] = states(sat,slotTimes(k),CoordinateFrame='ecef'); + uepos = states(gs,slotTimes(k),CoordinateFrame='ecef'); + satDoppler(k) = simParameters.EnableDoppler*satcom.internal.dopplerShift(simParameters.CarrierFrequency,uepos,satpos,uevel,satvel); + % Delay + delay = latency(gs, sat, slotTimes(k)); + delayInSeconds(k) = simParameters.EnableDelay*delay; + % Free space path loss + range = delay * c; + pathLoss(k) = simParameters.EnablePathLoss*fspl(double(range), lambda); + end + + % Total number of slots + totalSlots = simParameters.NFrames*simParameters.Carrier.SlotsPerFrame; + + % Expand to totalSlots if needed + if nSlots == 1 + el = repmat(el, totalSlots, 1); + pathLoss = repmat(pathLoss, totalSlots, 1); + preCompDoppler = repmat(preCompDoppler, totalSlots, 1); + satDoppler = repmat(satDoppler, totalSlots, 1); + end + + params.ElevationAngle = el; + params.PathLoss = pathLoss; + params.PreCompDopplerShift = preCompDoppler; + params.SatelliteDopplerShift = satDoppler; + params.DelayInSeconds = delayInSeconds; + params.SlotTimes = slotTimes; + params.AccessStartTime = accessStartTime; + end + + function [txWaveform,info] = generatePUSCHWaveform(carrier,pusch,ulsch,wtx,dmrsPower,dt,numSlots) + %generatePUSCHWaveform generates a PUSCH (Physical Uplink + %Shared Channel) transmit waveform + + arguments + carrier + pusch + ulsch = struct + wtx = eye(pusch.NumLayers) + dmrsPower = 3 % dB + dt = "double" + numSlots = 1 + end + + % Initialize variables + nTx = size(wtx,2); % Number of transmit antennas + tmpGrid = nrResourceGrid(carrier,nTx,OutputDataType=dt); + puschGrid = repmat(tmpGrid,[1 numSlots 1]); + refGrid = puschGrid; + nSlotSymb = carrier.SymbolsPerSlot; + initialNSlot = carrier.NSlot; + numCW = pusch.NumCodewords; + + % Process loop for each slot + for slotIdx = 0:numSlots-1 + [slotGrid,refSlotGrid] = deal(tmpGrid); + carrier.NSlot = initialNSlot + slotIdx; + + % Generate PUSCH indices and PT-RS indices + [puschIndices,puschIndicesInfo,ptrsIndices] = nrPUSCHIndices(carrier,pusch); + if isempty(fieldnames(ulsch)) + % Update the codeword with valid bits + cw = cell(1,numCW); + for i = 1:numCW + cw{i} = randi([0 1],puschIndicesInfo.G(i),1); + end + else + % Perform UL-SCH encoding with the inputs provided in the ulsch structure + cw = ulsch.Encoder(pusch.Modulation,pusch.NumLayers, ... + puschIndicesInfo.G,ulsch.RedundancyVersion, ... + ulsch.HARQProcessID,ulsch.CBGTI); + end + + % Perform PUSCH modulation + if ~isempty(cw) + [puschSymbols, ptrsSymbols] = nrPUSCH(carrier,pusch,cw,OutputDataType=dt); + % Implementation-specific PUSCH MIMO precoding and mapping. This + % MIMO precoding step is in addition to any codebook based + % MIMO precoding done during PUSCH modulation above + [~,puschAntIndices] = nrExtractResources(puschIndices,slotGrid); + slotGrid(puschAntIndices) = puschSymbols * wtx; + end + + % Implementation-specific PUSCH DM-RS MIMO precoding and mapping + % using the nrPDSCHPrecode function which supports PUSCH MIMO + % precoding as well. The first DM-RS creation includes codebook + % based MIMO precoding if applicable + dmrsSymbols = db2mag(dmrsPower)*nrPUSCHDMRS(carrier,pusch,OutputDataType=dt); + dmrsIndices = nrPUSCHDMRSIndices(carrier,pusch); + [dmrsAntSymbols,dmrsAntIndices] = nrPDSCHPrecode( ... + carrier,dmrsSymbols,dmrsIndices,wtx); + slotGrid(dmrsAntIndices) = dmrsAntSymbols; + refSlotGrid(dmrsAntIndices) = dmrsAntSymbols; + + % Implementation-specific PUSCH PT-RS MIMO precoding and mapping + % using the nrPDSCHPrecode function which supports PUSCH MIMO + % precoding as well. If TransformPrecoding = 1, puschSymbols + % already include PT-RS symbols + if ~pusch.TransformPrecoding && ~isempty(ptrsSymbols) + [ptrsAntSymbols,ptrsAntIndices] = nrPDSCHPrecode(carrier,ptrsSymbols,ptrsIndices,wtx); + slotGrid(ptrsAntIndices) = ptrsAntSymbols; + refSlotGrid(ptrsAntIndices) = ptrsAntSymbols; + end + + % Map to the grid containing multiple slots + symIdx = (nSlotSymb*slotIdx)+1:(nSlotSymb*(slotIdx+1)); + puschGrid(:,symIdx,:) = slotGrid; + refGrid(:,symIdx,:) = refSlotGrid; + end + + % Perform OFDM modulation + [txWaveform,info] = nrOFDMModulate(carrier,puschGrid); + + % Append the resource grids to output structure + info.ResourceGrid = puschGrid; + info.ReferenceGrid = refGrid; + end + + function [channel, maxChDelay, ueDoppler] = configureNTNChannel(simParameters,elevation,sampleRate) + %configureNTNChannel Configure NTN channel object and compute max channel delay. + + mobileSpeed = norm(simParameters.UEVelocity); % m/s + c = physconst("LightSpeed"); + ueDoppler = mobileSpeed*simParameters.CarrierFrequency/c; + + if strcmpi(simParameters.NTNChannelType, 'Narrowband') + channel = p681LMSChannel; + channel.Environment = simParameters.Environment; + channel.AzimuthOrientation = simParameters.AzimuthOrientation; + channel.CarrierFrequency = simParameters.CarrierFrequency; + channel.ElevationAngle = elevation(1); + channel.MobileSpeed = mobileSpeed; + + elseif strcmpi(simParameters.NTNChannelType, 'TDL') + channel = nrTDLChannel; + swapTransmitAndReceive(channel); + channel.TransmissionDirection = "Uplink"; + channel.DelayProfile = simParameters.DelayProfile; + channel.DelaySpread = simParameters.DelaySpread; + channel.MaximumDopplerShift = ueDoppler; + channel.NumTransmitAntennas = simParameters.NumTransmitAntennas; + channel.NumReceiveAntennas = simParameters.NumReceiveAntennas; + + elseif strcmpi(simParameters.NTNChannelType, 'CDL') + channel = nrCDLChannel; + swapTransmitAndReceive(channel); + channel.DelayProfile = simParameters.DelayProfile; + channel.SatelliteElevationAngle = elevation(1); + channel.DelaySpread = simParameters.DelaySpread; + channel.TransmitAntennaArray.Size = simParameters.TxArraySize; + channel.ReceiveAntennaArray.Size = simParameters.RxArraySize; + channel.CarrierFrequency = simParameters.CarrierFrequency; + + else + error('Unknown NTNChannelType: %s', simParameters.NTNChannelType); + end + + % Common channel parameters + channel.SampleRate = sampleRate; + channel.RandomStream = "mt19937ar with seed"; + channel.Seed = 73; + + % Maximum channel delay computation + chInfo = info(channel); + maxChDelay = ceil(max(chInfo.PathDelays * channel.SampleRate)) + ... + chInfo.ChannelFilterDelay; + + % CDL-specific Doppler and orientation settings + if simParameters.NTNChannelType == "CDL" + channel.UTDirectionOfTravel = [chInfo.AnglesAoA(1) chInfo.AnglesAoD(1); ... % [Rx_Sat_Azi Tx_UE_Azi; Rx_Sat_Zen Tx_UE_Zen] + chInfo.AnglesZoA(1) chInfo.AnglesZoD(1)]; + channel.ReceiveArrayOrientation = [chInfo.AnglesAoA(1); chInfo.AnglesZoA(1) - 90; 0]; % Satellite RX array pointing toward UE + end + end + + function initialOffset = estimateInitialTimingOffset(rxCarrier,rxData,dmrsParams,syncModel,inifValsVec) + %estimateInitialTimingOffset Estimate initial timing offset based on sync model + if syncModel == "auto corr" + initialOffset = nrTimingEstimate(rxCarrier,rxData,dmrsParams.DMRSIndices,dmrsParams.DMRSSymbols); + elseif syncModel == "diff corr" + initialOffset = HelperNRNTNThroughput.diffcorr( ... + rxCarrier,rxData,dmrsParams.DMRSIndices,dmrsParams.DMRSSymbols); + else + initialOffset = HelperNRNTNThroughput.jointTimeFreq( ... + rxCarrier,rxData,dmrsParams.DMRSIndices,dmrsParams.DMRSSymbols,inifValsVec); + end + end + + function [rxWaveform,offset,shiftOut] = compensateRxDoppler(rxWaveform,rxDopplerParams,dmrsParams, waveinfo) + %compensateRxDoppler Compensate for Doppler shift in received waveform + + if rxDopplerParams.CompensationMethod == "joint time-freq" + % Perform joint time-frequency synchronization + [offset,fOEst] = HelperNRNTNThroughput.jointTimeFreq( ... + rxDopplerParams.RxCarrier,rxWaveform,dmrsParams.DMRSIndices,dmrsParams.DMRSSymbols,rxDopplerParams.FreqSearchRange); + % Compensate Doppler shift + rxWaveform = HelperNRNTNThroughput.compensateDopplerShift( ... + rxWaveform,waveinfo.SampleRate, ... + fOEst,true); + % Estimate and compensate the residual (fractional) Doppler shift + fractionalDopplerShift = ... + HelperNRNTNThroughput.estimateFractionalDopplerShift( ... + rxWaveform,rxDopplerParams.RxCarrier.SubcarrierSpacing,waveinfo.Nfft, ... + waveinfo.CyclicPrefixLengths(2),0,true); + rxWaveform = HelperNRNTNThroughput.compensateDopplerShift( ... + rxWaveform,waveinfo.SampleRate, ... + fractionalDopplerShift,true); + shiftOut = []; + else + % Perform fractional Doppler frequency shift estimation and + % compensation. Use the cyclic prefix in the OFDM waveform to + % compute the fractional Doppler shift. + [fractionalDopplerShift,detFlag] = ... + HelperNRNTNThroughput.estimateFractionalDopplerShift( ... + rxWaveform,rxDopplerParams.RxCarrier.SubcarrierSpacing,waveinfo.Nfft, ... + waveinfo.CyclicPrefixLengths(2),rxDopplerParams.Threshold, ... + true); + rxWaveform = HelperNRNTNThroughput.compensateDopplerShift( ... + rxWaveform,waveinfo.SampleRate, ... + fractionalDopplerShift,true); + + % Perform integer Doppler frequency shift estimation and + % compensation. Use the demodulation reference signals to + % compute the integer Doppler shift. + [integerDopplerShift,shiftOut] = ... + HelperNRNTNThroughput.estimateIntegerDopplerShift( ... + rxDopplerParams.RxCarrier,rxWaveform,dmrsParams.DMRSIndices, ... + dmrsParams.DMRSSymbols,rxDopplerParams.SampleOffset, ... + rxDopplerParams.UsePrevShift,rxDopplerParams.UseDiffCorrFlag,rxDopplerParams.Shift,rxDopplerParams.TotalDelay, ... + detFlag); + rxWaveform = HelperNRNTNThroughput.compensateDopplerShift( ... + rxWaveform,waveinfo.SampleRate, ... + integerDopplerShift,true); + offset = []; + end + end + + function [decbits,blkerr,cbgerr,info] = recoverPUSCHBits(rxWaveform,rxCarrier,dmrsParams,pusch,ulschDecParams) + %recoverPUSCHBits Recovers bits from the received waveform + + % Perform OFDM demodulation on the received data to recreate the + % resource grid. Include zero padding in the event that practical + % synchronization results in an incomplete slot being demodulated. + rxGrid = nrOFDMDemodulate(rxCarrier,rxWaveform); + [K,L,R] = size(rxGrid); + if (L < rxCarrier.SymbolsPerSlot) + rxGrid = cat(2,rxGrid,zeros(K,rxCarrier.SymbolsPerSlot-L,R)); + end + + % Perform least squares channel estimation between the received + % grid and each transmission layer, using the PUSCH DM-RS for each + % layer. This channel estimate includes the effect of transmitter + % precoding. + [estChannelGrid,noiseEst] = nrChannelEstimate(rxCarrier,rxGrid,... + dmrsParams.DMRSIndices,dmrsParams.DMRSSymbols,'CDMLengths',pusch.DMRS.CDMLengths); + + [refPUSCHIndices,refPUSCHIndicesInfo] = nrPUSCHIndices(rxCarrier,pusch); + + % Get PUSCH REs from the received grid and estimated channel grid + [puschRx,puschHest] = nrExtractResources(... + refPUSCHIndices,rxGrid,estChannelGrid); + + % Perform equalization + [puschEq,csi] = nrEqualizeMMSE(puschRx,puschHest,noiseEst); + + % Common phase error (CPE) compensation + if pusch.EnablePTRS + puschEq = hCompensateCPE(rxCarrier,pusch,puschEq,rxGrid,estChannelGrid,noiseEst); + end + + if ~any(isnan(puschEq)) + % Decode PUSCH symbols + [ulschLLRs,rxSymbols] = nrPUSCHDecode(rxCarrier,pusch,puschEq,noiseEst); + + % Apply channel state information to LLRs supporting transform precoding & PT-RS. + ulschLLRs = HelperNRNTNThroughput.applyCSIToLLRs(rxCarrier, pusch, numel(refPUSCHIndicesInfo.PRBSet), rxSymbols, ulschLLRs, csi); + + % Decode the UL-SCH transport channel + [decbits,blkerr,cbgerr] = ulschDecParams.Decoder(ulschLLRs,pusch.Modulation,... + pusch.NumLayers,ulschDecParams.RedundancyVersion,... + ulschDecParams.HARQProcessID,ulschDecParams.CBGTI); + else + decbits = []; + blkerr = true; + cbgerr = true; + end + + info = refPUSCHIndicesInfo; + end + + function ulschLLRs = applyCSIToLLRs(rxCarrier, pusch, MRB, rxSymbols, ulschLLRs, csi) + %applyCSIToLLRs Apply channel state information to LLRs, + %supporting transform precoding & PT-RS. + + % Ensure LLRs and symbols are cell arrays (one per codeword) + if ~iscell(ulschLLRs) + ulschLLRs = num2cell(ulschLLRs, 1); + rxSymbols = num2cell(rxSymbols, 1); + end + + % Apply channel state information (CSI) produced by the equalizer, + % including the effect of transform precoding if enabled + if pusch.TransformPrecoding + MSC = MRB * 12; % Number of subcarriers + + % Undo transform precoding for CSI, normalize + csi = nrTransformDeprecode(csi, MRB) / sqrt(MSC); + % Repeat each de-precoded CSI value across its corresponding subcarriers + csi = repmat(csi((1:MSC:end).'), 1, MSC).'; + if pusch.EnablePTRS + % Remove PT-RS CSI + ptrsLayerIndices = nrPUSCHPTRSIndices(rxCarrier, pusch); + csi(ptrsLayerIndices) = []; + end + + % Reshape CSI to match the shape of rxSymbols + csi = reshape(csi, size(rxSymbols{:})); + end + + % Layer de-map CSI + csi = nrLayerDemap(csi); + + % Apply CSI to LLRs for each codeword + for cwIdx = 1:pusch.NumCodewords + Qm = length(ulschLLRs{cwIdx}) / length(rxSymbols{cwIdx}); % Bits per symbol + csi{cwIdx} = repmat(csi{cwIdx}.', Qm, 1); % Expand by each bit per symbol + ulschLLRs{cwIdx} = ulschLLRs{cwIdx} .* csi{cwIdx}(:); % Scale by CSI + end + end + + end + +end + +function lla = itrf2geographic(ecef) +%itrf2geographic converts Earth-Centered Earth-Fixed (ECEF) +%coordinates to geodetic coordinates: latitude (degrees), +%longitude (degrees), and altitude (meters). + +geographicCoordinates = matlabshared.orbit.internal.Transforms.itrf2geographic(ecef); +% Convert to degrees and get the LLA coordinates +lla = [rad2deg(geographicCoordinates(1,1:end)); ... + rad2deg(geographicCoordinates(2,1:end)); ... + geographicCoordinates(3,1:end)]; +end diff --git a/lab_5/HelperNTNPositionEstimate.m b/lab_5/HelperNTNPositionEstimate.m new file mode 100755 index 0000000..71911b1 --- /dev/null +++ b/lab_5/HelperNTNPositionEstimate.m @@ -0,0 +1,151 @@ +classdef HelperNTNPositionEstimate + %HelperNTNPositionEstimate Class defining the supporting functions used + %in the receiver position estimation in NTN example + % + % Note: This is an undocumented class and its API and/or + % functionality may change in subsequent releases. + + % Copyright 2024-2025 The MathWorks, Inc. + + methods (Static) + function out = instantposition(s, v, r, rDot) + % OUT = instantposition(S,V,R,RDOT) returns the possible + % position OUT using satellite position S, satellite velocity + % V, range R, and range-rate RDOT. S and V are in Earth + % Centered Earth Fixed (ECEF) coordinate system. R is in m and + % RDOT is in m/s. OUT is a 3-by-2 matrix with each column + % corresponding to a possible position in LLA (Latitude, + % Longitude, Altitude). + + tolerance = 1e-4; + max_iter_refine = 1000; + % Earth Parameters + r_E = 6378137; % Equatorial radius (meters) + r_p = 6356752; % Polar radius (meters) + + % Initialize two r_c values with random values + r_c_1 = (r_E - r_p) * rand(); + r_c_2 = r_c_1; % Starting both from the same value (can be different if needed) + + % Refinement loop for two solutions + for iter = 1:max_iter_refine + prev_r_c_1 = r_c_1; + prev_r_c_2 = r_c_2; + + % Compute geometric parameters + r_s2 = dot(s,s); % Squared norm of position vector + + % Linear system for refinement + A = [s(1) s(2); v(1) v(2)]; + b_1 = 0.5*(r_s2 + r_c_1^2 - r^2); + b_2 = 0.5*(r_s2 + r_c_2^2 - r^2); + c = dot(s,v) - r*rDot; + + % Solve the parameters for r_c_1 and r_c_2 + mat_1 = [b_1, s(3); c, v(3)]; + mat_2 = [b_2, s(3); c, v(3)]; + + params_1 = A \ mat_1; + params_2 = A \ mat_2; + + % Extract parameters for the first solution + alpha_1 = params_1(1); + beta_1 = params_1(3); + gamma_1 = params_1(2); + delta_1 = params_1(4); + + % Extract parameters for the second solution + alpha_2 = params_2(1); + beta_2 = params_2(3); + gamma_2 = params_2(2); + delta_2 = params_2(4); + + % Calculate discriminant for both solutions + numerator_1 = alpha_1 * beta_1 + gamma_1 * delta_1; + discriminant_1 = numerator_1^2 - (1 + delta_1^2 + beta_1^2) * (alpha_1^2 + gamma_1^2 - r_c_1^2); + + numerator_2 = alpha_2 * beta_2 + gamma_2 * delta_2; + discriminant_2 = numerator_2^2 - (1 + delta_2^2 + beta_2^2) * (alpha_2^2 + gamma_2^2 - r_c_2^2); + + % Handle negative discriminant by regenerating r_c + if discriminant_1 < 0 + r_c_1 = r_p + (r_E - r_p) * rand(); + continue; + end + if discriminant_2 < 0 + r_c_2 = r_p + (r_E - r_p) * rand(); + continue; + end + + % Compute z-coordinates for both solutions + z_hat_1 = (numerator_1 + sqrt(discriminant_1)) / (1 + delta_1^2 + beta_1^2); + z_hat_2 = (numerator_2 - sqrt(discriminant_2)) / (1 + delta_2^2 + beta_2^2); + + % Compute x and y coordinates for both solutions + x_hat_1 = alpha_1 - beta_1 * z_hat_1; + y_hat_1 = gamma_1 - delta_1 * z_hat_1; + + x_hat_2 = alpha_2 - beta_2 * z_hat_2; + y_hat_2 = gamma_2 - delta_2 * z_hat_2; + + % Convert to LLA + lla_1 = ecef2llaLocal([x_hat_1; y_hat_1; z_hat_1]); + lla_2 = ecef2llaLocal([x_hat_2; y_hat_2; z_hat_2]); + + % Recalculate r_c for refined solutions + dr_1 = sind(lla_1(1))^2 + cosd(lla_1(1))^2 * (r_p / r_E)^2; + r_c_1 = sqrt(r_p^2 / dr_1); + + dr_2 = sind(lla_2(1))^2 + cosd(lla_2(1))^2 * (r_p / r_E)^2; + r_c_2 = sqrt(r_p^2 / dr_2); + + % Check convergence for both solutions + if abs(r_c_1 - prev_r_c_1) < tolerance && abs(r_c_2 - prev_r_c_2) < tolerance + break; + end + end + out = []; + if discriminant_1 > 0 + out = lla_1(:); + end + if discriminant_2 > 0 + out = [out(:) lla_2(:)]; + end + end + + function error = positionerror(originalPos,estimatedPos) + % ERR = positionerror(ORIGINALPOS,ESTIMATEDPOS) computes the + % position errors ERR for given original position ORIGINALPOS + % and estimated positions ESTIMATEDPOS. Original position and + % estimated positions are in LLA. ESTIMATEDPOS is 3-by-N matrix + % with N being the number of positions. + + % Convert the positions to ECEF + posECEF = lla2ecefLocal([originalPos estimatedPos]); + error = vecnorm(posECEF(:,1)-posECEF(:,2:end)); + end + end +end + +function lla = ecef2llaLocal(ecef) +% Output Latitude (degrees), Longitude (degrees), and Altitude (meters) + +tmp = matlabshared.orbit.internal.Transforms.itrf2geographic(ecef); +% Convert to degrees and get the LLA coordinates +lla = [rad2deg(tmp(1,1:end)); ... + rad2deg(tmp(2,1:end)); ... + tmp(3,1:end)]; + +end + +function ecef = lla2ecefLocal(lla) +% Output ECEF: X (meters), Y (meters), and Z (meters) + +% Convert to radians +lla = [deg2rad(lla(1,1:end)); ... + deg2rad(lla(2,1:end)); ... + lla(3,1:end)]; +% Get ECEF coordinates +ecef = matlabshared.orbit.internal.Transforms.geographic2itrf(lla); + +end diff --git a/lab_5/create_baseline_configuration.m b/lab_5/create_baseline_configuration.m new file mode 100644 index 0000000..1bcd69a --- /dev/null +++ b/lab_5/create_baseline_configuration.m @@ -0,0 +1,73 @@ +function [cfgEHT, simParameters, channel, chInfo, maxChDelay, satelliteDopplerShift, chanBW] = create_baseline_configuration(profile, ... + bandwidth_mhz, ... + include_free_space_pathloss, ... + delay_model, ... + carrier_frequency, ... + mobile_speed, ... + mobile_altitude, ... + satellite_altitude, ... + random_stream, ... + seed, ... + tx_antenna_count, ... + rx_antenna_count, ... + apep) + + switch bandwidth_mhz + case 20 + chanBW = 'CBW20'; + case 40 + chanBW = 'CBW40'; + case 80 + chanBW = 'CBW80'; + case 160 + chanBW = 'CBW160'; + case 320 + chanBW = 'CBW320'; + otherwise + error("Not supported bandwidth!"); + end + + cfgEHT = wlanEHTMUConfig(chanBW); + cfgEHT.User{1}.APEPLength = apep; + cfgEHT.NumTransmitAntennas = tx_antenna_count; + cfgEHT.User{1}.NumSpaceTimeStreams = 1; + cfgEHT.User{1}.MCS = 0; % default to sweep later + fs = wlanSampleRate(chanBW); + + simParameters.IncludeFreeSpacePathLoss = include_free_space_pathloss; + simParameters.DelayModel = delay_model; + simParameters.CarrierFrequency = carrier_frequency; + simParameters.ElevationAngle = 0; % default to sweep later + simParameters.MobileSpeed = mobile_speed; + simParameters.MobileAltitude = mobile_altitude; + simParameters.SatelliteAltitude = satellite_altitude; + simParameters.SampleRate = fs; + simParameters.RandomStream = random_stream; + simParameters.Seed = seed; + simParameters.NumTransmitAntennas = tx_antenna_count; + simParameters.NumReceiveAntennas = rx_antenna_count; + + simParameters.NTNChannelType = "TDL"; + simParameters.DelayProfile = "NTN-TDL-" + profile; + simParameters.DelaySpread = 30e-9; + + c = physconst("lightspeed"); + satelliteDopplerShift = dopplerShiftCircularOrbit( ... + simParameters.ElevationAngle,simParameters.SatelliteAltitude, ... + simParameters.MobileAltitude,simParameters.CarrierFrequency); + + channel = nrTDLChannel; + channel.DelayProfile = simParameters.DelayProfile; + channel.DelaySpread = simParameters.DelaySpread; + channel.SatelliteDopplerShift = satelliteDopplerShift; + channel.MaximumDopplerShift = simParameters.MobileSpeed*simParameters.CarrierFrequency/c; + channel.NumTransmitAntennas = simParameters.NumTransmitAntennas; + channel.NumReceiveAntennas = simParameters.NumReceiveAntennas; + + channel.SampleRate = simParameters.SampleRate; + channel.RandomStream = simParameters.RandomStream; + channel.Seed = simParameters.Seed; + + chInfo = info(channel); + maxChDelay = ceil(max(chInfo.PathDelays*channel.SampleRate)) + chInfo.ChannelFilterDelay; +end \ No newline at end of file diff --git a/lab_5/create_satellite_sim.m b/lab_5/create_satellite_sim.m new file mode 100644 index 0000000..82127c5 --- /dev/null +++ b/lab_5/create_satellite_sim.m @@ -0,0 +1,12 @@ +function satSim = create_satellite_sim(satConfig, stationConfig) + satSim.sc = satelliteScenario; + satSim.sc.StartTime = satConfig.startTime; + satSim.sc.StopTime = satConfig.stopTime; + satSim.sc.SampleTime = satConfig.sampleTime; + + earthRadius = physconst("EarthRadius"); + semiMajorAxis = earthRadius + satConfig.satAltitude; + + satSim.sat = satellite(satSim.sc, semiMajorAxis, satConfig.eccentricity, satConfig.inclination, satConfig.raan, satConfig.argOfPeriapsis, satConfig.trueAnomaly, Name=satConfig.name, OrbitPropagator=satConfig.orbitPropagator); + satSim.ue = groundStation(satSim.sc, stationConfig.Lat, stationConfig.Lon, Altitude=stationConfig.Altitude, Name=stationConfig.Name); +end \ No newline at end of file diff --git a/lab_5/distance_over_time.svg b/lab_5/distance_over_time.svg new file mode 100644 index 0000000..dca0248 --- /dev/null +++ b/lab_5/distance_over_time.svg @@ -0,0 +1,207 @@ + + +Qt SVG Document +MATLAB, The MathWorks, Inc. Version 26.1.0.3251617 R2026a Update 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lab_5/elevation_angle_over_time.svg b/lab_5/elevation_angle_over_time.svg new file mode 100644 index 0000000..b5d014f --- /dev/null +++ b/lab_5/elevation_angle_over_time.svg @@ -0,0 +1,226 @@ + + +Qt SVG Document +MATLAB, The MathWorks, Inc. Version 26.1.0.3251617 R2026a Update 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +08:00 + + + +08:30 + + + +09:00 + + + +09:30 + + + +10:00 + + + +Time [s] + + + +Jun 17, 2026 + + + +Elevation angle to satellite [degree] + + + + + + + + + + + + + + + + + + + + + + + + + + + + +-100 + + + +-80 + + + +-60 + + + +-40 + + + +-20 + + + +0 + + + +20 + + + +40 + + + +60 + + + +80 + + + +Elevation angle over time plot of satellite pass + + + + + + + diff --git a/lab_5/lab_5.m b/lab_5/lab_5.m new file mode 100644 index 0000000..591cd3f --- /dev/null +++ b/lab_5/lab_5.m @@ -0,0 +1,31 @@ +satConfig.startTime = datetime(2026,6,17,08,00,00); +satConfig.stopTime = satConfig.startTime + hours(2); +satConfig.sampleTime = 30; +satConfig.satAltitude = 600e3; +satConfig.eccentricity = 0; +satConfig.inclination = 90; +satConfig.raan = 42; +satConfig.argOfPeriapsis = 32; +satConfig.trueAnomaly = 0; +satConfig.name = "Timos Surveillance LEO Satellite"; +satConfig.orbitPropagator = "two-body-keplerian"; + +groundStation.Lat = 52.515744683039436; +groundStation.Lon = 13.325825073341306; +groundStation.Name = "HFT building at Einsteinufer 25"; +% https://www.randymajors.org/elevation-on-google-maps?x=13.3258251&y=52.5157447&cx=13.3258251&cy=52.5157447&zoom=15&labels=show +groundStation.Altitude = 37; + +calc_task1 = true; +calc_task2 = true; + +if calc_task1 + task1; +end + +if calc_task2 + if ~calc_task1 + task1; + end + task2; +end \ No newline at end of file diff --git a/lab_5/leo_satellite_pass.md b/lab_5/leo_satellite_pass.md new file mode 100644 index 0000000..3528c5e --- /dev/null +++ b/lab_5/leo_satellite_pass.md @@ -0,0 +1,29 @@ +

+Lab 5 - Wireless Networking Technologies +

+

+Analyzing a LEO Satellite Pass +

+

+by Timo Niemann +

+ +### Task1 + +#### 1.1 + +See code `lab_5.m` and `create_satellite_sim.m`, where the first file defines all parameters for the simulation and the create_satellite_sim function creates and returns the satellite and ground station. + +#### 1.2 + +To calculate the distance to the satellite, the MATLAB access analysis example was used as a basis and modified. The distance is calculated with the `aer` function, which returns azimuth, elevation, and slant range between the ground station and the satellite. To avoid invalid channel simulations, the signal-based estimation step is skipped when the Doppler shift `fshift` is non-finite. + +![Distance over time sweep](distance_over_time.svg) + +The first satellite flyby occurs at around 08:05:30. During the pass, the distance first decreases as the satellite approaches the ground station and then increases again after the closest approach. Around 08:53:30 to 08:54:00, the distance reaches a maximum because the satellite is on the far side of its orbit relative to the ground station. The second pass occurs at around 09:42. Its minimum distance is larger than during the first pass because Earth's rotation changes the relative position of the ground station below the satellite orbit. + +#### 1.3 + +![Elevation angle over time sweep](elevation_angle_over_time.svg) + +As in the distance plot, the elevation angle reaches its highest value during the first pass. The second pass has a lower maximum elevation because Earth's rotation shifts the ground station relative to the satellite ground track. diff --git a/lab_5/parfor_waitbar.m b/lab_5/parfor_waitbar.m new file mode 100644 index 0000000..5fa352c --- /dev/null +++ b/lab_5/parfor_waitbar.m @@ -0,0 +1,29 @@ +function parfor_waitbar(f, totalJobs, detail, reset) + persistent done + + if reset + done = 0; + if ishandle(f) + if isempty(detail) + waitbar(0, f, "Starting"); + else + waitbar(0, f, detail); + end + end + return + end + + if isempty(done) + done = 0; + end + + done = done + 1; + + if ishandle(f) + progressText = sprintf("Done %d/%d", done, totalJobs); + if ~isempty(detail) + progressText = sprintf("%s | %s", progressText, char(detail)); + end + waitbar(min(done / totalJobs, 1), f, progressText); + end +end diff --git a/lab_5/perform_access_analysis.m b/lab_5/perform_access_analysis.m new file mode 100644 index 0000000..825beeb --- /dev/null +++ b/lab_5/perform_access_analysis.m @@ -0,0 +1,75 @@ +function res = perform_access_analysis(satSim, queryTime) + sat = satSim.sat; + ue = satSim.ue; + + ac = access(sat,ue); + [status,timeout] = accessStatus(ac); + statusIdx = find(status,1); + if isempty(statusIdx) + disp("Position estimation cannot be performed " + ... + "as there is no access between satellite and UE.") + return + end + delete(ac) + + [~,el,r] = aer(ue,sat,queryTime); + + res.distanceToSatellite = r; + res.elevationAngleToSatellite = el; + + carrierFrequency = 2e9; + [fshift,~,dopplerInfo] = dopplershift( ... + sat,ue,queryTime,Frequency=carrierFrequency); + res.rangeRate = -1*dopplerInfo.RelativeVelocity; + + [satPos,satVel] = states(sat,queryTime,CoordinateFrame="ecef"); + + res.satPos = satPos; + res.satVel = satVel; + + if ~isfinite(fshift) + return; + end + + rng(0) + lightspeed = physconst("lightspeed"); + + frameDurInSeconds = 10e-3; + delayInSeconds = r/lightspeed; + nFrames = ceil(delayInSeconds/frameDurInSeconds) + 1; + carrier = nrCarrierConfig; + pdsch = nrPDSCHConfig; + pdsch.DMRS.DMRSAdditionalPosition = 2; + [txWaveform,waveformInfo] = ... + HelperNRNTNThroughput.generatePDSCHWaveform( ... + carrier,pdsch,struct,eye(pdsch.NumLayers),"double",carrier.SlotsPerFrame*nFrames); + refGridAllSlots = waveformInfo.ResourceGrid; + + delayInSamples = delayInSeconds.*waveformInfo.SampleRate; + integDelaySamples = floor(delayInSamples); + fracDelaySamples = (delayInSamples - integDelaySamples); + staticDelay = dsp.Delay(Length=integDelaySamples); + variableFractionalDelay = dsp.VariableFractionalDelay( ... + InterpolationMethod="Farrow", ... + FarrowSmallDelayAction="Use off-centered kernel", ... + MaximumDelay=1); + + delayedTx = staticDelay(txWaveform); + delayedTx = variableFractionalDelay(delayedTx,fracDelaySamples); + + channel = p681LMSChannel; + channel.SampleRate = waveformInfo.SampleRate; + channel.CarrierFrequency = carrierFrequency; + channel.SatelliteDopplerShift = fshift; + channel.MobileSpeed = 0; + channel.ElevationAngle = el; + channel.RandomStream = "mt19937ar with seed"; + rxWaveform = channel(delayedTx); + + freqSearch = 0.999*fshift:sign(fshift):1.001*fshift; + [delayEstSamples,fshiftEst] = HelperNRNTNThroughput.jointTimeFreq( ... + carrier,rxWaveform,refGridAllSlots,freqSearch); + + res.rangeEst = delayEstSamples*lightspeed/waveformInfo.SampleRate; + res.rangeRateEst = -1*fshiftEst*lightspeed/carrierFrequency; +end \ No newline at end of file diff --git a/lab_5/receive_power_over_time.svg b/lab_5/receive_power_over_time.svg new file mode 100644 index 0000000..e426239 --- /dev/null +++ b/lab_5/receive_power_over_time.svg @@ -0,0 +1,262 @@ + + +Qt SVG Document +MATLAB, The MathWorks, Inc. Version 26.1.0.3251617 R2026a Update 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +08:00 + + + +08:30 + + + +09:00 + + + +09:30 + + + +10:00 + + + +Time + + + +Jun 17, 2026 + + + +Power [dBm] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +-170 + + + +-160 + + + +-150 + + + +-140 + + + +-130 + + + +-120 + + + +-110 + + + +-100 + + + +-90 + + + +-80 + + + +-70 + + + +Receive power over time plot of satellite pass + + + + + + + + + + + +receive sensitivity -85 dBm + + + + + + + +reliable reception -75 dBm + + + diff --git a/lab_5/required_transmit_power.svg b/lab_5/required_transmit_power.svg new file mode 100644 index 0000000..64554e9 --- /dev/null +++ b/lab_5/required_transmit_power.svg @@ -0,0 +1,196 @@ + + +Qt SVG Document +MATLAB, The MathWorks, Inc. Version 26.1.0.3251617 R2026a Update 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +08:00 + + + +08:30 + + + +09:00 + + + +09:30 + + + +10:00 + + + +Time + + + +Jun 17, 2026 + + + +Power [dBm] + + + + + + + + + + + + + + + + + + + + + + +80 + + + +85 + + + +90 + + + +95 + + + +100 + + + +105 + + + +110 + + + +Required transmit power for -75 dBm receive power + + + + + + + diff --git a/lab_5/simulateTransmission.m b/lab_5/simulateTransmission.m new file mode 100644 index 0000000..39734a4 --- /dev/null +++ b/lab_5/simulateTransmission.m @@ -0,0 +1,106 @@ +function [numPacketErrors, numPacketsSimulated, cfrMagnitudes, rxPower, pathLoss]= simulateTransmission(accessAnalysisResults, cfgEHT, channel, maxChDelay, snr, maxNumErrors, simParameters) + numPacketErrors = 0; + numPacketsSimulated = 0; + cfrMagnitudes = []; + rxPower = zeros(size(accessAnalysisResults.elevationAngles)); + pathLoss = zeros(size(accessAnalysisResults.elevationAngles)); + + ofdmInfo = wlanEHTOFDMInfo('EHT-Data', cfgEHT); + ind = wlanFieldIndices(cfgEHT); + + stream = RandStream('combRecursive', Seed=simParameters.Seed); + stream.Substream = 1; + RandStream.setGlobalStream(stream); + + powerOnlySimulation = isempty(snr); + if ~powerOnlySimulation + snrVal = convertSNR(snr, "snrsc", "snr", FFTLength=ofdmInfo.FFTLength, NumActiveSubcarriers=ofdmInfo.NumTones); + end + + if isfield(simParameters, 'TransmitPower') + txPower = simParameters.TransmitPower; + else + txPower = 20; + end + + lambda = physconst("lightspeed") / simParameters.CarrierFrequency; + includePathLoss = isfield(simParameters, 'IncludeFreeSpacePathLoss') && simParameters.IncludeFreeSpacePathLoss; + + while (powerOnlySimulation || numPacketErrors < maxNumErrors) && numPacketsSimulated < numel(accessAnalysisResults.elevationAngles) + numPacketsSimulated = numPacketsSimulated + 1; + + if includePathLoss + packetDistance = accessAnalysisResults.distances(numPacketsSimulated); + pathLoss(numPacketsSimulated) = 20 * log10(4 * pi * packetDistance / lambda); + else + pathLoss(numPacketsSimulated) = 0; + end + rxPower(numPacketsSimulated) = txPower - pathLoss(numPacketsSimulated); + + txPSDU = randi([0 1], psduLength(cfgEHT) * 8, 1); + tx = wlanWaveformGenerator(txPSDU, cfgEHT); + + stf = tx(ind.LSTF(1):ind.LSTF(2), :); + stfPower = mean(abs(stf(:)).^2); + + tx = tx * sqrt(10^((txPower - 30) / 10)) / sqrt(stfPower); + + txPad = [tx; zeros(maxChDelay, cfgEHT.NumTransmitAntennas)]; + + if powerOnlySimulation + continue; + end + + packetElevationAngle = accessAnalysisResults.elevationAngles(numPacketsSimulated); + channel.SatelliteDopplerShift = dopplerShiftCircularOrbit(packetElevationAngle, simParameters.SatelliteAltitude, simParameters.MobileAltitude, simParameters.CarrierFrequency); + + reset(channel); + rx = awgn(channel(txPad) * db2mag(-pathLoss(numPacketsSimulated)), snrVal); + + coarsePacketOffset = wlanPacketDetect(rx, cfgEHT.ChannelBandwidth); + if isempty(coarsePacketOffset) + numPacketErrors = numPacketErrors + 1; + continue; + end + + lstf = rx(coarsePacketOffset + (ind.LSTF(1) : ind.LSTF(2)), :); + coarseFrequencyOffset = wlanCoarseCFOEstimate(lstf, cfgEHT.ChannelBandwidth); + rx = frequencyOffset(rx, simParameters.SampleRate, -coarseFrequencyOffset); + + nonhtfields = rx(coarsePacketOffset + (ind.LSTF(1) : ind.LSIG(2)), :); + finePacketOffset = wlanSymbolTimingEstimate(nonhtfields, cfgEHT.ChannelBandwidth); + + packetOffset = coarsePacketOffset + finePacketOffset; + + if packetOffset > maxChDelay + numPacketErrors = numPacketErrors + 1; + continue; + end + + rxLLTF = rx(packetOffset + (ind.LLTF(1) : ind.LLTF(2)), :); + fineFrequencyOffset = wlanFineCFOEstimate(rxLLTF, cfgEHT.ChannelBandwidth); + rx = frequencyOffset(rx, simParameters.SampleRate, -fineFrequencyOffset); + + rxHELTF = rx(packetOffset + (ind.EHTLTF(1) : ind.EHTLTF(2)), :); + heltfDemod = wlanEHTDemodulate(rxHELTF, "EHT-LTF", cfgEHT); + [chanEstimate, pilotEstimate] = wlanEHTLTFChannelEstimate(heltfDemod, cfgEHT); + + cfrMagnitudes(:, end + 1) = abs(chanEstimate(:, 1, 1)); + + rxData = rx(packetOffset + (ind.EHTData(1) : ind.EHTData(2)), :); + demodSym = wlanEHTDemodulate(rxData, "EHT-Data", cfgEHT); + + demodSym = wlanEHTTrackPilotError(demodSym, chanEstimate, cfgEHT, "EHT-Data"); + + nVarEst = wlanEHTDataNoiseEstimate(demodSym(ofdmInfo.PilotIndices, :, :),pilotEstimate, cfgEHT); + + demodDataSym = demodSym(ofdmInfo.DataIndices, :, :); + chanEstimateData = chanEstimate(ofdmInfo.DataIndices, :, :); + + [eqSym, csi] = wlanEHTEqualize(demodDataSym, chanEstimateData, nVarEst, cfgEHT, 'EHT-Data'); + + rxPSDU = wlanEHTDataBitRecover(eqSym, nVarEst, csi, cfgEHT); + + numPacketErrors = numPacketErrors + any(biterr(txPSDU, rxPSDU)); + end +end diff --git a/lab_5/task1.m b/lab_5/task1.m new file mode 100644 index 0000000..b19f1d9 --- /dev/null +++ b/lab_5/task1.m @@ -0,0 +1,45 @@ +satSim = create_satellite_sim(satConfig, groundStation); +% viewer = satelliteScenarioViewer(satSim.sc); + +sampleTimes = satConfig.startTime:seconds(satConfig.sampleTime):satConfig.stopTime; +distancesToSat = zeros(size(sampleTimes)); +elevationAnglesToSat = zeros(size(sampleTimes)); + +progressStartText = "Starting ..."; +f = waitbar(0, progressStartText, "Name", "Task 1"); + +progressTotal = numel(sampleTimes); +progressQueue = parallel.pool.DataQueue; + +parfor_waitbar(f, progressTotal, progressStartText, true); +progressListener = afterEach(progressQueue, @(info) parfor_waitbar(f, progressTotal, info, false)); + +parfor idx = 1:numel(sampleTimes) + res = perform_access_analysis(satSim, sampleTimes(idx)); + distancesToSat(idx) = res.distanceToSatellite; + elevationAnglesToSat(idx) = res.elevationAngleToSatellite; + send(progressQueue, sprintf("Index %d", idx)); +end + +delete(progressListener); +if ishandle(f) + close(f); +end + +figure; +plot(sampleTimes, distancesToSat); +grid on; +xlabel("Time [s]"); +ylabel("Distance to Satellite [m]"); +title("Distance over time plot of satellite pass"); + +figure; +plot(sampleTimes, elevationAnglesToSat); +grid on; +xlabel("Time [s]"); +ylabel("Elevation angle to satellite [degree]"); +title("Elevation angle over time plot of satellite pass"); + +accessAnalysisResults.times = sampleTimes; +accessAnalysisResults.distances = distancesToSat; +accessAnalysisResults.elevationAngles = elevationAnglesToSat; \ No newline at end of file diff --git a/lab_5/task2.m b/lab_5/task2.m new file mode 100644 index 0000000..eea3de7 --- /dev/null +++ b/lab_5/task2.m @@ -0,0 +1,64 @@ +profile = "C"; +bandwidth = 20; +include_free_space_pathloss = true; +delay_model = "None"; +carrier_frequency = 2.4e9; +mobile_speed = 0; +mobile_altitude = groundStation.Altitude; +satellite_altitude = satConfig.satAltitude; +random_stream = "mt19937ar with seed"; +seed = 666; +tx_antenna_count = 1; +rx_antenna_count = 1; +apep = 1000; +txPower = 20; +wifiSensitivity = -85; +reliableRxPower = -75; +amplifierGain = 30; + +[cfgEHT, simParameters, channel, chInfo, maxChDelay, satelliteDopplerShift, chanBW] = create_baseline_configuration(profile, bandwidth, include_free_space_pathloss, delay_model, carrier_frequency, mobile_speed, mobile_altitude, satellite_altitude, random_stream, seed, tx_antenna_count, rx_antenna_count, apep); +cfgEHT.User{1}.MCS = 3; +simParameters.TransmitPower = txPower; + +[~, numPacketsSimulated, ~, rxPower, pathLoss] = simulateTransmission(accessAnalysisResults, cfgEHT, channel, maxChDelay, [], inf, simParameters); + +packetIdx = 1:numPacketsSimulated; +packetTimes = accessAnalysisResults.times(packetIdx); +rxPower = rxPower(packetIdx); +pathLoss = pathLoss(packetIdx); + +figure; +plot(packetTimes, rxPower); +grid on; +xlabel("Time"); +ylabel("Power [dBm]"); +title("Receive power over time plot of satellite pass"); +yline(wifiSensitivity, "--", "receive sensitivity -85 dBm"); +yline(reliableRxPower, "--", "reliable reception -75 dBm"); + +lambda = physconst("lightspeed") / carrier_frequency; +maxPathLossDetectable = txPower - wifiSensitivity; +maxDistanceDetectable = lambda / (4 * pi) * 10^(maxPathLossDetectable / 20); + +maxPathLossReliable = txPower - reliableRxPower; +maxDistanceReliable = lambda / (4 * pi) * 10^(maxPathLossReliable / 20); + +requiredTxPower = reliableRxPower + pathLoss; + +figure; +plot(packetTimes, requiredTxPower); +grid on; +xlabel("Time"); +ylabel("Power [dBm]"); +title("Required transmit power for -75 dBm receive power"); + +amplifiedTxPower = txPower + amplifierGain; +requiredAntennaGain = max(requiredTxPower - amplifiedTxPower, 0); + +validRequiredTxPower = requiredTxPower(isfinite(requiredTxPower)); +validRequiredAntennaGain = requiredAntennaGain(isfinite(requiredAntennaGain)); + +fprintf("Maximum detectable distance at %.0f dBm TX power: %.2f km\n", txPower, maxDistanceDetectable / 1e3); +fprintf("Maximum reliable distance at %.0f dBm TX power: %.2f km\n", txPower, maxDistanceReliable / 1e3); +fprintf("Required TX power for -75 dBm reception: %.2f dBm to %.2f dBm\n", min(validRequiredTxPower), max(validRequiredTxPower)); +fprintf("Required antenna gain with %.0f dB amplifier: %.2f dB to %.2f dB\n", amplifierGain, min(validRequiredAntennaGain), max(validRequiredAntennaGain)); diff --git a/tasks/05-leo-pass.pdf b/tasks/05-leo-pass.pdf new file mode 100644 index 0000000000000000000000000000000000000000..75ddfd6d7a2fc263aeb32ad617f47547e0c005b4 GIT binary patch literal 179823 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 literal 0 HcmV?d00001