ofdm qpsk matlab,QPSK and OFDM with MATLAB System Objects

QPSK and OFDM with MATLAB System Objects

This example shows how to simulate a basic communication system in which the signal is first QPSK modulated and then subjected to Orthogonal Frequency Division Multiplexing. The signal is then passed through an additive white Gaussian noise channel prior to being demultiplexed and demodulated. Lastly, the number of bit errors are calculated. The example showcases the use of MATLAB® System objects™.

Set the simulation parameters.

M = 4; % Modulation alphabet

k = log2(M); % Bits/symbol

numSC = 128; % Number of OFDM subcarriers

cpLen = 32; % OFDM cyclic prefix length

maxBitErrors = 100; % Maximum number of bit errors

maxNumBits = 1e7; % Maximum number of bits transmitted

Construct System objects needed for the simulation: QPSK modulator, QPSK demodulator, OFDM modulator, OFDM demodulator, AWGN channel, and an error rate calculator. Use name-value pairs to set the object properties.

Set the QPSK modulator and demodulator so that they accept binary inputs.

qpskMod = comm.QPSKModulator('BitInput',true);

qpskDemod = comm.QPSKDemodulator('BitOutput',true);

Set the OFDM modulator and demodulator pair according to the simulation parameters.

ofdmMod = comm.OFDMModulator('FFTLength',numSC,'CyclicPrefixLength',cpLen);

ofdmDemod = comm.OFDMDemodulator('FFTLength',numSC,'CyclicPrefixLength',cpLen);

Set the NoiseMethod property of the AWGN channel object to Variance and define the VarianceSource property so that the noise power can be set from an input port.

channel = comm.AWGNChannel('NoiseMethod','Variance', ...

'VarianceSource','Input port');

Set the ResetInputPort property to true to enable the error rate calculator to be reset during the simulation.

errorRate = comm.ErrorRate('ResetInputPort',true);

Use the info function of the ofdmMod object to determine the input and output dimensions of the OFDM modulator.

ofdmDims = info(ofdmMod)

ofdmDims = struct with fields:

DataInputSize: [117 1]

OutputSize: [160 1]

Determine the number of data subcarriers from the ofdmDims structure variable.

numDC = ofdmDims.DataInputSize(1)

numDC = 117

Determine the OFDM frame size (in bits) from the number of data subcarriers and the number of bits per symbol.

frameSize = [k*numDC 1];

Set the SNR vector based on the desired Eb/No range, the number of bits per symbol, and the ratio of the number of data subcarriers to the total number of subcarriers.

EbNoVec = (0:10)';

snrVec = EbNoVec + 10*log10(k) + 10*log10(numDC/numSC);

Initialize the BER and error statistics arrays.

berVec = zeros(length(EbNoVec),3);

errorStats = zeros(1,3);

Simulate the communication link over the range of Eb/No values. For each Eb/No value, the simulation runs until either maxBitErrors are recorded or the total number of transmitted bits exceeds maxNumBits.

for m = 1:length(EbNoVec)

snr = snrVec(m);

while errorStats(2) <= maxBitErrors && errorStats(3) <= maxNumBits

dataIn = randi([0,1],frameSize); % Generate binary data

qpskTx = qpskMod(dataIn); % Apply QPSK modulation

txSig = ofdmMod(qpskTx); % Apply OFDM modulation

powerDB = 10*log10(var(txSig)); % Calculate Tx signal power

noiseVar = 10.^(0.1*(powerDB-snr)); % Calculate the noise variance

rxSig = channel(txSig,noiseVar); % Pass the signal through a noisy channel

qpskRx = ofdmDemod(rxSig); % Apply OFDM demodulation

dataOut = qpskDemod(qpskRx); % Apply QPSK demodulation

errorStats = errorRate(dataIn,dataOut,0); % Collect error statistics

end

berVec(m,:) = errorStats; % Save BER data

errorStats = errorRate(dataIn,dataOut,1); % Reset the error rate calculator

end

Use the berawgn function to determine the theoretical BER for a QPSK system.

berTheory = berawgn(EbNoVec,'psk',M,'nondiff');

Plot the theoretical and simulated data on the same graph to compare results.

figure

semilogy(EbNoVec,berVec(:,1),'*')

hold on

semilogy(EbNoVec,berTheory)

legend('Simulation','Theory','Location','Best')

xlabel('Eb/No (dB)')

ylabel('Bit Error Rate')

grid on

hold off

6098fb7d827714933f845b44c623b9df.png

Observe that there is good agreement between the simulated and theoretical data.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值