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

📄 ofdm.m

📁 汪裕民的OFDM关键技术与应用中仿真MIMO-OFDM的源代码
💻 M
字号:
% function[TotEbNo,Errors] = OFDM(Mt,Mr);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%   输入:
%       Mt      发送天线数
%       Mr      接收天线数
%   输出:
%       TotEbNo 信噪比
%       Errors  平均误比特率
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear all
clc

Mt = 2;
Mr = 2;
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;                        % 保护间隔
sig2 = 1e-3;                    % 噪声
M = 8;                          % 最大的星座比特数
Mgap = 10.^(1:(1.7/10):2.7);    % 间隔
Btot = 100*Mt;                  % 每个OFDM符号总的比特率
TransmitIter = 50;              % 每个信道传输符号迭代次数
ChannelIter = 100;              % 随机信道迭代
GapIter =  length(Mgap);

TotEbNo = [];
Errors = [];
EbNo = [];
for lGap = 1:GapIter
    lGap
    gap = Mgap(lGap);
    totalErrors = 0;
    for lChan = 1:ChannelIter
        lChan
        % 创建信道
        [H h_f] = creat_channel(Mt,Mr,A,N+GI);
        % 在频域中分解每个子信道
        [U S V] = svd_decompose_channel(Mt,Mr,h_f,N);
        % 比特分配
        [bits_alloc energy_alloc] = BitLoad(S,Btot,Mt*N,gap,sig2,M);
        % 能量分配
        for lTrans = 1:TransmitIter
            % 传输的比特
            x = (randn(1,Btot)>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 = [];
            for i = 1:Mt
                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));
            % fft
            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);
            % 接收信号成形
            shaped_vals = shape(rec_symbol2,Mr,U,N);
            % 解调
            y_demod = demodulate(shaped_vals,bits_alloc,energy_alloc,S,s2,s4,s16,c2,c4,c16);%s64,s256,c2,c4,c16,c64,c256);
            % 比较
            totalErrors = totalErrors + sum(xor(y_demod,x));
            totalErrors
        end
        EbNo = [EbNo sum(energy_alloc)/Btot/sig2];
    end
    Errors = [Errors totalErrors/Btot/ChannelIter/TransmitIter];
    TotEbNo = [TotEbNo mean(EbNo)];
    EbNo = [];
end

⌨️ 快捷键说明

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