Who can tell me the detailed meaning of this matlab program, requiring each paragraph to be annotated?

Clear all;

clc

N _ OFDM = 2048% The number of OFDM points is 2048.

f _ delta = 15 E3; % subcarrier spacing is 15k, which is not actually used in the code.

n _ block = 1000; % maximum analog quantity

n _ subcarrier = 1320; Percentage of number of available subcarriers

n _ CP = 144; %CP length

symbol _ number = 14; Percentage of OFDM symbols per transmission

Conv _ Polly =; % convolutional code generating polynomial

k = 5; % convolutional code constraint length

trel=poly2trellis(K,conv _ poly); % generate convolutional code trellis diagram

tail = 0( 1,K- 1); Add% tail bits to zero convolutional code encoder.

mod _ degree = 4; % 16QAM modulation

Code _ rate = 0.5% code rate

Tb _ len = traceback length of 50% Viterbi decoder.

bit _ length = mod _ degree * code _ rate * N _ subcarrier * Symbol _ number-K+ 1; % According to the above parameter configuration, the total number of information bits that can be carried by a data block can be obtained.

SNR _ db = 0: 1: 10; % Set the analog signal-to-noise ratio range.

Signal to noise ratio = 10. ^(snr_db/ 10); % converts the signal-to-noise ratio to a natural value.

Ber = zero (1, length (SNR));); % initialization error rate storage space

Bler = zero (1, length (SNR));); % initialization error rate storage space

h 1=modem.qammod('m',2^mod_degree,'inputtype','bit','symoblorder','gray'); % generates QAM modulation object, the input type is bit input, and the symbol order is gray mapping.

h2=modem.qamdemod(h 1,' OutputType ',' bit ',' DecisionType ',' approximatellr ',...NoiseVariance ', 1); % generates QAM demodulation object, and selects soft decision demodulation form. Because of the noise variance position at this time, it is temporarily set to 1.

For loop_snr= 1: length (snr)

err = 0;

err _ blk = 0;

sigma = sqrt( 1/SNR(loop _ SNR)/2);

For loop_block= 1:N_block%, the code omitted here is the processing procedure of each data frame, which will be described in detail below.

end

ber(loop _ SNR)= err/(bit _ length * loop _ block);

bler(loop _ SNR)= err _ blk/loop _ block;

end

For loop block = 1:N block

source=randsrc( 1,bit_length,[0, 1]); % generated source

code=convenc([source,tail],trel); % convolutional coding, state return to zero

symbol=modulate(h 1,code’); % code sequence is modulated with modulation object h 1

Symbol = symbol/3.1622; Normalization of% subcarrier symbol energy

Transmit _ data = zero (1, symbol _ number * (n _ CP+n _ OFDM)); % send time domain sample initialization

Forloop _ symbol =1:symbol _% OFDM symbol period, and all time-domain samples of an OFDM symbol are generated in each period.

freq_domain=zeros( 1,N _ OFDM); % frequency domain data initialization

freq _ domain((N _ OFDM-N _ subcarrier)/2+ 1:(N _ OFDM-Nsubcarrier)/2+N _ subcarrier)= symbol((loop _ symbol- 1)* N _ subcarrier+ 1:loop _ symbol * N _ subcarrier); % subcarrier mapping, which is mapped on the middle N_subcarrier.

time _ domain = IFFT(freq _ domain)* sqrt(N _ OFDM); %IFFT realizes OFDM modulation and pays attention to energy normalization.

transmit _ data((loop _ symbol- 1)*(N _ CP+N _ OFDM)+ 1:loop _ symbol *(N _ CP+N _ OFDM))=[time _ domain(N _ OFDM-N _ CP+ 1:N _ OFDM),time _ domain]; % plus CP

end

Received _ data = transmit _ data+(randn (1,length (transmit-data))+j * randn (1,length (transmit _ data)))* sigma;; % plus noise to get an acceptable signal.

For cyclic symbol = 1: symbol number

de _ CP = received _ data((loop _ symbol- 1)*(N _ CP+N _ OFDM)+N _ CP+ 1:loop _ symbol *(N _ CP+N _ OFDM)); % delete CP

FFT _ data = FFT(de _ CP)/sqrt(N _ OFDM); %FFT, energy normalization

de mapp _ data((loop _ symbol- 1)* N _ subcarrier+ 1:loop _ symbol * N _ subcarrier)= FFT _ data((N _ OFDM-N _ subcarrier)/2+ 1:(N _ OFDM-N _ subcarrier)/2+N _ subcarrier); % demapping

end

h2。 noise variance = sigma * sigma * 3. 1622 * 3. 1622; % Resets the noise variance parameter of the demodulation object.

Data _ demodulation = demodulation (h2, demapp _ data * 3.1622); % soft demodulation, pay attention to the need to change the signal back to the original constellation according to the requirements of the demodulation object before demodulation.

Temp 1 = size(data _ demodulation);

Data _ demodulation = reshape (data _ demodulated, 1, templ (1) * templ (2)); % Arranges the matrix of soft demodulation input into a row vector.

Decision = vit dex(data _ demodulation, trel, tb_len,' $ term',' unquant'); Viterbi decoding with% dequantization quantization

Decision = Decision (1: length (source)); % truncated position

Err=err+sum (decision ~ = source); % Statistical error number

If(sum(decision~=source)~=0)% counts the number of error blocks.

err _ blk+err _ blk+ 1;

end

if(err _ blk & gt; = 10)% error 10 block stops the simulation under this SNR.

Break;

end

end

semilogy(SNR_dB,ber,'-^')

Grid open

xlabel(' SNR(dB)');

ylable(' BER ');