数字调制解调—扩频通信和伪码同步
目錄:
- 1 擴(kuò)頻的基本原理
- 1.1 擴(kuò)頻的概念
- 1.2 直擴(kuò)系統(tǒng)工作原理
- 2 直擴(kuò)調(diào)制信號的matlab仿真分析
- 3 偽碼同步的一般原理
- 3.1 滑動相關(guān)捕獲
- 3.2 延遲鎖相環(huán)跟蹤原理
- 4 同步算法及matlab仿真分析
- 4.1 算法設(shè)計
- 4.2 偽碼同步環(huán)
- 4.3 捕獲及跟蹤門限仿真
1 擴(kuò)頻的基本原理
1.1 擴(kuò)頻的概念
- 擴(kuò)頻的簡單理解
??前面講過一些調(diào)制方法,都是利用調(diào)制信號乘以基帶信號得到已調(diào)信號。2ASK的調(diào)制信號就是二進(jìn)制序列,MSK調(diào)制信號可以是一種正交載波。調(diào)制無非就是頻譜搬移,將基帶信號調(diào)制到期望的頻帶內(nèi)以便傳輸。這里擴(kuò)頻也屬于一種調(diào)制方式,所謂擴(kuò)頻,就是擴(kuò)展頻譜的范圍,比如原信號的頻譜在200 ~ 400KHz,通過擴(kuò)頻,信息可能就分散在20 ~ 30MHz內(nèi)。通過拓寬頻譜,可以極大增強通信的抗干擾性。在擴(kuò)頻系統(tǒng)中,發(fā)送方以特定的調(diào)制方式將原始信號的頻譜加以擴(kuò)展,得到擴(kuò)頻信號。接收端再對擴(kuò)頻信號加以處理,把它恢復(fù)為原始信號。這就是擴(kuò)頻和解擴(kuò)。
- 為什么要擴(kuò)頻
??一般的,如語音信號,帶寬比大約幾到十幾,屬于窄帶通信,擴(kuò)頻信號的帶寬比高達(dá)1000,屬于寬帶通信。用這么大的帶寬來傳輸信息,是浪費資源嗎?顯然,可以利用信道復(fù)用,在寬帶范圍內(nèi)完成若干窄帶通信,即在同一頻帶同時建立多個信號進(jìn)行通信,各信道可以通過擴(kuò)頻碼進(jìn)行區(qū)分,這就是碼分多址(CDMA)。
- 如何擴(kuò)展頻譜?
??既然是調(diào)制,就是頻譜搬移,搬移到高頻,就需要比基帶信號頻率高的信號。我們知道,時域有限,頻域無限。一個窄脈沖的頻譜非常寬,如果持續(xù)時間很窄的脈沖序列被所傳輸?shù)男畔⒄{(diào)制時,就可以產(chǎn)生帶寬很大的信號。這種持續(xù)時間很窄的脈沖碼序列,碼元速率很高,稱之為偽碼序列。偽碼序列不影響傳輸?shù)男畔?#xff0c;僅僅起擴(kuò)展頻譜的作用,接收方可通過相關(guān)解調(diào)獲取信息碼。
1.2 直擴(kuò)系統(tǒng)工作原理
??直擴(kuò)系統(tǒng)的組成框圖如圖所示,a(t)是信源輸出,碼元持續(xù)時間為Ta,c(t)是偽碼,碼元寬度是Tc,以模二加實現(xiàn)二者相乘,產(chǎn)生速率與偽碼速率相同的擴(kuò)頻序列。
??所以直擴(kuò)系統(tǒng)的關(guān)鍵就是產(chǎn)生偽碼。理論上來說,使用隨機碼擴(kuò)展頻譜是最理想的,但接收方也需要同樣的隨機序列副本,理想的隨機序列是不可復(fù)制的。因此在工程中多用PN碼,即偽隨機序列解決這一問題,本文使用的是m序列。
??m序列是一種線性反饋序列,可根據(jù)本原多項式產(chǎn)生,其模型可用線性反饋移位寄存器來表征,移位寄存器的位數(shù)和抽頭個數(shù)由m序列的階數(shù)查表可得,這里不贅述。
2 直擴(kuò)調(diào)制信號的matlab仿真分析
??如前所述,直擴(kuò)系統(tǒng)調(diào)制信號可分為三個過程:產(chǎn)生偽碼序列、原始信號通過偽碼序列進(jìn)行擴(kuò)頻、載波調(diào)制。m序列由本原多項式產(chǎn)生抽頭系數(shù),偽碼產(chǎn)生函數(shù)及擴(kuò)頻主函數(shù)代碼如下:
function p=PnCode(polynomial,reg)grade=length(polynomial)-1; PN_Length=(2^grade-1); pn=zeros(1,PN_Length); %找出本原多項式中除最低位外為1的位,并依次存放在寄存器c中 n=0; c=zeros(1,grade); for i=grade:-1:1if polynomial(i)==1n=n+1;c(n)=grade+1-i;end end %產(chǎn)生一個周期的PN碼 q=0; for i=1:PN_Length p(i)=reg(1);m=reg(grade+1-c(1));for q=2:gradeif (c(q)>0) & (reg(grade+1-c(q))==1)m=~m;endendfor q=1:(grade-1)reg(q)=reg(q+1);endreg(5)=m; end??可以看出,m序列產(chǎn)生過程主要分為:設(shè)置初始狀態(tài)、寄存器模二和運算、移位、次態(tài)的初值為模二和的結(jié)果,循環(huán)了數(shù)值為偽碼長度的次數(shù)后,產(chǎn)生的便是一個周期的偽碼。
%仿真直擴(kuò)信號的調(diào)制過程Rb=200*10^3; Lpn=31; Rc=Rb*Lpn; Fs=8*Rc; fc=8*10^6; a=0.8; N=5000; L=N*Lpn*Fs/Rc; t=0:(L-1); t=t/Fs;polynomial=[1 0 0 1 0 1]; %產(chǎn)生PN碼的本原多項式 reg=[1 0 0 0 0]; PN=PnCode(polynomial,reg) %PN=zeros(1,length(PN));bitstream=randint(1,N,2); source=rectpulse(bitstream,Lpn);data=zeros(1,N*Lpn); for i=1:Nif bitstream(i)==0 data((i-1)*Lpn+1:i*Lpn)=PN;elsedata((i-1)*Lpn+1:i*Lpn)=~PN;end endfor i=1:N*Lpnif data(i)==0data(i)=-1;end end%對擴(kuò)頻后的數(shù)據(jù)以Fs頻率采樣 Ads=upsample(data,Fs/Rc);%設(shè)計升余弦濾波器 n_T=[-2 2]; rate=Fs/Rc; T=1; Shape_b = rcosfir(a,n_T,rate,T);%figure(4);freqz(Shape_b) rcos_Ads=filter(Shape_b,1,Ads);f0=sin(2*pi*fc*t); dss=rcos_Ads.*f0;運行程序后,可以在命令行中顯示一個周期的偽碼序列`
[1 0 0 0 0 1 0 1 0 1 1 1 0 1 1 0 0 0 1 1 1 1 1 0 0 1 1 0 1 0 0]??仿真結(jié)果如圖所示。擴(kuò)頻就是偽碼與信息做異或處理,對于二進(jìn)制而言,信息碼無非是"0"或者"1",異或遇0不變,遇1取反,一個信息碼元對應(yīng)一個周期的偽碼。因此,偽碼速率是信息碼元的31倍(31是偽碼長度),當(dāng)產(chǎn)生了一個信息碼元,就要產(chǎn)生31位的偽碼與之對應(yīng)運算,生成的也是31位的碼長,這個碼可能與PN碼一樣,也可能是其反碼,這取決于信息碼元是"0"還是"1",所以擴(kuò)頻碼的碼率=偽碼碼率=31*信息碼元的碼率。
`
3 偽碼同步的一般原理
??解擴(kuò)的關(guān)鍵就在于收發(fā)雙方偽碼是否一致,即需要完成偽碼同步。同步又分為捕獲和跟蹤,捕獲是利用滑動相關(guān)原理,跟蹤可利用延遲鎖相環(huán)。
3.1 滑動相關(guān)捕獲
??滑動相關(guān)原理框圖如下:
??如圖所示,接收信號與本地偽碼序列相乘后再進(jìn)行積分,即求出它們的互相關(guān)值,然后在門限檢測器中與某一門限比較,以判斷是否已捕獲到有用信號。這里利用PN碼的相關(guān)性,當(dāng)兩個相同的偽碼序列在相位上一致時,其相關(guān)值有最大輸出,即達(dá)到相關(guān)峰。一旦確認(rèn)捕獲完成,則捕獲指示信號的同步脈沖控制搜索控制時鐘,調(diào)整本地偽碼產(chǎn)生器產(chǎn)生偽碼頻率和相位,使之與接收信號保持同步。
3.2 延遲鎖相環(huán)跟蹤原理
??當(dāng)捕獲到有用信號,即收發(fā)雙方偽碼相差在一個偽碼碼元以內(nèi),同步系統(tǒng)轉(zhuǎn)入同步階段,即精同步,也成為跟蹤階段。
??對于延遲鎖相環(huán),需要得到本地偽碼與接收信號的相差,它是以擴(kuò)頻序列自相關(guān)函數(shù)的偶對稱性來實現(xiàn)跟蹤功能。下左圖為擴(kuò)頻序列的自相關(guān)函數(shù)曲線,右圖為延遲鎖相環(huán)的鑒相曲線。可見相關(guān)峰出現(xiàn)對稱軸上,且相關(guān)信號的延遲和滯后曲線相減可以得到擴(kuò)頻序列的跟蹤曲線。
??由鑒相曲線可知,在相差位于一定范圍內(nèi),鑒相器輸出一個與τττ成線性關(guān)系的極性信號,那么可以由這個小范圍得到鑒相誤差,從而經(jīng)過環(huán)路濾波送到VCO,控制本地偽碼序列向減小跟蹤偏差的方向調(diào)整。所以在此過程研究鑒相是為了尋找一個小范圍的線性曲線來作為VCO的控制信號,在后文會提出一種全數(shù)字偽碼同步環(huán),將前文所述的捕獲過程和這里的跟蹤過程合并,要知道跟蹤就是利用小范圍相差得到的線性相關(guān)信號,控制VCO,使得相位可以被調(diào)控,從而達(dá)到精準(zhǔn)跟蹤。
4 同步算法及matlab仿真分析
4.1 算法設(shè)計
??由前所述,傳統(tǒng)的滑動相關(guān)器通過控制本地偽碼產(chǎn)生器的驅(qū)動時鐘頻率來達(dá)到滑動的目的。在數(shù)字電路中,通過控制本地偽碼產(chǎn)生器,使其按固定步長左移或者右移來達(dá)到相對滑動的目的,此法也成為固定步長串行搜索法。原理圖如圖所示:
??由圖可以看出當(dāng)PN碼與接受的時鐘發(fā)生相干解擴(kuò)(相乘后積分),通過門限檢測得到信息序列,如果不是原始數(shù)據(jù),即按固定長度步進(jìn)。如何知道解出的數(shù)據(jù)和原始數(shù)據(jù)匹配呢,利用相乘和積分運算獲得相關(guān)值,通過門限檢測來比較是否捕獲到了有用信號,即門限檢測是用于檢測相關(guān)值,從而知道是否具有相差,來達(dá)到本地偽碼與接收信號中的偽碼相對滑動的目的。
??由于每次滑動步長為一個碼元周期,即對于擴(kuò)頻序列,一個周期一個周期的處理,第一次對第一個周期的擴(kuò)頻碼進(jìn)行調(diào)整,步進(jìn)了一個固長,如果沒有同步成功,下一次對第二個周期的擴(kuò)頻碼接著調(diào)整,則步進(jìn)兩個步長。每次調(diào)整都需要完成一個偽碼周期(采樣后的),比如偽碼長度是31,經(jīng)過八倍采樣,那么原來的一個偽碼碼元被擴(kuò)展到了8個,則偽碼周期就是8位碼元,那么最多要調(diào)整31次,即最長捕獲時間為Ta=LpnTb。
4.2 偽碼同步環(huán)
??由前文可知,捕獲和跟蹤都需要環(huán)路,如果能用同一個環(huán)路實現(xiàn)或者盡可能多地對兩種環(huán)路中的部分部件(積分器)加以重用,則可大大減少所需的硬件資源。因為捕獲和跟蹤在時間軸上不重復(fù),這就為環(huán)路部件的重用提供可能,這就是全數(shù)字偽碼同步環(huán)的由來。原理圖如圖所示。
??全數(shù)字偽碼同步環(huán)與傳統(tǒng)同步環(huán)的差別主要是捕獲方式的改變,即采用延遲鎖相環(huán)中的超前支路和滯后支路的相關(guān)累加器的平方和作為判斷是否捕獲到有用信號的依據(jù),而不單只使用一條支路的相關(guān)累加器的輸出作為門限檢測值。跟蹤部分不變,還是利用固定步長調(diào)整相位。在步進(jìn)中可以減少本地偽碼的固定步長,這樣盡可能避免由于積累的相差過多,再加上頻偏的影響導(dǎo)致滑動無法同步,4.3仿真采用的是步進(jìn)1/2偽碼碼元長度(4個采樣點,一個周期采8個點)。理論上,超前和滯后的兩條支路的相關(guān)累加器的相關(guān)函數(shù)如圖所示。
4.3 捕獲及跟蹤門限仿真
clc Rb=200*10^3; Lpn=31; Rc=Rb*Lpn; Fs=8*Rc; a=0.8; N=2; t=0:(N*Lpn*Fs/Rc-1); t=t/Fs;ploynomial=[1 0 0 1 0 1]; reg=[1 0 0 0 0]; %設(shè)置PN碼的初始相位 PN=E9_1_PnCode(ploynomial,reg); %調(diào)用函數(shù)產(chǎn)生PN碼bitstream=zeros(1,N); %產(chǎn)生N點原始二進(jìn)制數(shù)據(jù) source=rectpulse(bitstream,Lpn);data=zeros(1,N*Lpn); for i=1:Nif bitstream(i)==0 data((i-1)*Lpn+1:i*Lpn)=PN;elsedata((i-1)*Lpn+1:i*Lpn)=~PN;end endfor i=1:N*Lpnif data(i)==0data(i)=-1;end endAds=upsample(data,Fs/Rc);%設(shè)計升余弦濾波器 n_T=[-2 2]; rate=Fs/Rc; T=1; Shape_b = rcosfir(a,n_T,rate,T); %對采樣后的數(shù)據(jù)進(jìn)行升余弦濾波; rcos_Ads=filter(Shape_b,1,Ads);pn_ad=Ads(1:Fs/Rb); dat=rcos_Ads(Fs/Rb/2: Fs/Rb/2+Fs/Rb-1); Len=length(dat);%產(chǎn)生滯后1/2個偽碼碼元周期的支路數(shù)據(jù) data_aft=[dat(Len-Fs/Rc/2+1:Len),dat(1:Len-Fs/Rc/2)]; %產(chǎn)生超前1/2個偽碼碼元周期的支路數(shù)據(jù) data_pre=[dat(Fs/Rc/2+1:Len),dat(1:Fs/Rc/2)];%捕獲時的相關(guān)峰和差曲線 step=2; PN_oc=pn_ad; sum_aft=zeros(1,Lpn*step); sum_pre=zeros(1,Lpn*step); for i=1:Lpn*stepif i>1PN_oc=[pn_ad((i-1)*Fs/Rc/step+1:Len),pn_ad(1:(i-1)*Fs/Rc/step)];endfor j=1:Fs/Rbif PN_oc(j)==1sum_aft(i)=sum_aft(i)+data_aft(j);sum_pre(i)=sum_pre(i)+data_pre(j);elsesum_aft(i)=sum_aft(i)-data_aft(j);sum_pre(i)=sum_pre(i)-data_pre(j);endend end square_aft=sum_aft.*sum_aft; square_pre=sum_pre.*sum_pre; square_sum=square_aft+square_pre; square_sub=square_aft-square_pre;%跟蹤時的相關(guān)峰和差曲線 step=8; PN_oc=pn_ad; sum_aft=zeros(1,Lpn*step); sum_pre=zeros(1,Lpn*step); for i=1:Lpn*stepif i>1PN_oc=[pn_ad((i-1)*Fs/Rc/step+1:Len),pn_ad(1:(i-1)*Fs/Rc/step)];endfor j=1:Fs/Rbif PN_oc(j)==1sum_aft(i)=sum_aft(i)+data_aft(j);sum_pre(i)=sum_pre(i)+data_pre(j);elsesum_aft(i)=sum_aft(i)-data_aft(j);sum_pre(i)=sum_pre(i)-data_pre(j);endend end square_aft=sum_aft.*sum_aft; square_pre=sum_pre.*sum_pre; square_sum=square_aft+square_pre; square_sub=square_aft-square_pre;??下圖分別為步進(jìn)4個采樣點和1個采樣點時捕獲狀態(tài)的相關(guān)峰曲線。其中相關(guān)峰之差中間的線性部分就是鑒相部分,相關(guān)峰之和中間凹下去而沒有出現(xiàn)平坦的原因是因為采樣頻率不夠高。解決辦法要么增加采樣頻率,要么將捕獲和跟蹤兩個環(huán)路分開設(shè)計。
總結(jié)
以上是生活随笔為你收集整理的数字调制解调—扩频通信和伪码同步的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: React开发(165):ant des
- 下一篇: 入门第十一课 Python语句的嵌套