m序列生成方法及其fpga实现
一、什么是PN碼?PN碼有什么用處?
1、 什么是PN碼
PN碼的英文名字叫Pseudo-Noise Code,(pseudo:adj.偽; 假的),直譯過(guò)來(lái)就是偽噪聲碼,這里噪聲主要是想表達(dá)隨機(jī)的意思。其中最重要的一種PN序列叫m序列(全稱叫最長(zhǎng)線性反饋移位寄存器序列),說(shuō)它重要主要是研究得早,理論成熟,用得多。
其本質(zhì)上就是一串周期性的隨機(jī)數(shù),周期是由移位寄存器的位數(shù)決定的,序列是由生成多項(xiàng)式(有的地方叫本原多項(xiàng)式、反饋系數(shù))決定的。這意味著,對(duì)于掌握了長(zhǎng)度和生成多項(xiàng)式的人來(lái)說(shuō),這段序列就是確知的,對(duì)于不知道長(zhǎng)度和生成多項(xiàng)式的人來(lái)說(shuō),就是隨機(jī)的,不可捉摸的(或者說(shuō)解密代價(jià)極大的)。
2、PN碼有什么用處
PN碼一般用在擴(kuò)頻通信里面,另外有擾碼、測(cè)量延時(shí)和距離、測(cè)量誤碼率、數(shù)據(jù)加密等用途。
二、如何生成m序列?m序列有什么性質(zhì)?生成多項(xiàng)式怎么設(shè)置?
1、如何生成PN碼
2、m序列的性質(zhì):
- 均衡性:0、1各占一半,1比0多一個(gè);
- 游程特性:就是說(shuō)連0段或連1段的,長(zhǎng)度為1的約占1/2,長(zhǎng)度為2的約占1/4,長(zhǎng)度為3的約占1/8,按照三位m序列想一下就能想明白;
- 移位相加性:自己+下一個(gè)時(shí)鐘的自己,等于另外一個(gè)移位序列;
- 相關(guān)函數(shù):R(τ)={1,if?τ=0?1/L,if?τ=1R(\tau) =\begin{cases} 1, & \text{if } \tau = 0 \\-1/L, & \text{if }\tau = 1\end{cases}R(τ)={1,?1/L,?if?τ=0if?τ=1?。
3、生成多項(xiàng)式怎么設(shè)置?
這項(xiàng)工作交給搞理論研究的數(shù)學(xué)家就行了,不按這個(gè)來(lái)的話m序列的性質(zhì)就會(huì)出問(wèn)題,如果想深究這種東西話,可以看下這篇博客:m序列產(chǎn)生原理的是什么?m序列的產(chǎn)生與本原多項(xiàng)式
4、常見(jiàn)m序列表格的使用方法
需要注意的就是LSB(最低有效位)對(duì)應(yīng)的是C0(模二加后的反饋輸入)
四、如何用FPGA來(lái)實(shí)現(xiàn)?
話不多說(shuō),直接上代碼:
module PN_1023_gen_1 (sysclk,reset,pnclk, pnxs1_allone,pnxs1_code, pnclkpos);input sysclk,reset,pnclk;//系統(tǒng)鐘,高電平復(fù)位,碼鐘output pnxs1_allone,pnxs1_code; //allone是周期重復(fù)指示(因?yàn)檫@里初相是1023嘛),后面一個(gè)是輸出的m碼序列,reg pnxs1_allone,pnxs1_code;output pnclkpos;//相當(dāng)于一個(gè)使能信號(hào),也可用來(lái)做stp的觸發(fā)信號(hào)wire pnclkpos;reg [9:0] gxs1regshift; wire polyvalgxs1;reg [9:0] gxs1_counter;reg [1:0] tempa,tempb;parameter gxs1_poly = 407; parameter gxs1_ip = 1023;parameter jdxs_cnt = 1023;/*-------------------------------------code clk gen---------------------------*/ always @(posedge sysclk)beginif(reset)begintempb<=2'd0;endelsebegintempb<={ tempb[0],pnclk };endend assign pnclkpos=( tempb[0] & ~tempb[1] );//邊緣檢測(cè)方法/*-----------------------------------------short(1023) code gen------------------*/ assign polyvalgxs1=^(gxs1_poly & gxs1regshift);always @(posedge sysclk)beginif(reset)begingxs1regshift<=gxs1_ip; gxs1_counter<=0;endelsebeginif(pnclkpos)beginif(gxs1_counter < jdxs_cnt-1)begingxs1regshift<={polyvalgxs1,gxs1regshift[9:1]}; gxs1_counter<=gxs1_counter+18'd1;endelsebegingxs1regshift<=gxs1_ip; gxs1_counter<=0;endendelsebegingxs1regshift<=gxs1regshift; gxs1_counter<=gxs1_counter;endendendalways @(posedge sysclk)beginif(reset)beginpnxs1_code<=0;pnxs1_allone<=1; endelsebeginpnxs1_code<=gxs1regshift[0];//每經(jīng)過(guò)一個(gè)碼鐘,gxs1regshift序列才移位一次,所以要傳重復(fù)的值十次pnxs1_allone<=(gxs1regshift==gxs1_ip); endend endmodule產(chǎn)生好的模塊長(zhǎng)這樣:
五、m序列的存在的問(wèn)題及改進(jìn)方法
- 周期相同的m序列可用的生成多項(xiàng)式少,比如L=1023的生成多項(xiàng)式只有60個(gè),這就意味著解密所付出的代價(jià)還不夠大
- 互相關(guān)系數(shù)大,這會(huì)導(dǎo)致m序列直接用作擴(kuò)頻碼時(shí)會(huì)產(chǎn)生嚴(yán)重的多址干擾(MAI)
gold序列就是將兩個(gè)能組成優(yōu)選對(duì)的m序列的輸出結(jié)果進(jìn)行模二加。gold序列能同時(shí)解決上述兩個(gè)問(wèn)題。
六、產(chǎn)生gold序列的工程文件
這附一個(gè)產(chǎn)生gold序列的工程文件,兩塊錢就能直接下載,也可以在評(píng)論里留下聯(lián)系方式,我看見(jiàn)了就私發(fā)給你。
注意一下,這個(gè)工程文件用到的quartus是13.1版,FPGA是EP4CE115F29C7,如果版本不對(duì)的話,下載的工程文件可能沒(méi)法用。但里面涉及到的pll模塊、按鍵復(fù)位模塊、gold碼生成模塊都是可以直接用的
下載鏈接:
https://download.csdn.net/download/weixin_45827703/58007033
總結(jié)
以上是生活随笔為你收集整理的m序列生成方法及其fpga实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: VMware “Transport(VM
- 下一篇: 二叉树的前序、中序、后序遍历与创建