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

📄 framing.m

📁 程序里面包含各部分算法仿真 可供参考和使用
💻 M
字号:
function [transmit_signal, syn_preamble] = framing(input_signal,N_syn_preamble,PrefixRatio,N_subc,N_used,...
    Idx_used,N_Tx_ant,AddChFreq)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 加N_syn_preamble个OFDM符号的同步序列,其结构(三个OFDM符号)如下:
% 第1个OFDM符号在时域上重复Repeat次,第2个OFDM符号和第三个符号为相同的OFDM符号,所有子载波上均传数据

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

if ~AddChFreq
    
    
    % 为返回变量预先定义存储空间
    transmit_signal = zeros( 1,length(input_signal) + N_syn_preamble*N_subc*(1 + PrefixRatio),N_Tx_ant );
    syn_preamble = zeros( 1, N_syn_preamble*N_subc*(1 + PrefixRatio) , N_Tx_ant );
    % 产生伪随机序列,放在训练OFDM符号的导频位置.
    PN_seq = mseq(12, [1 3 5 9 ], [zeros(1,5) ones(1,7)], N_Tx_ant*N_syn_preamble);  % 参数先随意选取,可以调整
    PN_seq = 2*PN_seq - 1;
    % 同步前导的频域信号
    syn_preamble_freq = zeros(N_subc,N_syn_preamble,N_Tx_ant);
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % 1)产生1行,N_syn_preamble*N_subc*(1 + PrefixRatio)个样点的时域同步前导序列syn_preamble
    % 产生第1个训练OFDM符号
    Repeat = 2;
    for ant = 1:N_Tx_ant
        real_part = PN_seq( (ant-1)*2 + 1,1:N_used/Repeat ); % 截取PN序列
        imag_part = PN_seq( (ant-1)*2 + 2,1:N_used/Repeat );
        tran_tmp1 =  sqrt(Repeat/2) * ( real_part + j * imag_part );
        tmp1 = [ tran_tmp1 ; zeros( Repeat - 1 , N_used/Repeat ) ];
        tmp2 = reshape(tmp1, N_used, 1);
        tmp3 = [ tmp2(1:N_used/2) ; flipud(tmp2(N_used/2 + 1:end))];
        syn_preamble_freq(Idx_used,1,ant) = tmp3;
    end
    % 产生第2,3个训练符号
    for ant = 1:N_Tx_ant
        % 相同天线的第2,3个训练符号内容相同
        syn_preamble_freq(Idx_used,2,ant) = PN_seq( N_Tx_ant + ant ,1:N_used );
        syn_preamble_freq(Idx_used,3,ant) = PN_seq( N_Tx_ant + ant ,1:N_used );
    end    
    % 把同步训练序列变换到时域
    syn_frame = sqrt(N_subc) * ifft( fftshift( syn_preamble_freq , 1 ) );
    cp = syn_frame(N_subc - N_subc*PrefixRatio + 1:N_subc ,:,:);
    syn_preamble = [cp;syn_frame];
    syn_preamble = reshape(syn_preamble, [1,( N_subc + N_subc*PrefixRatio ) * N_syn_preamble ,N_Tx_ant] );
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % 2)和数据时隙合并,组成发送到信道上的基带信号序列
    transmit_signal = [ syn_preamble input_signal];
    
    
else
    transmit_signal = NaN;
    syn_preamble = NaN;
end

⌨️ 快捷键说明

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