一種改進的算法,結(jié)合正交調(diào)制,可以實現(xiàn)不受相位失準(zhǔn)影響的FSK解碼。
FSK 符號的頻率可以通過檢查將接收信號乘以參考信號產(chǎn)生的波形的直流偏移來識別。這是一種簡單有效的技術(shù),可以在理想化的數(shù)學(xué)環(huán)境中完美運行,但我們在上一篇文章中看到它對相位失準(zhǔn)的魯棒性不強。
當(dāng)使用非相干接收機架構(gòu)時,無法在發(fā)射機和接收機之間建立固定的相位關(guān)系。這意味著數(shù)據(jù)包開頭的階段將是不可預(yù)測的。僅此一項不會影響我們的解碼器算法,因為我們可以使用訓(xùn)練序列來識別解調(diào)基帶信號的相位,然后相應(yīng)地修改參考信號。(但是,我對這種方法沒有經(jīng)驗,也不知道它在現(xiàn)實生活中的效果如何。)
但是,當(dāng)我們考慮短期相位變化時,情況會變得更糟,因為這些變化會導(dǎo)致接收信號的相位在一個數(shù)據(jù)包的空間內(nèi)偏離參考信號的相位。因此,數(shù)據(jù)包最初可能具有相位對齊,但惡化的相位關(guān)系會產(chǎn)生誤碼,導(dǎo)致整個數(shù)據(jù)包被丟棄。
結(jié)合正交解調(diào)
我在上一篇文章的最后指出了這個問題的解決方案。我們可以使用正交解調(diào)來產(chǎn)生 I 和 Q 基帶信號,使 FSK 解碼算法對相位失準(zhǔn)不敏感。
這是對系統(tǒng)非常有益的修改,但這意味著我們需要解調(diào)電路中的附加組件(生成 I/Q 信號而不是單個基帶信號)和數(shù)字信號處理器中的附加時鐘周期(因為數(shù)學(xué)必須是對兩個信號而不是一個信號執(zhí)行)。
第一個問題是相當(dāng)次要的:正交解調(diào)現(xiàn)在非常普遍,我認(rèn)為在大多數(shù)情況下可以采用它而不會顯著增加成本、復(fù)雜性或 PCB 尺寸。第二個問題的嚴(yán)重性取決于系統(tǒng)的特性。如果您擁有強大的處理器和低數(shù)據(jù)速率,那么當(dāng)您結(jié)合額外的數(shù)學(xué)運算時,您可能完全沒有問題。但是,如果您選擇了低成本、低功耗的處理器并且您正在嘗試最大化數(shù)據(jù)速率,那么所有新的計算都可能使解碼算法無法在下一個數(shù)據(jù)包到達(dá)之前完成對一個數(shù)據(jù)包的處理。
Scilab 中的 I/Q FSK 解碼
讓我們從建立二進制 0 頻率、二進制 1 頻率和每個符號的樣本數(shù)開始,然后我們將根據(jù)每個符號的樣本數(shù)創(chuàng)建索引變量 (n)。
零頻率 = 10e3; 一個頻率 = 30e3; 采樣頻率 = 300e3; Samples_per_Symbol = 采樣頻率/零頻率; n = 0:(Samples_per_Symbol-1);
生成 I/Q 信號
現(xiàn)在我們可以為這兩個頻率生成 I 和 Q 符號。按照慣例,I(同相)信號是余弦波形,Q(正交)信號是正弦波形。
Symbol_Zero_I = cos(2*%pi*n / (SamplingFrequency/ZeroFrequency)); Symbol_One_I = cos(2*%pi*n / (SamplingFrequency/OneFrequency)); Symbol_Zero_Q = sin(2*%pi*n / (SamplingFrequency/ZeroFrequency)); Symbol_One_Q = sin(2*%pi*n / (SamplingFrequency/OneFrequency)); 子圖(2,2,1) 情節(jié)(n,Symbol_Zero_I) 子圖(2,2,2) 情節(jié)(n,Symbol_One_I) 子圖(2,2,3) 情節(jié)(n,Symbol_Zero_Q) 子圖(2,2,4) 情節(jié)(n,Symbol_One_Q) f = gcf(); 對于 k=1:4 > f.children(k).font_size = 3; > f.children(k).children.children.thickness = 3; > 結(jié)束
(最后的 for 循環(huán)會更改每個子圖的刻度線標(biāo)簽的大小和每條線的粗細(xì)。您可以通過圖形窗口中內(nèi)置的圖形界面執(zhí)行相同的操作;使用 GUI 更直觀,但變?yōu)橐欢螘r間后很累。)
我們的目標(biāo)是探索相位失調(diào)的 I/Q 解決方案,因此我們需要符號的相移版本。如上一篇文章所述,接收信號和參考信號之間的最壞情況相位差為 90°,因此我們將生成相位為 45°(即完美對齊和最壞情況對齊的中間)和 90° 的符號.
Symbol_Zero_I_45deg = cos(%pi/4 + 2*%pi*n / (SamplingFrequency/ZeroFrequency)); Symbol_One_I_45deg = cos(%pi/4 + 2*%pi*n / (SamplingFrequency/OneFrequency)); Symbol_Zero_Q_45deg = sin(%pi/4 + 2*%pi*n / (SamplingFrequency/ZeroFrequency)); Symbol_One_Q_45deg = sin(%pi/4 + 2*%pi*n / (SamplingFrequency/OneFrequency)); Symbol_Zero_I_90deg = cos(%pi/2 + 2*%pi*n / (SamplingFrequency/ZeroFrequency)); Symbol_One_I_90deg = cos(%pi/2 + 2*%pi*n / (SamplingFrequency/OneFrequency)); Symbol_Zero_Q_90deg = sin(%pi/2 + 2*%pi*n / (SamplingFrequency/ZeroFrequency)); Symbol_One_Q_90deg = sin(%pi/2 + 2*%pi*n / (SamplingFrequency/OneFrequency));
現(xiàn)在讓我們?yōu)槎M制序列 0101 創(chuàng)建三組 I 和 Q 基帶信號。
Baseband_I_aligned = [Symbol_Zero_I Symbol_One_I Symbol_Zero_I Symbol_One_I]; Baseband_Q_aligned = [Symbol_Zero_Q Symbol_One_Q Symbol_Zero_Q Symbol_One_Q]; Baseband_I_45deg = [Symbol_Zero_I_45deg Symbol_One_I_45deg Symbol_Zero_I_45deg Symbol_One_I_45deg]; Baseband_Q_45deg = [Symbol_Zero_Q_45deg Symbol_One_Q_45deg Symbol_Zero_Q_45deg Symbol_One_Q_45deg]; Baseband_I_90deg = [Symbol_Zero_I_90deg Symbol_One_I_90deg Symbol_Zero_I_90deg Symbol_One_I_90deg]; Baseband_Q_90deg = [Symbol_Zero_Q_90deg Symbol_One_Q_90deg Symbol_Zero_Q_90deg Symbol_One_Q_90deg]; 子圖(3,2,1) 情節(jié)(Baseband_I_aligned) 子圖(3,2,2) 情節(jié)(Baseband_Q_aligned) 子圖(3,2,3) 繪圖(Baseband_I_45deg) 子圖(3,2,4) 繪圖(Baseband_Q_45deg) 子圖(3,2,5) 情節(jié)(基帶_I_90度) 子圖(3,2,6) 繪圖(Baseband_Q_90deg) f = gcf(); 對于 k=1:6 > f.children(k).font_size = 3;
> 結(jié)束
I/Q 乘法
我們現(xiàn)在可以將相位對齊和相移的 I/Q 基帶信號乘以參考符號。盡量不要被一長串的計算分心;我們所做的只是將 I 和 Q 波形首先乘以二進制 0 符號的等長數(shù)組,然后乘以二進制 1 符號的等長數(shù)組。但是,我們必須這樣做 3 次,因為我們想要比較相位對齊版本、相位 = 45° 版本和相位 = 90° 版本的結(jié)果。這并不反映將由數(shù)字信號處理器執(zhí)行的實現(xiàn)——在實際應(yīng)用中將只有一個 I/Q 基帶信號。
請注意,這里我使用 I 符號作為參考符號,但我也可以使用 Q 符號。實際上,我可以使用具有任何相位值的參考符號:通過將 I/Q 技術(shù)結(jié)合到此解碼算法中,我們使該過程對接收符號和參考符號之間的任何類型的相位差異都不敏感。
DecodeZero_I_aligned = Baseband_I_aligned .* [Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I]; DecodeZero_Q_aligned = Baseband_Q_aligned .* [Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I]; DecodeOne_I_aligned = Baseband_I_aligned .* [Symbol_One_I Symbol_One_I Symbol_One_I Symbol_One_I]; DecodeOne_Q_aligned = Baseband_Q_aligned .* [Symbol_One_I Symbol_One_I Symbol_One_I Symbol_One_I]; DecodeZero_I_45deg = Baseband_I_45deg .* [Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I]; DecodeZero_Q_45deg = Baseband_Q_45deg .* [Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I]; DecodeOne_I_45deg = Baseband_I_45deg .* [Symbol_One_I Symbol_One_I Symbol_One_I Symbol_One_I]; DecodeOne_Q_45deg = Baseband_Q_45deg .* [Symbol_One_I Symbol_One_I Symbol_One_I Symbol_One_I]; DecodeZero_I_90deg = Baseband_I_90deg .* [Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I]; DecodeZero_Q_90deg = Baseband_Q_90deg .* [Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I]; DecodeOne_I_90deg = Baseband_I_90deg .* [Symbol_One_I Symbol_One_I Symbol_One_I Symbol_One_I]; DecodeOne_Q_90deg = Baseband_Q_90deg .* [Symbol_One_I Symbol_One_I Symbol_One_I Symbol_One_I];
下圖顯示了乘法產(chǎn)生的波形。
子圖(2,2,1) 情節(jié)(DecodeZero_I_aligned) 子圖(2,2,2) 情節(jié)(DecodeZero_Q_aligned) 子圖(2,2,3) 情節(jié)(DecodeOne_I_aligned) 子圖(2,2,4) 情節(jié)(DecodeOne_Q_aligned)
子圖(2,2,1)
情節(jié)(DecodeZero_I_45deg)
子圖(2,2,2)
情節(jié)(DecodeZero_Q_45deg)
子圖(2,2,3)
情節(jié)(DecodeOne_I_45deg)
子圖(2,2,4)
情節(jié)(DecodeOne_Q_45deg)
子圖(2,2,1)
情節(jié)(DecodeZero_I_90deg)
子圖(2,2,2)
情節(jié)(DecodeZero_Q_90deg)
子圖(2,2,3)
情節(jié)(DecodeOne_I_90deg)
子圖(2,2,4)
情節(jié)(DecodeOne_Q_90deg)
結(jié)論
如果您仔細(xì)思考最后一組圖,我想您將開始了解 I/Q 處理在 FSK 解碼上下文中的好處。由于輸入信號的相位與參考符號的相位失去對齊,因此作為接收頻率與參考頻率之間相似性的指標(biāo),乘法波形的 DC 偏移變得不可靠。然而,90°相移基帶信號的存在彌補了這種影響,因為當(dāng)一個基帶信號的相位差接近±90°(最壞情況)時,另一個基帶信號的相位接近0°或 180°(最佳情況)。
-
解碼器
+關(guān)注
關(guān)注
9文章
1152瀏覽量
40956 -
FSK
+關(guān)注
關(guān)注
14文章
114瀏覽量
58495 -
信號設(shè)計
+關(guān)注
關(guān)注
0文章
5瀏覽量
5909
發(fā)布評論請先 登錄
相關(guān)推薦
評論