現(xiàn)在繼續(xù)討論衛(wèi)星的個數(shù):如果一切理想的話,四顆衛(wèi)星就可以確定三維坐標(biāo)。但實際中,由于user clock inaccuracy,所以還需要一顆衛(wèi)星來排除時鐘的漂移導(dǎo)致的錯誤。因此,需要5顆衛(wèi)星!但是,如果強(qiáng)行用4顆衛(wèi)星的話,由于有時鐘誤差,計算結(jié)果有兩個位置,一個close to the surface,一個在space,而在space的可以容易排除,因此也能用4顆,說得比較繞!下圖就說明為啥是二次方程組了,為啥需要四顆衛(wèi)星了,因為有四個未知數(shù):xu,yu,zu, and bu(時鐘誤差)
通常接受的衛(wèi)星信號來自4~11顆,有兩種方法,一種是全部使用,另一種是選用4顆,選用的標(biāo)準(zhǔn)是四顆衛(wèi)星位置越獨立越好,見Fig.2.8.所謂越獨立,就是四個位置的連線組成的四邊形面積越大越好,所以圖(a)就不好,三個衛(wèi)星在一條線,圖(b)就好,能形成一個四邊形!

多普勒效應(yīng):衛(wèi)星速度3874m/s,對地面user的相對速度就是vd=vs*sin(beta),最大的相對速度為929m/s. 最小就是0(當(dāng)錘直的時候)最大的多普勒頻移是4.9khz.也就是說多普勒的范圍是-5khz~5khz。
5.注意,多普勒的計算如下:多普勒頻移和發(fā)射信號的載頻有關(guān)系,成正比,下圖中:fr就是信號頻率,這里就是用的gps射頻信號載頻計算得到載頻的多普勒頻移;如果是對c/a code而言,多普勒影響就很小,因為c/a碼的頻率是1.023mhz,所以:只有3.2HZ。也就是說多普勒本質(zhì)是一個相對概念。相對誰呢?相對發(fā)送信號源的運動速度,還相對發(fā)送源的電磁波的”運動”速度(就是:電磁波的頻率啦)
繼續(xù)討論多普勒的影響,假設(shè)地面的接收機(jī)是高速運動,那么對c/a碼而言最大的多普勒就是6.4hz. 6.4hz在物理上意味著什么?如果c/a碼的采樣率是5mhz,那么每個碼片長200ns, tracking的任務(wù)就是讓本地產(chǎn)生的c/a碼和接收到的信號對齊,或者至少讓時間差距小于半個碼片,100ns。由于doppler的原因,6.4hz就是說1秒導(dǎo)致6.4次變化,對c/a碼來說一次變化就是一個1.023mhz的倒數(shù)(977.5ns)的長度,所以:每經(jīng)過1/6.4=156.3ms的時間就會漂移977.5ns,或者說沒16ms就漂移100ns.也就是說,如果采樣率5mhz,那么我們每隔16ms就要檢查是否對齊,否則就跟蹤不上了!研究多普勒,除了看絕對值,還看變化率,也就是高階函數(shù),才算對這個多普勒認(rèn)識清楚。比如,多普勒平均變化率,如果只考慮衛(wèi)星運動,那么這個平均值只有0.54hz/s;由于變化率不是均勻的,有的角度變化率大,有的角度變化率小,那么還需要找最大的變化率,就是0.936hz/s,可以看出最大的變化率比均值大很多。上面是假設(shè)接收機(jī)stationary,如果接收機(jī)是在aircraft上,那么加速度很大的時候,例如:1g(
下面公式就表示了L1用qpsk同時傳送p碼和c/a碼。由于衛(wèi)星高度為2萬公里,所以信號強(qiáng)度很微弱,-130dbm左右,所以用c/a碼的作用之一就是得到擴(kuò)頻碼的擴(kuò)頻增益!
cdma信號:這個比較熟悉。這里復(fù)習(xí)一下:如果碼片的速率高于信號速率,就是擴(kuò)頻系統(tǒng);如果碼片率是1mhz,那么由于碼片翻轉(zhuǎn)在時域上是一個矩形窗口,則在頻率上就是一個sinc函數(shù),而且main lobe的帶寬就是2mhz. 問題:這里需要用成型濾波啊?p碼的碼片速率是10.23mhz,所以根據(jù)上文介紹,頻譜帶寬就是20.46mhz,碼片length就是1/10.23=97.8ns,p碼是PRN碼(pseudorandom noise code),周期一共有38周(超過半年才能循環(huán)一次),實際中是每一周就復(fù)位一次。c/a碼的碼片速率是1.023mhz,所以帶寬就是2.046mhz,每個碼片length是977.5ns. c/a碼周期就短,只有1023個碼片,因此一個周期就是1ms。c/a碼本質(zhì)就是gold碼。gps幀結(jié)構(gòu):衛(wèi)星導(dǎo)航數(shù)據(jù)率是50hz,那么一個bit需要20ms,因此一個bit就對應(yīng)20個c/a碼周期,算很長了;30個導(dǎo)航數(shù)據(jù)bit構(gòu)成一個Word; 10個word又構(gòu)成一個subframe(6秒);5個subframe構(gòu)成一個page(30秒);25個page構(gòu)成一個superframe. c/a碼產(chǎn)生:由兩個1023-PRN 序列產(chǎn)生器產(chǎn)生的gold碼。每個序列發(fā)生器都是由10比特的移位寄存器組成。衛(wèi)星的identification(id)就是由序列的相位決定的,一共有37個獨立的相位位置,其中32個用來c/a碼,當(dāng)時只有24顆衛(wèi)星在軌,所以只分配了24個相位。如下圖:不同的c/a碼從G2不同的抽頭輸出,這個要仔細(xì)研究gold碼,看為什么不同抽頭的相位獨立。第二次看的時候,又觀察了下圖,發(fā)現(xiàn)G2輸出不是從最后一個位置輸出,而是從中間選取兩個位置的輸出經(jīng)過模二加之后再輸出,雖然兩兩組合的可能理論上有45(10*9/2),但是獨立的只有37種,我又截了一個圖反應(yīng)了不同的組合得到不同的c/a碼,這些碼起始相位就是衛(wèi)星的id了。
c/a碼性質(zhì):說c/a碼性質(zhì),其實說的是gold碼性質(zhì),或者是偽隨機(jī)碼性質(zhì):相關(guān)性。理想的c/a碼需要有強(qiáng)的自相關(guān)性,幾乎為0的互相關(guān)性。其中,自相關(guān)性是說同一顆衛(wèi)星發(fā)出的c/a碼不同相位的序列相關(guān);互相關(guān)性是指不同的衛(wèi)星發(fā)出的c/a碼的不同相位序列相關(guān)。下圖,就說明了c/a碼良好的相關(guān)性能。
11. 幀數(shù)據(jù)介紹:(5.9~5.17以后再看!)
一旦得到上圖的載波,就可以用fft來求頻率。如果數(shù)據(jù)長度是1ms,那么fft的分辨率就是1khz。為什么呢?這樣好理解啊。1ms的時間,可以表示的周期最長的信號也是1ms,也就是說如果有一個信號周期是2ms,那么在1ms的時間內(nèi)只有半個周期,因此能表示的最小頻率就是1/1ms=1khz,這也是fft的分辨率,所謂分辨率就是最小可以表示的頻率。繼續(xù)討論FFT找載波頻率。如果采樣率5mhz,那么在1ms中就包含了5000個采樣點,因此就需要5000-point FFT。由于是實數(shù)輸入,那么這5000個FFT就是complex conjungate的,即:前面2500個點就包含了所有的信息。由于頻率分辨率是1khz,那么2500個點就可以表示2.5mhz的信息,這么看fft還是線性的,如果有的頻率變化快,有的頻率變化慢,這就不行了。突然感覺自己以前對dsp的理解太low了,只知道記公式,公式是美麗,但是物理意義才更美麗,這是題外話!剛才說可以表示2.5mhz的信息,但是我們其實關(guān)心的只是多普勒頻偏,而不是整個載頻,也就是20khz的范圍,那么顯然2.5mhz就太多了,因此:直接的方法就是只需要計算21個輸出值,用dft即可。這樣做的話,可以節(jié)省大量時間和能量,比如:輸入的c/a碼和本地的c/a碼在1ms內(nèi)需要做乘法,由于有5000個采樣點,每移動一次就要做5000次乘法和55000-point FFT,所以需要做5000×5000次FFT,這么看數(shù)據(jù)量就太大了,而如果只做21-point DFT,那么就只需要5000*21次DFT。用上面的dft的方法,由于需要用本地產(chǎn)生的c/a碼和輸入的c/a碼每移動一位都做乘法和fft,然后找頻率的超過pre-defined threshold中的最大值,如果找到最大值,就可以把現(xiàn)在的本地的c/a碼的位置記錄下來,這就是c/a碼的開頭。而且,由于碼片的length是200ns,也就是說找到的c/a碼的開頭有200ns的分辨率,或者說200ns的誤差,而且由于整個data的長度是1ms,所以多普勒頻率的分辨率就是1khz. 這個思路可以很容易generalize: 現(xiàn)在我們考慮10ms的data,那么由于采樣率不變,所以時間分辨率還是200ns,但是由于10ms和1ms相比,允許周期更長的信號出現(xiàn),即:最多可以有10ms為周期的信號,因此頻率分辨率就是100hz,能得到這個100hz的是要付出很大代價的,因為現(xiàn)在我們需要做50,000-pointFFT, 而之前只需要5000-point FFT,而fft長度增加10倍,復(fù)雜度增加會超過10倍,所以整個復(fù)雜度不是線性增加的!time domain correlation:這才是第二種方法,除了用fft來做,還可以用時域相關(guān)的方法來做。這個方法本地產(chǎn)生的c/a碼不再是簡單的c/a碼,還把RF信號加入在里面。由于采樣后的信號的載波是1.25mhz,那么考慮頻偏在+/-10khz,那么就有21中可能的RF信號可能性,所以本地產(chǎn)生的信號就是如下:
其中,Cs代表24顆衛(wèi)星中某一顆的c/a碼,注意:這里都是認(rèn)為已知衛(wèi)星的c/a碼,只是不知道初始相位,fi代表不同的射頻頻率,如:1250-10,1250-9,1250-8,…,1250+10khz,也就是這些不同的頻率是考慮了多普勒。產(chǎn)生了這個本地信號后,仍然需要數(shù)字化成5mhz的數(shù)據(jù),即:每1ms仍然是5000-point,這些點和輸入數(shù)據(jù)相關(guān),所謂相關(guān),就是乘累加,如果本地的c/a碼包含正確的c/a碼和正確的頻率,那么相關(guān)結(jié)果就會成高,產(chǎn)生一個峰值。如下圖:
這個過程是這樣的,每200ns,輸入的數(shù)據(jù)就多收到一個,就把現(xiàn)在的5000個輸入的復(fù)數(shù)和local的5000個復(fù)數(shù)做相關(guān)得到的一個復(fù)數(shù),把這個復(fù)數(shù)的幅度計算出來就代表現(xiàn)在的相關(guān)結(jié)果。所以,5000個數(shù)據(jù)輸入,就需要做5000次的這樣的乘法,也得到5000個幅度值,那么21路并行的處理,就得到21*5000個幅度值,選取最大并cross the threshold的值,此時對應(yīng)的fi就是接收到的信號的fi,此時的數(shù)據(jù)的起始相位就是Cs的相位。相位這個,怎么理解?由于已知24顆衛(wèi)星的c/a碼初始相位,所以上面的Cs的初始相位都是已知的固定的,所以需要移動接收到的射頻數(shù)據(jù)和本地的c/a碼做所有可能的嘗試,確實很傻,不過1ms內(nèi)最多嘗試5000次,總能試出來找到正確的相位,如果相關(guān)出現(xiàn)峰值,就說明此時接收到的信號的c/a碼的相位和本地的對齊,且接收到的c/a碼的初始相位就是我們實驗用的Cs的初始相位。繼續(xù)討論time domain correlation.這個方法本質(zhì)就是做dft,和fft相比,這個方法更快,因為只需要遍歷所有可能的相位和所有可能的頻率偏移的組合,按照邊界說,這個方法就是先找到解空間的具體的邊界,然后遍歷每一個可能的解,而之前基于FFT的方法則是盲計算,導(dǎo)致計算復(fù)雜度很高,所以好的方法總是搞清楚問題的邊界,就在邊界內(nèi)求解!由于時域相關(guān)的方法得到的結(jié)果頻率分辨率只有1khz,因為只用1ms的數(shù)據(jù)做dft,所以只有1khz.書上說,這個頻率還不夠精確,不能直接送到tracking program,還需要提高進(jìn)度,如何進(jìn)一步提高進(jìn)度?在section 7.10討論。拭目以待!繼續(xù)討論捕獲。現(xiàn)在介紹關(guān)于相關(guān)的一些基本知識:circular convolution and circular correlation. 圓周卷積和圓周相關(guān)。在連續(xù)時間域,有如下關(guān)系:
也就是說:時域卷積,頻率相稱;頻域卷積,時域就相稱。你看,為啥叫卷積,因為還是個積,只是換了一個域,或者說換了一個觀察問題的角度。這個性質(zhì)在離散時間域也有類似的,但又不一樣,不是線性卷積,而是圓周卷積。相關(guān)和卷積也很相似,如下圖:
稍微一看,就知道,卷積和相關(guān)就差一個符號,所以在頻域也很相似。再看下面公式,有個疑問,即使下面成立,也不能認(rèn)為相位關(guān)系也是這樣的吧,因為下面公式只表示了幅度關(guān)系。
現(xiàn)在利用circular correlation來完成前面的time-domain相關(guān)。很簡單: 根據(jù)上面的公式,把輸入的1ms的5000點數(shù)據(jù)當(dāng)成x[n],用FFT得到X(k),然后得到
繼續(xù)討論delay and multiplication的方法,為了說明問題,下面截圖就說明了delay如何選擇的問題,把復(fù)數(shù)信號換成實信號,指數(shù)就變成cos(),在(7-19)中,高頻可以濾波,最后剩下
現(xiàn)在來看這種delay乘的方法主要問題:由于上面表達(dá)式只表示了信號部分,沒有表示噪聲,實際上,噪聲也是要相乘的,所以結(jié)果是噪聲和噪聲相乘,引入更多的噪聲,也就是noise floor increase,信噪比就下降!因此,不能只依靠1ms的數(shù)據(jù),在實際中,需要更長的數(shù)據(jù)。還有一個特性,如下圖。就是delay相乘后的新code對navigation data transition不再敏感,你看新的code只有2個bit受到影響,也就是2/5000的數(shù)據(jù)受到影響,因此影響可以忽略了。因此,不再受到之前討論的10ms數(shù)據(jù)長度的限制了,由于navigation data transition對新的code的影響變小,因此這個方法可以做到精度更高。
理論上,1ms的數(shù)據(jù)就包含了完整的信息,就可以用來得到c/a碼的初始相位和載波多普勒頻偏。但實際中,都會通過采集處理長時間的信息來增加信號snr,提高頻率分辨率等。書上介紹了兩種方式: 第一種是non-coherent的,這個就簡單粗暴了。如果用2ms的數(shù)據(jù),那么對每1ms分別處理,然后再求和。但是怎么相加?把誰和誰相加?這個沒講清楚,就說這么一加,信號功率變成兩倍,但噪聲功率只變成
首先
4.用laplace變換是為了計算狀態(tài)轉(zhuǎn)移。需要復(fù)習(xí)為啥laplace變換可以這么牛!如下圖,
為了研究pll的性質(zhì),書里采用了兩種不同的輸入如下圖。一種是輸入為階躍函數(shù);另一種為調(diào)頻信號。 
上圖到底是傳統(tǒng)的結(jié)構(gòu),還是數(shù)字的結(jié)構(gòu)啊?先不管,來看兩個tracking loop如何交替的工作的。這個工作很有趣: 首先看c/a code loop,就是上圖的偏上面一個loop。,這個loop會產(chǎn)生三個輸出:一個early c/a碼,一個late c/a碼,還有就是prompt c/a碼,按照我的叫法就是on-time c/a碼。其中,只有最后的prompt碼才輸出給carrier loop使用。其他的early和late碼就是遲早門所需要的,用來調(diào)整時間是否對齊用的。所謂early和late碼是和prompt碼時間上早或晚半個chip的時間長度,我在看書的時候,剛開始以為是相差半個采樣周期呢,最后發(fā)現(xiàn)是相差半個c/a碼的長度,所以如果c/a碼的碼率是1.023m,那么半個碼片就是
。通常情況下,如果對輸入信號完全不知道,那么就需要計算所有的k值(0~N-1),然后比較求最大幅度的值,這就必須借助FFT減少計算次數(shù);如果輸入信號的頻率知道一些,即:有1khz或100hz左右的分辨率也就是誤差啦,這時候,我們就沒必要計算所有的k值,完全可以根據(jù)目前的頻率值(有誤差)/頻率分辨率=k值,然后直接用dft計算一個
評論一下:這個方法確實絕了。fft只是explore一段時間內(nèi)頻率的分布,但是不同時間段頻率的變化就不能容易得到,所以用前后相繼的數(shù)據(jù)塊的相位變化就可以得到多普勒的變化,而且精度比fft還高,但這個方法必須是建立在fft基礎(chǔ)上,即:首先得有利用fft捕獲到粗分辨率的載波。也就是,fft和bass配合使用,而且不需要用反饋,就可以得到高精度的載波。問題:前面討論捕獲的時候,也提到了用相位之差來提高捕獲的精度的。需要對比一下!本質(zhì)都是一樣。
因此需要每次把這個不連續(xù)相位給扣除。具體的就不表!
如何調(diào)整這個early和late就可以提高時間精度呢?還得繼續(xù)看下面圖。圖中,顯示的相關(guān)函數(shù)峰是c/a碼自相關(guān)函數(shù),當(dāng)輸入的c/a碼和本地產(chǎn)生的c/a碼完全對齊,產(chǎn)生相關(guān)峰值1023,如果有偏移,無論左偏還是右偏,相關(guān)值都會變小,注意:由于c/a碼的碼率是1.023mhz,所以每個chip的長度是977.5ns,因此相關(guān)峰的物理意義就是往左移動977.5ns相關(guān)峰就為0,往右移動977.5ns也變成0。因此,我們讓early和late的c/a碼和prompt的c/a碼都相差2個采樣周期,即:d=400ns,這樣,我們通過同時把三組c/a碼和input的c/a碼相關(guān)得到三個值
現(xiàn)在可以討論如何提高時間精度了。如下圖:
當(dāng)輸入的c/a碼開始位置比prompt的開始位置相差大于1/2個采樣周期(即:大于100ns),那么可以如圖fig8.10這樣調(diào)整prompt往前一個采樣周期,這樣相位相差就小于100ns,也就是說可以把時間分辨率從200ns降低到100ns。為什么不能更小呢?現(xiàn)在舉例:如果極限情況下,輸入的c/a碼是采樣輸入的,但是采樣的位置和真實的位置剛好相差100ns,那么即使如何調(diào)整prompt,都是相差100ns.不可能更下的誤差了。這里需要說明的是,bass雖然是每個1ms都計算,但是并不是每個1ms都更新,而是10ms才更新,原因是,c/a碼的多普勒頻移最多6.4hz,所以沒16ms才會偏移100ns。因此,每10ms調(diào)整一次就足夠了! 新聞熱點
疑難解答