www.gusucode.com > wlan 源码程序 matlab案例代码 > wlan/EstimateCoarseCFOForVHTWaveformCorrelationOffsetExample.m
%% Estimate and Correct CFO for VHT Waveform with Correlation Offset % Estimate the frequency offset for a VHT signal passing through a noisy, % TGac channel. Correct for the frequency offset. %% % Create a VHT configuration object and create the L-STF. vht = wlanVHTConfig; txstf = wlanLSTF(vht); %% % Set the channel bandwidth and sample rate. cbw = 'CBW80'; fs = 80e6; %% % Create TGac and thermal noise channel objects. Set the delay profile of % the TGac channel to |'Model-C'|. Set the noise figure of the thermal % noise channel to 9 dB. tgacChan = wlanTGacChannel('SampleRate',fs,'ChannelBandwidth',cbw, ... 'DelayProfile','Model-C','LargeScaleFadingEffect','Pathloss'); noise = comm.ThermalNoise('SampleRate',fs,'NoiseMethod','Noise figure', ... 'NoiseFigure',9); %% % Pass the L-STF through the noisy TGac channel. rxstfNoNoise = tgacChan(txstf); rxstf = noise(rxstfNoNoise); %% % Create a phase and frequency offset object and introduce a 750 Hz % frequency offset. pfOffset = comm.PhaseFrequencyOffset('SampleRate',fs, ... 'FrequencyOffsetSource','Input port'); rxstf = pfOffset(rxstf,750); %% % For the model-C delay profile, the RMS delay spread is 30 ns, which is % 3/8 of the 80 ns short training symbol duration. As such, set the % correlation offset to 0.375. corrOffset = 0.375; %% % Estimate the frequency offset. Your results may differ slightly. fOffsetEst = wlanCoarseCFOEstimate(rxstf,cbw,corrOffset) %% % The estimate is very close to the introduced CFO of 750 Hz. %% % Change the delay profile to |'Model-E'|, which has an RMS delay spread of % 100 ns. release(tgacChan) tgacChan.DelayProfile = 'Model-E'; %% % Pass the transmitted signal through the modified channel and apply the % 750 Hz CFO. rxstfNoNoise = tgacChan(txstf); rxstf = noise(rxstfNoNoise); rxstf = pfOffset(rxstf,750); %% % Estimate the frequency offset. fOffsetEst = wlanCoarseCFOEstimate(rxstf,cbw,corrOffset) %% % The estimate is inaccurate because the RMS delay spread is greater than % the duration of the training symbol. %% % Set the correlation offset to the maximum value of 1 and estimate the % CFO. corrOffset = 1; fOffsetEst = wlanCoarseCFOEstimate(rxstf,cbw,corrOffset) %% % The estimate is accurate because the autocorrelation does not use the % first training symbol. The channel delay renders this symbol useless. %% % Correct for the estimated frequency offset. rxstfCorrected = pfOffset(rxstf,-fOffsetEst); %% % Estimate the frequency offset of the corrected signal. fOffsetEstCorr = wlanCoarseCFOEstimate(rxstfCorrected,cbw,corrOffset) %% % The corrected signal has negligible frequency offset.