这类序列具有类似随机噪声的一些统计特性,但和真正的随机信号不同,它可以重复产生和处理,故称作伪随机噪声序列。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
下面介绍一下其他牛人的见解:
CDMA系统中的PN码同步过程分为PN码捕获(精同步)和PN码跟踪(细同步)两部分。PN码捕获是精调本地PN码的频率和相位,使本地产生的PN码与接收到的PN码间定时误差小于1个码片间隔Tc,可采用基于滑动相关的串行捕获方案或基于时延估计问题的并行捕获方案。PN码跟踪则自动调整本地码相位,进一步缩小定时误差,使之小于码片间隔的几分之一,达到本地码与接收PN码频率和相位精确同步。典型的PN码跟踪环路分基于迟早门定时误差检测器的延迟锁定环及τ抖动环两种。
(1) 在每一个周期内,0元素与1元素出现的次数近似相等,最多只差一次。
(2) 在每一个周期内,长度为k比特的元素游程出现的次数比长度为k+1比特的元素游程出现的次数多一倍(连续出现的r个比特的同种元素叫做长度为r比特的元素游程)。
(3) 序列的自相关函数是一周期函数,且具有双值特性,当码元延时为N的整数倍时,自相关函数R=1,当不是N的整数倍时,R=-k/N。
(1) 伪随机信号必须具有尖锐的自相关函数,而互相关函数值应接近0值;
(2) 有足够长的码周期,以确保抗侦破与抗干扰的要求;
(3) 码的数量足够多,用来作为独立的地址,以实现码分多址的要求;
(4) 工程上易于产生、加工、复制与控制。
至于原信息和PN码相乘后 带宽变宽的问题:
另外 扩频系统的抗干扰性是很强的,可以有效的抵抗多径、多址、转发等干扰。具体怎么实现可以看看一些扩频的参考书,讲起来太麻烦了。
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)。