⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ofdm.m

📁 ofdm仿真器
💻 M
字号:
function[TotEbNo,Errors]=OFDM(Mt,Mr);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%function[TotEbNo,Errors]=OFDM(Mt,Mr);
%
%输入:
%    Mt    ----发射天线数
%    Mr    ----接收天线数
%输出:
%TotEbNo   ----信噪比
%Errors    ----平均误比特率
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
load ENC2.mat
load ENC4.mat
load ENC16.mat
load ENC64.mat
load ENC256.mat

A=[1 1/exp(1) 1/exp(2)];     %功率时延谱
N=64;                        %OFDM子载波数
GI=16;Q                      %保护间隔
sig2=1e-3;                   %噪声
M=8;                         %最大的星座比特数
Mgap=10.^(1:(1.7/10):2.7);    %间隔
Btot=100*Mt;                 %每个ofdm符号总的比特数
TransimitIter=50;             %每个信道传输符号迭代次数
ChannelIter=50;           %随机信道迭代
CapIter=length(Mgap);

TotEbNo=[];
Errors=[];
EbNo=[];
for lGap=1:GapIter
    gap=Mgap(lGap);
    totalErrors=0;
         for lChan=1:ChannelIter
             %创建信道
             [H h_f]=create_channel(Mr,Mt,A,N+GI);
             %在频域中分解每个子信道
             [USV]=svd_decompose_channel(Mt,Mr,h_f,N);
             %比特分配
             [bits_alloc,energy_alloc]=BitLoad(S,Btot,Mt*N,gap,gig2,M);
             %能量分配
             for lTrans=1:TransmitIter
                 %传输的比特
                 x=(randn(1,Blot)>0);
                 %调制
                 x_mod=modu(x,bits_alloc,energy_alloc,s2,s4,s16,s64,s256);
                 %调制信号预编码
                 x_pre=precode(Mt,x_mod,V,N);
                 %ifft,含循环前缀
                 ofdm_symbol=[ofdm_symbol;ifft_cp_tx_blk(x_pre(i:Mt:Mt*(N-1)+i),N,GI)];
             end
             ofdm_symbol2=reshape(ofdm_symbol,Mt*(N+GI),1);
             %信道
             y=transpose(channel(sig2,Mt,Mr,ofdm_symbol2,H,N+GI));
             %ifft
             rec_symbol=[];
             for i=1:Mt
                 rec_symbol=[rec_symbol;fft_cp_rx_blk(y(i:Mt:Mt*(N+GI-1)+i),N,GI)];
             end
             rec_symbol2=reshape(rec_symbol,1,Mt*N);
             %接收信号成形
             shoped_vals=shape(rec_symbol2,Mr,U,N);
             %解调
             y_demod=demodulate(shaped_vals,bits_alloc,energy_alloc,S,s2,s4,s16,s64,s256,c2,c4,c16,c64,c256);
             %比较
             totalErrors=totalError+sum(xor(y_demod,x));
         end
         EbNo=[EbNo sum(energy_alloc)/Btot/sig2];
end
Errors=[Errors totalErrors/Btot/channelIter/TransmiIter];
TotEbNo=[TotEbNo mean(EbNo)];
EbNo=[];
End
                 
                 
                 
                 
                 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -