精华内容
下载资源
问答
  • 这个小的matlab代码将有助于了解如何生成PN序列
  • matlab—PN序列代码

    2019-05-06 17:18:53
    PN序列的代码。输入生成多项式可生成PN序列。测试可用
  • 伪随机码pn序列,m序列matlab仿真 实现任意阶m序列 只需改动本原多项式八进制表示,樊昌信书本上有
  • pn序列产生matlab程序

    热门讨论 2009-09-25 09:45:12
    利用产生多项式产生PN序列 PN序列PN序列
  • PN序列之我见

    2016-04-07 00:46:24
    进行理论分析,对比樊昌信 通原(第六版)的相关理论知识,对于PN序列的产生进行了深入细致的理论分析,便于初学者更好地掌握PN序列的产生原理。 2、simulink演示模块——PN_code_generatoe.mdl 一个简单的PN_code_...
  • 要使用这个函数,只需定义一个变量,比如 var, var = pnseq(a, b, c); 对于 a、b 和 c,请参阅 zip 文件
  • 针对估计序列影响信道估计精度并影响回波抵消效果的问题,从回波抵消基本原理出发,分析了PN序列作用信道估计的机理及其相关性对信道估计参数的影响,并与采用输入信号自身作估计序列的回波抵消方式进行了比较。...
  • PN序列自相关特性分析

    千次阅读 2018-11-28 16:04:02
    PN序列就是伪随机序列(Pseudo—Noise Code),所谓的伪就是说这个序列随机性很强,统计特性很好但并不是真正的随机数,体现PN序列具有周期性。PN序列是由通过线性反馈移位寄存器实现的,移位寄存器的级数决定了其...

    PN序列就是伪随机序列(Pseudo—Noise Code),所谓的伪就是说这个序列随机性很强,统计特性很好但并不是真正的随机数,体现PN序列具有周期性。PN序列是由通过线性反馈移位寄存器实现的,移位寄存器的级数决定了其周期性的长短。

    Matlab 代码:
    参考:https://wenku.baidu.com/view/e44cdf6227d3240c8447ef44.html
    https://ww2.mathworks.cn/help/comm/ref/commsrc.pn.html

    clear all; close all; clc;
    SampleTime=1/8;
    sim('pn');%调用了simulink生成的模块
    len=length(pn13);
    N=7;%周期
    N_sample=64;
    gt=ones(1,N_sample);%每个码元对应的载波,即脉冲成型
    
    pn1=pn13';
    pntemp1=sigexpand(pn1,N_sample);
    pnx1=conv(pntemp1,gt);
    
    
    pn2=pn15';
    pntemp2=sigexpand(pn2,N_sample);%码元扩展
    pnx2=conv(pntemp2,gt);%码元成型
    
    spn=conv(1-2*pn1,1-2*pn1(N:-1:1))/N;%自相关函数
    dpn=conv(1-2*pn1,1-2*pn2(N:-1:1))/N;%互相关函数
    
    
    t=0:1/N_sample:len-1/N_sample;
    figure(1);
    subplot(4,1,1)
    plot(t,pnx1(1:length(t)));
    axis([0 61 -0.5 1.5]);
    title('PN13波形');
    subplot(4,1,2);
    plot(t,pnx2(1:length(t)));
    axis([0 61 -0.5 1.5]);
    title('PN15波形');
    subplot(4,1,3);
    stem(1:61,spn(15:75));
    axis([0 61 -1.5 1.5]);
    title('PN13自相关波形');
    subplot(4,1,4);
    stem(1:61,dpn(15:75));
    axis([0 61 -1.5 1.5]);
    title('PN(N=3)互相关波形');
    

    simulink的使用:
    新建了一个simulink文件pn.mdl,从Library Browser添加PN序列发生器,示波器,以及导出数据的ToWorkspace。连线完成下图的连线。
    在这里插入图片描述

    关于PN序列发生器的配置:
    有三个地方需要注意:
    1序列的生成多项式
    2寄存器的初始值(位数表示寄存器的个数,同时决定了周期长度,比如下面:周期=2^3-1=7)
    3采样时间间隔(体现在示波器中能看到的序列长度)
    在这里插入图片描述

    To Workspace的配置:
    设置的变量名可以直接在代码中使用
    输出数据以二维数组的形式输出,也可以选其他格式
    在这里插入图片描述

    运行结果分析:
    在这里插入图片描述

    展开全文
  • OFDM系统中一种基于PN序列的频率同步算法及FPGA设计
  • 伪噪声序列(PN序列)可应用于扩频通信、信息加密、计算机仿真等领域。PN序列发生器需要一个随机信号源和一系列的离散、量化算法及其硬件实现技术。确定性的混沌可以复制,具有长期不可预测性,且很难区分一个信号是...
  • PN 序列生成用于各种目的,例如加扰、测试、调试等。
  • PN序列的产生以及相关函数的计算的mfile文件 这是数字通信课程的一道编程作业题,这里求相关函数采用的是循环,还有很大优化空间,要注意的是序列周期延拓各个下标的值怎么映射到原始序列,这其实就是一个求模的...
  • 1 理解并掌握PN序列产生器的原理及其在扩频通信中的应用; 2 实现PN序列产生器的仿真设计; 3 调试源文件,观察、分析并打印设计的波形。 4 完成本次设计,填写设计指导书。 设计参数为: 1. 伪随机序列的周期为L=31...
  • 我现在做到通过仿真信道提取出来PN序列和信号接下去要怎么做啊
  • PN序列的产生及其自相关特性仿真,用于信源信号的调制
  • 为双方用户生成 PN 序列,该 PN 序列将作为双方的密钥发送端和接收端。 4. 现在,再次将 PN 序列转换为 NRZ 格式。 5.信息信号1(用户1)通过PN码1的传播。 6. user1 消息信号的扩频是通过直接序列扩频完成的。 7....
  • 提出使用PN序列代替传统OFDM系统中的循环前缀作为训练序列,并且不同发射天线选择相互正交的PN序列,利用PN序列的自相关性和互相关性,采用时域相关的方法估计多信道.与传统采用频域导频的信道估计器相比,该方法...
  • 基于PN序列帧的同步分析及FPGA实现.pdf
  • h1 = commsrc.pn('GenPoly', [1 1 0 1 1 0 0 0 0 0 0 0 0 1],...%[13 12 10 9 0] ;生成多项式系数,降序排列,可以二进制或者十进制书写 'InitialStates',[0 0 0 0 0 0 0 0 0 0 0 0 1],... %初始寄存器状态,非全0,...
    • 通过一个例子说明(m序列具有良好的自相关性)
    h1 = commsrc.pn('GenPoly',     [1 1 0 1 1 0 0 0 0 0 0 0 0 1],...%[13 12 10 9 0] ;生成多项式系数,降序排列,可以二进制或者十进制书写
                   'InitialStates',[0 0 0 0 0 0 0 0 0 0 0 0 1],...  %初始寄存器状态,非全0,较上个次数少一位,数目等于阶数
                   'CurrentStates',[0 0 0 0 0 0 0 0 0 0 0 0 1],...  %当前寄存器状态
                   'shift',0,...                                    %初始序列偏移(延迟或者提前)
                   'NumBitsOut',5120);                              %generate方法输出个数(位)
    PN5120 = -generate(h1).*2+1;                                     %得到输出序列
    
    • 部分阶数对应生成多项式
    阶数生成多项式周期
    2[2 1 0]3
    3[3 2 0]7
    4[4 3 0]15
    5[5 3 0]31
    6[6 5 0]63
    7[7 6 0]127
    8[8 6 5 4 0]255
    9[9 5 0]511
    10[10 7 0]1023
    11[11 9 0]2047
    12[12 11 8 6 0]4095
    13[13 12 10 9 0]8191

    更多参见:commsrc.pn

    微信公众号:通信随笔XIDIAN

    在这里插入图片描述

    展开全文
  • PN序列分布的空子载波OFDM频偏估计算法研究
  • 基于FPGA的超混沌PN序列产生与性能分析.pdf
  • PN序列(Pseudo-noise Sequence)又称之为“伪噪声序列” 这类序列具有类似随机噪声的一些统计特性,但和真正的随机信号不同,它可以重复产生和处理,故称作伪随机噪声序列。PN序列有多种,其中最基本常用的一...
    PN序列(Pseudo-noise Sequence)又称之为“伪噪声序列”

     

    这类序列具有类似随机噪声的一些统计特性,但和真正的随机信号不同,它可以重复产生和处理,故称作伪随机噪声序列。PN序列有多种,其中最基本常用的一种是最长线形反馈移位寄存器序列,也称作m序列,通常由反馈移位寄存器产生。

    PN序列一般用于扩展信号频谱。下面就用verilog代码实现PN序列:

    module pn_generator(a,clk,pn,en,clr);
        input [3:0] a;
        //initial state of LFSR
        input clk; //1.023M
        input clr;
      
        input en;
        output pn;
        reg [3:0] register;

    // reg [0:8] count_60 = 0;

        assign pn=register[0];
       
        always @(posedge clk)
       
        begin
        if(clr)
        begin
        register <=a;
        end
       
        else if(en==1)
        begin     
           
            register[3:0]<={register[0]+register[3],register[3:1]};

    // else if(count_60 == 'd60)
           // begin
           // count_60 = 0;
           // $display("\n");
           // end
       
        end
       
    end


    endmodule

     

    用于测试的testbench代码:

     

    `timescale 1ns/1ns
    module pn_generator_test;
        //
        reg [3:0] a;
        reg clk;
        reg en;
        reg clr;
        //reg [0:3]pn_register;

        //outputs
        wire pn;
       
    // reg [3:0] pn_display;
       reg [3:0] count = 0;
       
        //instantiate the UUT
       
        pn_generator uut(
                 .a(a),
                 .clk(clk),
                 .pn(pn),
                 .en(en),
                 .clr(clr)
                 );
                
       //Initial Inputs
      
       initial begin
      
       a = 4'b1000;
       clk = 0;
       en = 0;
       clr = 0;
      
       #100 clr =1;

       #160 clr = 0;
      
       en = 1;
       end
      
    always #25 clk=~clk;

    always @(posedge clk)  
    begin
                  $display("%b",pn);     

    end

    endmodule

     

    下面介绍一下其他牛人的见解:

     

    1、PN码序列同步是扩频系统特有的,也是扩频技术中的难点。CDMA系统要求接收机的本地伪随机码与接收到的PN码在结构、频率和相位上完全一致,否则就不能正常接收所发送的信息,接收到的只是一片噪声。若实现了收发同步但不能保持同步,也无法准确可靠地获取所发送的信息数据。因此,PN码序列的同步是CDMA扩频通信的关键技术。

    CDMA系统中的PN码同步过程分为PN码捕获(精同步)和PN码跟踪(细同步)两部分。PN码捕获是精调本地PN码的频率和相位,使本地产生的PN码与接收到的PN码间定时误差小于1个码片间隔Tc,可采用基于滑动相关的串行捕获方案或基于时延估计问题的并行捕获方案。PN码跟踪则自动调整本地码相位,进一步缩小定时误差,使之小于码片间隔的几分之一,达到本地码与接收PN码频率和相位精确同步。典型的PN码跟踪环路分基于迟早门定时误差检测器的延迟锁定环及τ抖动环两种。
    接收信号经宽带滤波器后,在乘地器中与本地PN码进行相关运算。捕获器件调整压控时钟源,用以调整PN码发生器产生的本地PN码序列的频率和相位,捕获有用信号。一旦捕获到有用信号,启动跟踪器件,用以调整压控钟源,使本地PN码发生器与外来信号保持精确同步。如果由于某种原因引起失步,则重新开始新一轮捕获和跟踪。
     
    2、伪随机码(Pseudo Random Code)又称为伪噪声码(Pseudo Noise Code),简称PN码。简单地说,伪随机码是一种具有类似白噪声性质的码。白噪声是一种随机过程,它的瞬时值服从正态分布,功率谱在很宽的频带内都是均匀的。白噪声具有优良的相关特性,但至今无法实现对其进行放大、调制、检测、同步及控制等操作。在工程上与实践中,只能用类似于带限白噪声统计特性的伪随机码信号来逼近,并作为扩频通信系统的扩频码。
    大部分伪随机码都是周期码,可以人为地加以产生与复制,通常由二进制移位寄存器来产生。由于这种码具有类似白噪声的性质,相关函数具有尖锐的特性,功率谱占据很宽的频带,因此易于从其它信号或干扰中分离出来,具有优良的抗干扰特性。
    在工程上常用二元域{0,1}内的0元素与1元素的序列来表示伪随机码,它具有如下特点:

    (1)  在每一个周期内,0元素与1元素出现的次数近似相等,最多只差一次。
    (2)  在每一个周期内,长度为k比特的元素游程出现的次数比长度为k+1比特的元素游程出现的次数多一倍(连续出现的r个比特的同种元素叫做长度为r比特的元素游程)。
    (3)  序列的自相关函数是一周期函数,且具有双值特性,当码元延时为N的整数倍时,自相关函数R=1,当不是N的整数倍时,R=-k/N。
    作为扩频码的伪随机信号,应具有下列特点:

    (1)  伪随机信号必须具有尖锐的自相关函数,而互相关函数值应接近0值;
    (2)  有足够长的码周期,以确保抗侦破与抗干扰的要求;
    (3)  码的数量足够多,用来作为独立的地址,以实现码分多址的要求;
    (4)  工程上易于产生、加工、复制与控制。
    我们比较 常用的是m码 Gold码 和M码等一些PN码

    至于原信息和PN码相乘后 带宽变宽的问题:
    在扩频通信系统中,PN码的码速率Rc往往比信息码速率Rb大得多,从而PN码的带宽也比原信号的带宽大得多,时域相乘等效于频域卷积,由卷积的原理可以知道,两者相乘后的带宽为两者带宽相加,即Rc+Rb,因而带宽被展宽了。
    频谱卷积的图解示意图。

    另外 扩频系统的抗干扰性是很强的,可以有效的抵抗多径、多址、转发等干扰。具体怎么实现可以看看一些扩频的参考书,讲起来太麻烦了。
     
    3、PN序列,你已经知道基本内容了。它的主要作用用于模拟自然界中的噪声影响,噪声一般都是随机的没有规律。所以是无法仿真的,那怎么办呢?那就需要人为造一个。怎么造呢?经过科学实验人员的理论和实验分析得出了燥声具有的一些性质,比如自相关性等等。根据这些性质我们用类似的方法,主要是用寄存器、加法器等电路实现该序列。至于扩频,是以具有正交特性的PN序列与原始的二进制序列相乘,在频率上起到扩展信号频谱的作用。为什么要扩展呢? 因为扩展了以后其频率特性与噪声特性,不容易形成干扰与被窃取信息。至于加密,此时的PN序列其实是一个密钥,什么是密钥?就相当于你家的钥匙,你有这个家不错,不过没有钥匙是不能进的。当然密钥的随机性和其长度大小,专业上称为健壮性强与弱,往往能够决定加密的性能。比如DES算法的密钥有64位(其实是56位)。目前已经不安全了。当然现在的AES已经达到128位。这个和IPv4与IPv6地址的关系有点类似。具体可以参考相关扩频通信与数据安全相关书籍。

     

    4、PN生成器实际上就是由移位寄存器和反馈逻辑电路组成。反馈逻辑电路通常是XOR,即模2加法器。寄存器的个数决定了PN学列的长度,同时也决定了PN码的个数(number of combinations)。如该图中,寄存器的数量为m,那就可以生成2^m-1个PN码。为什么不是2的m次方个而是2的m次方减一个呢,这里要说一下初始化数据,initialize input。这个数据是用来触发整个电路的。也就是发个m位随机的010...0101。但是有一个数据不能发,那就是m个全0,因为用m个全0触发生成的尾随机序列永远是m个全0。而且在尾随机序列中也是永远不回出现m个全0的。

    PN序列有:0和1的个数相等;低相关性;自相关等性质,dragonkiss也有提到。

    PN序列的最典型应用就是在CDMA中,至少我最先是在CDMA中了解PN的。理解PN序列的扩频原理就需要简单了解一下CDMA的机制原理, code division multiplex access码分复用。传统的FDMA,是将一小段频宽分给每个移动用户,每个用户独占一段频宽,这样系统容量很有限,带宽利用率及其低下。CDMA是将不同的码分给不同用户,每个用户得到唯一的可识别的码,使得每个用户都可以共用一段频宽。这个码就是PN码,根据上面介绍的,寄存器的个数有m个,一个频宽上就可以存在2^m-1个用户(当然实际中CDMA系统远比我描述的复杂,还有上、下行,Walsh code等等问题),这样频带利用率非常高(very bandwidth efficient)。当然这凭空多处来的一段PN码是要靠更多一段频宽来传,这便是所谓的扩频。(虽然需要更多的频宽来传PN码,但是仍然很bandwidth efficient)。

    转载于:https://www.cnblogs.com/Jerome_Lee/archive/2009/11/19/1606115.html

    展开全文
  • pn9序列生成器

    2013-01-17 11:14:14
    用VHDL编写的pn9序列生成器 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity pn_9 is port(clk,rst:in std_logic; pnout:out std_logic ); end pn_9; architecture behavior...
  • 这个m文件生成了所有长度为31的m序列。为了生成长度为31的m序列,我们使用5次原始多项式。5次原始多项式有3个,所以会有3个不同的m序列长度 31。
  • 基于相位信息的DSSS/CDMA信号用户PN序列快速分离算法pdf,基于相位信息的DSSS/CDMA信号用户PN序列快速分离算法
  • 在时域上,引入两段相同的PN序列作导频,通过与接收端本地PN序列相关,捕获到粗同步位置实现帧同步;利用滑动窗和最小均方差方法实现符号同步;由接收到的时域PN序列进行相关,得到频偏的粗调整量,由累积保护间隔...
  • 文件包含m序列、gold序列、walsh序列matlab生成代码,及walsh相关性代码
  • PN序列的产生以及相关函数的计算

    千次阅读 2020-03-18 15:01:19
    PN 序列并极化(给定初始序列[1 0 0 0 0 0]),c(n)代表序列第 n 个值,c(0)代表 c(N) function cout=c(L,n) head=[[1 0 0 0 0 1],%[6,1] [1 1 0 0 1 1],%[6,5,2,1] [1 0 0 1 1 1]];%[6,5,4,1] head_L=logic...
    1. 求 PN 序列并极化(给定初始序列[1 0 0 0 0 0]),c(n)代表序列第 n 个值,c(0)代表 c(N)
    function cout=c(L,n)
        head=[[1 0 0 0 0 1],%[6,1]
              [1 1 0 0 1 1],%[6,5,2,1]
              [1 0 0 1 1 1]];%[6,5,4,1]
        head_L=logical(head(L,:));
        cc=[1 0 0 0 0 0];
        c_t=[];
        N=63;
        n=mod(n,N);
        if(n==0)
            n=n+N;
        end
        for i=1:n-1
           temp=cc(head_L);
           c_t(1)=mod(sum(temp),2);
           c_t(2:6)=cc(1:5);
           cc = c_t;
        end
        if(cc(6)>0)
            cout = 1;
        else
            cout = -1;
        end
    
    1. 求相关函数,Rc1(L1,L2)是指求 L1 抽头和 L2 抽头的互相关函数,L1=L2 则为自相关函数
      L1:[6,1]

      L2:[6,5,2,1]

      L3:[6,5,4,1]

    function [Tao,RC]=Rc1(L1,L2)
    Rc=[];
    Rc_T=0;
    tao=-50:50;
    for(i=-50:50)
        for t=-31:31
            Rc_T =Rc_T+c(L1,t)*c(L2,t-i);
        end
        Rc(i+51)=Rc_T/63;
        Rc_T=0;
    end
    Tao=tao;
    RC=Rc;
    plot(tao,Rc);
    
    1. 实际计算相关函数
    %%计算自相关函数
    %[6,1]
    [tao,Rc61]=Rc1(1,1);%Rc1是求相关函数,(1,1)则是[61]的自相关函数
    %[6,5,2,1]
    [tao,Rc6521]=Rc1(2,2);
    %%计算互相关函数
    [tao,cross1]=Rc1(1,2);%Rc1是求相关函数,(1,2)则是[6,1][6,5,2,1]的互相关函数
    [tao,cross2]=Rc1(2,3);
    figure(1);
    subplot(1,3,1);plot(tao,Rc61);title("[6,1]的自相关函数");xlabel("τ");ylabel("Rc(τ)");
    subplot(1,3,2);plot(tao,Rc6521);title("[6,5,2,1]的自相关函数");xlabel("τ");ylabel("Rc(τ)");
    subplot(1,3,3);plot(tao,cross1*63);axis([-60 60 -20 20]);title("[6,1]和[6,5,2,1]的互相关函数");xlabel("τ");ylabel("Rc(τ)");
    figure(2);
    plot(tao,cross2*63);axis([-60 60 -20 20]);title("[6,5,4,1]和[6,5,2,1]的互相关函数");xlabel("τ");ylabel("Rc(τ)");
    display(max(abs(cross1)*63));
    display(max(abs(cross2)*63));
    

    输出结果:
    figure1
    figure2
    这是数字通信课程的一道编程作业题,这里求相关函数采用的是循环,还有很大优化空间,要注意的是序列周期延拓各个下标的值怎么映射到原始序列,这其实就是一个求模的过程,这里互相关函数figure2最大值为15,figure1最大值为17,figure2中两个抽头产生的PN序列可用来产生gold序列,他们的互相关函数不会超过
    2 ( n + 1 ) / 2 + 1   ( n 为 奇 数 ) 2^{(n+1)/2}+1\,(n为奇数) 2(n+1)/2+1n
    2 ( n + 2 ) / 2 + 1   ( n 为 偶 数 ) 2^{(n+2)/2}+1\,(n为偶数) 2(n+2)/2+1n

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,524
精华内容 4,609
关键字:

pn序列是什么