谁能告诉我这个matlab程序的详细意思,要求每一段都要注释?
clc
N _ ofdm = 2048%OFDM的点数是2048。
f _ delta = 15 E3;%子载波间隔是15k,在码中实际上没有使用。
n _ block = 1000;%最大模拟量
n _ subcarrier = 1320;可用子载波的数量百分比
n _ CP = 144;%CP长度
symbol _ number = 14;每次传输的OFDM符号数百分比
conv _波利=;%卷积码生成多项式
k = 5;%卷积码约束长度
trel=poly2trellis(K,conv _ poly);%生成卷积码网格图
tail = 0(1,K-1);添加%尾比特以使卷积码编码器归零
mod _ degree = 4;%16QAM调制
code _ rate = 0.5%码率
tb _ len = 50%维特比解码器的回溯长度
bit _ length = mod _ degree * code _ rate * N _ subcarrier * Symbol _ number-K+1;%根据上述参数配置,可以得到一个数据块可以承载的信息比特总数。
SNR _ db = 0:1:10;%设置模拟信噪比范围。
信噪比=10。^(snr_db/10);%将信噪比转换为自然值。
ber =零(1,长度(SNR));%初始化错误率存储空间
bler =零(1,长度(SNR));%初始化错误率存储空间
h1=modem.qammod('m',2^mod_degree,'inputtype','bit','symoblorder','gray');%生成QAM调制对象,输入类型为比特输入,符号顺序为格雷映射。
h2=modem.qamdemod(h1,' OutputType ',' bit ',' DecisionType ',' approximatellr ',...NoiseVariance ',1);%产生QAM解调对象,并选择软判决解调形式。因为此时的噪声方差位置,暂时设为1。
对于loop_snr=1:长度(snr)
err = 0;
err _ blk = 0;
sigma = sqrt(1/SNR(loop _ SNR)/2);
对于loop_block=1:N_block%这里省略的代码是每个数据帧的处理过程,下面将详细描述。
结束
ber(loop _ SNR)= err/(bit _ length * loop _ block);
bler(loop _ SNR)= err _ blk/loop _ block;
结束
for循环块=1:N块
source=randsrc(1,bit_length,[0,1]);%生成的源
code=convenc([source,tail],trel);%卷积编码,状态归零
symbol=modulate(h1,code’);%代码序列用调制对象h1进行调制。
符号=符号/3.1622;%子载波符号能量的归一化
transmit _ data =零(1,Symbol _ number *(N _ CP+N _ OFDM));%发送时域样本初始化
for loop _ symbol = 1:symbol _ % OFDM符号周期,每个周期生成一个OFDM符号的所有时域样本。
freq_domain=zeros(1,N _ OFDM);%频域数据初始化
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);%子载波映射,映射在中间的N_subcarrier子载波上。
time _ domain = IFFT(freq _ domain)* sqrt(N _ OFDM);%IFFT是实现OFDM调制,并且注重能量归一化。
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];%加CP
结束
received _ data = transmit _ data+(randn(1,长度(transmit-data))+j * randn(1,长度(transmit _ data)))* sigma;%加噪声,得到可接受的信号。
for循环符号=1:符号编号
de _ CP = received _ data((loop _ symbol-1)*(N _ CP+N _ OFDM)+N _ CP+1:loop _ symbol *(N _ CP+N _ OFDM));%删除CP
FFT _ data = FFT(de _ CP)/sqrt(N _ OFDM);%FFT,能量归一化
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);%解映射
结束
h2。noise variance = sigma * sigma * 3.1622 * 3.1622;%重置解调对象的噪声方差参数。
data _解调=解调制(h2,de mapp _ data * 3.1622);%软解调,注意解调前需要根据解调对象的要求把信号变回原来的星座。
temp 1 = size(data _解调);
data _解调=reshape(data_demudulated,1,templ(1)* templ(2));%将软解调输入的矩阵排列成行向量。
decision = vit dex(data _解调,trel,tb_len,' term ',' un quant ');具有%去量化量化的维特比解码
决策=决策(1:长度(来源));%删节位
err=err+sum(决策~ =来源);%统计错误数
If(sum(decision~=source)~=0)%统计错误块数。
err _ blk+err _ blk+1;
结束
if(err _ blk & gt;=10)%错误10块停止该信噪比下的仿真。
打破;
结束
结束
semilogy(SNR_dB,ber,'-^')
网格打开
xlabel(' SNR(dB)');
ylable(' BER ');