頻序列詳解:m序列與Walsh碼的原理、區(qū)別及應(yīng)用場景)
簡介本資源圍繞擴(kuò)頻通信中的兩類核心序列——m序列與Walsh碼展開面向通信工程、無線通信課程學(xué)習(xí)者及CDMA系統(tǒng)入門研究者幫助理解擴(kuò)頻碼的生成原理與工程應(yīng)用。壓縮包內(nèi)為1個doc文檔約355KB以文字講解配合公式推導(dǎo)與代碼片段的方式組織內(nèi)容。文檔系統(tǒng)梳理了m序列由n級線性移位寄存器產(chǎn)生、周期為2^n-1的機(jī)理反饋系數(shù)與起始狀態(tài)對序列的影響以及其自相關(guān)、互相關(guān)特性在PN序列與CDMA擴(kuò)頻中的應(yīng)用同時講解Walsh碼源于Hadamard矩陣的正交性64階Walsh序列在前向鏈路中對應(yīng)W0至W63信道、碼片速率1.2288Mc/S并分析多徑與異步信號導(dǎo)致多址干擾無法完全消除的原因。文中還給出Hadamard矩陣轉(zhuǎn)換為Walsh序列的Matlab函數(shù)實(shí)現(xiàn)涉及Paley序、Walsh序與逆Walsh序的變換矩陣并延伸介紹Gold序列的構(gòu)造思路。目前已有636人學(xué)習(xí)適合作為擴(kuò)頻序列原理學(xué)習(xí)與代碼實(shí)踐的參考材料。1. 擴(kuò)頻序列到底是什么從“多人同時說話”說起想象一個嘈雜的雞尾酒會十幾個人同時說話聲音混在一起你很難聽清任何一個人。但如果給每個人分配一種獨(dú)特的“口音”并且約定只有聽懂這種口音的人才能提取出對應(yīng)內(nèi)容那么即使大家同時開口信息也能被區(qū)分出來。擴(kuò)頻通信里的“擴(kuò)頻序列”扮演的就是這種“獨(dú)特口音”的角色——它把原本窄帶的信號像撒胡椒面一樣攤到一個很寬的頻帶上接收端再用同一套序列把信號“收攏”回來。m序列和Walsh碼就是兩種最常被拿來做這件事的序列。一個擅長制造“看起來像隨機(jī)噪聲”的偽隨機(jī)信號一個擅長讓多個信道彼此“互不串味”。搞懂它們你就能明白為什么CDMA系統(tǒng)能讓幾十個用戶同時用同一段頻譜打電話也能明白為什么理論上完美的正交到了真實(shí)環(huán)境里總會打折扣。這篇內(nèi)容不堆公式只把這兩個概念講透順帶說清它們和Gold序列的區(qū)別以及什么時候該用誰。2. m序列為什么“最長”反而最有用2.1 從移位寄存器說起一個不斷“翻新”的隊列m序列的全稱是“最長線性移位寄存器序列”。名字聽著拗口拆開看就簡單了。想象一排n個盒子每個盒子里裝著0或1。每來一個時鐘節(jié)拍所有盒子里的數(shù)字同時往右挪一格最右邊那個數(shù)字被擠出去成為輸出同時從左邊補(bǔ)進(jìn)來一個新數(shù)字這個新數(shù)字是某些盒子里數(shù)字的“異或”結(jié)果——具體取哪幾個盒子由反饋系數(shù)決定。這個結(jié)構(gòu)就是線性移位寄存器。n個盒子最多能表示2?種狀態(tài)但全0狀態(tài)會卡死一直輸出0所以有效狀態(tài)最多2??1種。m序列的“最長”就體現(xiàn)在這里它能不重復(fù)地遍歷所有2??1個非零狀態(tài)周期達(dá)到理論最大值。通俗地說它把一副牌里除了大小王之外的每一張都翻了一遍才重新洗牌所以叫“最長”。反饋系數(shù)決定了從哪些盒子抽頭做異或。不同的抽頭組合產(chǎn)生的是完全不同的m序列。起始狀態(tài)則決定從這副牌的哪一張開始翻。兩者合在一起就定義了一條具體的m序列。2.2 偽隨機(jī)性為什么它“像噪聲”卻“可復(fù)現(xiàn)”m序列最討人喜歡的地方是它的統(tǒng)計特性非常接近真正的隨機(jī)噪聲。在一個周期內(nèi)0和1的數(shù)量幾乎各占一半1比0多一個連續(xù)相同數(shù)字的“游程”分布也有規(guī)律。這意味著從頻譜上看它把信號能量均勻地攤開了很像背景噪聲。但關(guān)鍵在于“偽”字。真正的隨機(jī)噪聲無法復(fù)現(xiàn)而m序列只要反饋系數(shù)和起始狀態(tài)確定接收端就能在本地生成一條一模一樣的序列。發(fā)送端用這條序列去擴(kuò)頻接收端用同一條序列去解擴(kuò)信號就被還原了。這種“看起來隨機(jī)、實(shí)際上確定”的特性正是偽隨機(jī)噪聲序列的核心價值。在CDMA系統(tǒng)里m序列常被用作擾碼或前導(dǎo)序列。它良好的自相關(guān)性——只有完全對齊時相關(guān)峰才極高錯開一點(diǎn)就迅速下降——讓接收端能精確地找到信號起始位置?;ハ嚓P(guān)性雖然不如Walsh碼那么理想但在同一系統(tǒng)內(nèi)通過優(yōu)選對搭配也能控制在可接受范圍內(nèi)。2.3 反饋系數(shù)怎么選不是隨便抽頭都行n級移位寄存器有很多種抽頭方式但能產(chǎn)生m序列的抽頭組合并不多。以n3為例抽頭取第1和第3個盒子做異或反饋可以產(chǎn)生周期為7的m序列換一種抽法可能只能產(chǎn)生短得多的周期甚至退化成非最長序列。實(shí)際工程中反饋系數(shù)通常用本原多項(xiàng)式來表示。選錯了多項(xiàng)式序列周期會大幅縮短擴(kuò)頻效果大打折扣。這就像配鑰匙齒形差一點(diǎn)鎖就打不開。所以m序列發(fā)生器的設(shè)計第一步就是查表選一個經(jīng)過驗(yàn)證的本原多項(xiàng)式而不是自己隨便試。3. Walsh碼正交這件事到底正交在哪里3.1 從Hadamard矩陣到Walsh矩陣重新排隊的過程Walsh碼來源于Hadamard矩陣。Hadamard矩陣是一個只由1和?1組成的方陣它的任意兩行或兩列對應(yīng)位置相乘再求和結(jié)果都是0。這個性質(zhì)就叫“正交”。正交意味著兩行之間“完全不相干”一個行向量里包含的信息在另一個行向量上投影為零。但Hadamard矩陣的行序是亂的直接拿來用不方便。于是人們按照“符號交變次數(shù)”重新排列這些行交變次數(shù)少的排前面多的排后面。重排之后得到的矩陣就是Walsh矩陣。Walsh矩陣的每一行就是一個Walsh序列行與行之間依然保持正交。在CDMA前向鏈路中常用64階Walsh序列也就是64行、每行64個碼片的矩陣。每個Walsh序列分配給一個前向物理信道編號W0到W63。碼片速率1.2288Mc/s這個數(shù)字乘以64正好對應(yīng)1.2288MHz的帶寬劃分方式。不同信道用不同的Walsh序列擴(kuò)頻接收端用對應(yīng)的序列解擴(kuò)就能把各自的信息從混合信號里“撈”出來。3.2 正交的好處多址干擾理論上可以為零多址干擾是CDMA系統(tǒng)里最頭疼的問題之一多個用戶同時發(fā)信號彼此之間會互相干擾。Walsh碼的正交性提供了一種理想化的解決方案——如果所有信號嚴(yán)格同步且都使用相互正交的Walsh序列那么接收端解擴(kuò)某個用戶信號時其他用戶的信號投影為零多址干擾理論上可以降到零。這就是“碼分多址”這個名字的由來用不同的碼來區(qū)分用戶而不是用不同的頻率或不同的時間。頻率劃分像把一條路分成多條車道時間劃分像輪流上路碼分則像所有人同時上路但各說各的暗號只有對上暗號的人才能聽懂。3.3 現(xiàn)實(shí)打臉為什么正交不能解決所有問題理論很美好現(xiàn)實(shí)很骨感。Walsh碼的正交性有兩個前提嚴(yán)格同步且只考慮本小區(qū)信號。真實(shí)環(huán)境里這兩個前提都很難滿足。多徑傳播會讓同一個信號經(jīng)過不同路徑到達(dá)接收端延遲和衰減各不相同。這些延遲到達(dá)的信號與原始同步信號之間不再保持正交關(guān)系。來自其他小區(qū)的信號更是不同步的它們使用的Walsh序列即使與本小區(qū)相同由于到達(dá)時間錯開正交性也被破壞。結(jié)果就是多址干擾不會為零只是被抑制到一定程度。這也解釋了為什么實(shí)際系統(tǒng)里還要研究多用戶檢測、干擾消除等技術(shù)。如果Walsh碼真的能完全正交這些技術(shù)就沒有存在的必要了。正交是起點(diǎn)不是終點(diǎn)。4. 易混概念m序列、Walsh碼、Gold序列到底怎么分4.1 易混點(diǎn)一m序列和Walsh碼都是擴(kuò)頻碼能互換嗎為什么混兩者都叫“擴(kuò)頻序列”都在CDMA里用都跟“正交”或“相關(guān)”沾邊。怎么區(qū)分m序列的核心優(yōu)勢是偽隨機(jī)性和良好的自相關(guān)性適合做擾碼、同步碼Walsh碼的核心優(yōu)勢是嚴(yán)格正交適合做信道劃分。m序列的互相關(guān)性通常不如Walsh碼理想而Walsh碼的自相關(guān)性又不如m序列尖銳。它們不是替代關(guān)系而是分工關(guān)系——一個負(fù)責(zé)“讓信號像噪聲”一個負(fù)責(zé)“讓信道互不干擾”。4.2 易混點(diǎn)二Walsh碼是正交的所以多址干擾為零為什么混教材在講Walsh碼時往往先講理想正交模型再講實(shí)際干擾讀者容易只記住前半句。怎么區(qū)分正交性只在嚴(yán)格同步且同小區(qū)的條件下成立。多徑延遲、異步到達(dá)、鄰區(qū)干擾都會破壞正交性。實(shí)際系統(tǒng)中Walsh碼抑制多址干擾的能力是有限的不能指望它把干擾降到零。把“理論上可以為零”當(dāng)成“實(shí)際上就是零”是初學(xué)者最容易翻車的地方。4.3 易混點(diǎn)三Gold序列就是m序列的簡單拼接為什么混Gold序列確實(shí)是用m序列構(gòu)造的名字里又帶“序列”容易以為只是把兩條m序列接在一起。怎么區(qū)分Gold序列是用一對周期和速率相同的m序列優(yōu)選對逐位模2加得到的。它不是拼接而是“混合”。這樣做的目的是在保持良好自相關(guān)性的同時獲得更優(yōu)的互相關(guān)性——同一組Gold序列里任意兩條之間的互相關(guān)值都控制在較低水平。對于多用戶場景互相關(guān)性好意味著用戶之間干擾小所以Gold序列在CDMA里常被用作地址碼。4.4 易混點(diǎn)四n級移位寄存器產(chǎn)生的都是m序列為什么混m序列的定義就是“由n級線性移位寄存器產(chǎn)生”容易反推成“只要是n級移位寄存器輸出就是m序列”。怎么區(qū)分只有反饋系數(shù)對應(yīng)本原多項(xiàng)式時才能產(chǎn)生周期為2??1的最長序列。其他抽頭方式可能產(chǎn)生短周期序列甚至進(jìn)入全零死循環(huán)。所以“n級移位寄存器”是硬件結(jié)構(gòu)“m序列”是滿足特定條件的輸出。結(jié)構(gòu)對了參數(shù)不對照樣出不來m序列。4.5 易混點(diǎn)五Walsh碼的階數(shù)越高越好為什么混64階比16階能容納更多信道看起來“越大越強(qiáng)”。怎么區(qū)分階數(shù)越高每個碼片持續(xù)的時間越短對同步精度的要求也越高。同時可用正交序列的數(shù)量增加了但每條序列的抗干擾能力并沒有同步提升。選擇階數(shù)要匹配系統(tǒng)帶寬、用戶數(shù)量和同步能力不是無腦選大。64階Walsh碼對應(yīng)1.2288Mc/s的碼片速率是特定標(biāo)準(zhǔn)下的匹配設(shè)計換一個場景未必適用。5. 什么時候用m序列什么時候用Walsh碼一個具體例子假設(shè)你在設(shè)計一個室內(nèi)無線通信Demo有8個傳感器節(jié)點(diǎn)要向一個中心接收機(jī)同時發(fā)數(shù)據(jù)。你手里有兩種擴(kuò)頻序列可選m序列和Walsh碼。怎么選先看需求。8個節(jié)點(diǎn)同時發(fā)接收機(jī)要能區(qū)分開。如果節(jié)點(diǎn)之間能嚴(yán)格同步Walsh碼是首選——8階Walsh矩陣正好提供8條正交序列每個節(jié)點(diǎn)分一條接收端解擴(kuò)時互不干擾。但室內(nèi)環(huán)境多徑反射嚴(yán)重嚴(yán)格同步很難做到延遲到達(dá)的信號會破壞正交性。這時候Walsh碼的優(yōu)勢會被削弱。再看m序列。如果每個節(jié)點(diǎn)用不同本原多項(xiàng)式產(chǎn)生的m序列做擾碼接收端用對應(yīng)的本地序列解擴(kuò)即使有延遲m序列尖銳的自相關(guān)峰也能幫助接收機(jī)鎖定目標(biāo)信號。代價是互相關(guān)性不如Walsh碼理想節(jié)點(diǎn)之間的干擾會比理想正交時大一些。實(shí)際工程中常見的做法是組合使用用Walsh碼做信道劃分用m序列做加擾。這樣既利用了Walsh碼的正交性來區(qū)分信道又用m序列的偽隨機(jī)性來改善信號的統(tǒng)計特性降低鄰區(qū)干擾的影響。Gold序列則適合用戶數(shù)量更多、對互相關(guān)性要求更嚴(yán)格的場景因?yàn)樗谝唤M序列內(nèi)部提供了更均衡的互相關(guān)性能。下面是一個簡化的Walsh序列生成示例用Python演示如何從Hadamard矩陣得到Walsh矩陣。注意這里只展示核心邏輯實(shí)際工程中還要考慮階數(shù)選擇和同步處理。import numpy as np def hadamard_matrix(n): 生成2^n階Hadamard矩陣只含1和-1 H np.array([[1]]) for _ in range(n): H np.block([[H, H], [H, -H]]) return H def walsh_matrix(n): 按交變次數(shù)重排Hadamard矩陣得到Walsh矩陣 H hadamard_matrix(n) # 計算每一行的符號交變次數(shù) transitions [] for row in H: count 0 for i in range(1, len(row)): if row[i] ! row[i-1]: count 1 transitions.append(count) # 按交變次數(shù)升序排列 order np.argsort(transitions) return H[order] # 生成8階Walsh矩陣 W walsh_matrix(3) print(Walsh矩陣行數(shù), W.shape[0]) print(第一行W0, W[0]) print(第二行W1, W[1]) # 驗(yàn)證正交性任意兩行點(diǎn)積為0 print(W0與W1的點(diǎn)積, np.dot(W[0], W[1]))這段代碼先構(gòu)造Hadamard矩陣再按每行的符號交變次數(shù)排序。hadamard_matrix函數(shù)用遞歸方式生成2?階矩陣walsh_matrix函數(shù)統(tǒng)計每行相鄰元素不同的次數(shù)按次數(shù)從小到大排列。最后打印W0和W1并驗(yàn)證它們的點(diǎn)積為0說明正交性成立。實(shí)際系統(tǒng)中Walsh序列的階數(shù)、碼片速率和分配方式都要根據(jù)具體標(biāo)準(zhǔn)來定不能直接套用這個Demo?;氐竭x擇問題。如果同步條件好、用戶數(shù)固定、且主要干擾來自本小區(qū)Walsh碼是直接有效的方案。如果同步困難、多徑嚴(yán)重、或者需要更好的偽隨機(jī)特性來對抗截獲m序列更合適。Gold序列則在用戶數(shù)多、互相關(guān)要求高的場景下表現(xiàn)更均衡。沒有一種序列能通吃所有場景關(guān)鍵是把它們的特性匹配到具體約束上。從那以后我每次選擴(kuò)頻序列都先把同步條件和干擾來源列清楚再決定用哪種。正交性不是萬能藥偽隨機(jī)性也不是搞清邊界比記住定義重要得多。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取