谁能告诉我这段matlab程序的详细意思,要求每一段都注释

clear all;
clc;
N_ofdm=2048;
f_delta=15e3;
N_block=1000;
N_subcarrier=1320;
N_CP=144;
Symbol_number=14;
conv_poly=[23,25];
K=5;
trel=poly2trellis(K,conv_poly);
tail=zeros(1,K-1);
mod_degree=4;
code_rate=0.5;
tb_len=50;
bit_length=mod_degree*code_rate*N_subcarrier*Symbol_number-K+1;
SNR_db=0:1:10;
SNR=10.^(SNR_db/10);
ber=zeros(1,length(SNR));
bler=zeros(1,length(SNR));
h1=modem.qammod('M',2^mod_degree,'InputType','Bit','SymbolOrder','Gray');
h2=modem.qamdemod(h1,'OutputType','Bit','DecisionType','Approximate LLR',...
'NoiseVariance',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
source=randsrc(1,bit_length,[0,1]);
code=convenc([source,tail],trel);
symbol=modulate(h1,code');
symbol=symbol/3.1622;
transmit_data=zeros(1,Symbol_number*(N_CP+N_ofdm));
for loop_symbol=1:Symbol_number
freq_domain=zeros(1,N_ofdm);
freq_domain((N_ofdm-N_subcarrier)/2+1:(N_ofdm-N_subcarrier)/2+N_subcarrier)=symbol((loop_symbol-1)*N_subcarrier+1:loop_symbol*N_subcarrier);
time_domain=ifft(freq_domain)*sqrt(N_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];
end
received_data=transmit_data+(randn(1,length(transmit_data))+j*randn(1,length(transmit_data)))*sigma;
for loop_symbol=1:Symbol_number
de_CP=received_data((loop_symbol-1)*(N_CP+N_ofdm)+N_CP+1:loop_symbol*(N_CP+N_ofdm));
fft_data=fft(de_CP)/sqrt(N_ofdm);
demapp_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);
end
h2.NoiseVariance=sigma*sigma*3.1622*3.1622;
data_demodulated=demodulate(h2,demapp_data*3.1622);
temp1=size(data_demodulated);
data_demodulated=reshape(data_demodulated,1,temp1(1)*temp1(2));
decision=vitdec(data_demodulated,trel,tb_len,'term','unquant');
decision=decision(1:length(source));
err=err+sum(decision~=source);
if(sum(decision~=source)~=0)
err_blk=err_blk+1;
end
if(err_blk>=10)
break;
end
end
ber(loop_snr)=err/(bit_length*loop_block);
bler(loop_snr)=err_blk/loop_block;
end

semilogy(SNR_db,ber,'-^',SNR_db,bler,'-o')
grid on
xlabel('SNR(dB)');
ylabel('BER&BLER');
legend('BER','BLER');

clear all;
clc;
N_ofdm=2048; %OFDM的点数为2048
f_delta=15e3; %子载波间隔为15k,此参数在代码中实际上没有使用
N_block=1000; %最大仿真量
N_subcarrier=1320; %可用子载波数
N_CP=144; %CP长度
Symbol_number=14; %每次传输的OFDM符号个数
conv_poly=[23,35]; %卷积码生成多项式
K=5; %卷积码约束长度
trel=poly2trellis(K,conv_poly); %产生卷积码格图
tail=zeros(1,K-1); %为了是卷积码编码器回零而添加的尾比特
mod_degree=4; %16QAM调制
code_rate=0.5; %码率
tb_len=50; %Viterbi译码器回溯长度
bit_length=mod_degree*code_rate*N_subcarrier*Symbol_number-K+1; %根据以上参数配置可以得到在一个数据块中所能承载的信息比特总数
SNR_db=0:1:10; %设置仿真的信噪比范围
SNR=10.^(SNR_db/10); %将信噪比转换为自然数值
ber=zeros(1,length(SNR)); %初始化误码率存储空间
bler=zeros(1,length(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
for loop_snr=1:length(SNR)
err=0;
err_blk=0;
sigma=sqrt(1/SNR(loop_snr)/2);
for loop_block=1:N_block %此处省略的代码为每个数据帧的处理过程,将在下面详细介绍
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]); %产生信源
code=convenc([source,tail],trel); %卷积编码,状态归零
symbol=modulate(h1,code'); %用调制对象h1调制code序列
symbol=symbol/3.1622; %子载波符号能量归一化
transmit_data=zeros(1,Symbol_number*(N_CP+N_ofdm)); %发送时域样本初始化
for loop_symbol=1:Symbol_number %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
end
received_data=transmit_data+(randn(1,length(transmit-data))+j*randn(1,length(transmit_data)))*sigma; %加噪声,得到接受信号
for loop_symbol=1:Symbol_number
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,能量归一化
demapp_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); %解映射
end
h2.NoiseVariance=sigma*sigma*3.1622*3.1622; %重新设置解调对象的噪声方差参数
data_demodulated=demdulate(h2,demapp_data*3.1622); %软解调,注意在解调前需要根据解调对象的要求将信号重新变回到原来的星座上
temp1=size(data_demodulated);
data_demodulated=reshape(data_demudulated,1,templ(1)*templ(2)); %将软解调输入的矩阵整理成一个行向量
decision=vitdex(data_demodulated,trel,tb_len,'term','unquant'); %去穷量化维特比译码
decision=decision(1:length(source)); %去尾比特
err=err+sum(decision~=source); %统计误码数
if(sum(decision~=source)~=0) %统计误码块数
err_blk+err_blk+1;
end
if(err_blk>=10) %错10个块停止该信噪比下的仿真
break;
end
end
semilogy(SNR_dB,ber,'-^')
grid on
xlabel('SNR(dB)');
ylable('BER');

参考资料:http://www.matlabsky.com/thread-15867-1-1.html

温馨提示:答案为网友推荐,仅供参考
相似回答