美文网首页
PN序列生成代码快速参考

PN序列生成代码快速参考

作者: monokent | 来源:发表于2015-12-15 21:59 被阅读0次

    PN序列生成器的基本结构为LFSR(linear feedback shift register),在通信领域PN序列可作为测试数据源或者扰码生成器使用。基本信息和结构可参考 Matlab中的PN序列产生模块说明

    pn_sequence_setupex.png

    上图中,按照Matlab定义,对应的生成多项式为z^6+z+1,即[6 1 0],或者[1 0 0 0 0 1 1]

    参考生成代码

    [17 3 0]生成matlab代码(标准参考为[17 14 0])

    %% serial for PN17 [17,3,0]
    pn = ones(1,17);
    N = 2^17-1;
    M = 2*N;
    for i=1:M
        outpn(1,i) = pn(17);
        pn17 = pn(17);
        pn14 = pn(14);
        pn(17:-1:2) = pn(16:-1:1);
        pn(1) = xor(pn17, pn14);
    end
    

    上面生成的PN17周期应为2^17-1

    % verify the period of PN seq 
    equRcrd = 1;
    for k = 1:N
        if outpn(k) ~= outpn(k+N) 
            equRcrd = 0;
        end
    end
    equRcrd
    

    遍历性(部分的,全遍历时间太长)

    % Traversal
    % only for 1:100, due to the long running time
    % you can change the traversal range 
    ofst = 1000;
    for i=(1+ofst):(10+ofst) %N-17
        cnt(i)=0;
        for k=(i+1):N-16
            if outpn(i:i+16) == outpn(k:k+16)
                cnt(i) = cnt(i)+1;
            end
        end
    end
    max(cnt)
    

    并行8路[17 3 0] (输出为小端 little endian)

    pn_p8 = ones(1,17);
    N_p8 = 2^17/8;
    for i=1:N_p8
        outpn_p8(:,i) = pn_p8(17:-1:10);
        pn_p8_copy = pn_p8;
        pn_p8(17:-1:9) = pn_p8(9:-1:1);
        pn_p8(8:-1:1) = xor(pn_p8_copy(17:-1:10),pn_p8_copy(14:-1:7));
    end
    

    VHDL代码, 并行8路 (输出为小端 little endian)

    d_output(7) <= pn17_pd(10); 
    d_output(6) <= pn17_pd(11);
    d_output(5) <= pn17_pd(12);
    d_output(4) <= pn17_pd(13);
    d_output(3) <= pn17_pd(14);
    d_output(2) <= pn17_pd(15);
    d_output(1) <= pn17_pd(16);
    d_output(0) <= pn17_pd(17);
    
    pn17_pd(17 downto 9) <= pn17_pd(9 downto 1);
    pn17_pd(8 downto 1)  <= pn17_pd(17 downto 10) xor pn17_pd(14 downto 7);
    

    对于上述8路并行代码,采用此种简洁形式的前提是满足17-3-8 >= 0,否则生成代码会复杂

    相关文章

      网友评论

          本文标题:PN序列生成代码快速参考

          本文链接:https://www.haomeiwen.com/subject/mywuhttx.html