班長聊通信原理 | 系列文章請至主頁「文章」查閱
通信中的很多調製都有一個把串行數據轉換為並行數據的過程,QPSK就是一個典型的例子。
其實不光QPSK,其他的調製方法都是這個模式。
很多小夥伴最近都在問關於QPSK的問題,很多人在串並轉換地方就犯糊塗了。我之前也寫過QPSK的文章:
本文將從實際Matlab仿真角度,直觀的闡述這個問題。
無論如何,我們先假定我們需要發送一組信息。
為了方便,我們跳過傳感器採集-採樣-編碼等環節,直接定義一組數據:
10位二進位數,10個比特。
0-1-0-1-1-1-0-0-1-1
data=[0 1 0 1 1 1 0 0 1 1];%準備發送的信息
通過Matlab的stem繪圖函數,可以畫出原始信息。定義圖形標題為「準備發送的信息」,設置坐標軸範圍,橫坐標0~11,縱坐標0~1.5。
figure(1)stem(data, &39;,3), grid on;% 畫出杆狀圖,線寬度設置為3號title(&39;);% 定義圖形標題axis([ 0 11 0 1.5]);% 設置坐標軸範圍
得出原始數據杆狀圖1:
圖1 擬發送的數據,10個比特;來源:班長自製
將原始信息,改成NRZ(Nonreturn - To - Zero)非歸零雙極性編碼,就是我們最常見的編碼。
根據信號是否歸零,還可以劃分為歸零碼和非歸零碼,歸零碼碼元中間的信號回歸到0電平,例如&34;為正電平,&34;為負電平,每個數據表示完畢後,都會回歸到零電平狀態,而非歸零碼沒有回歸到零電平的過程,例如&34;為高電平,&34;為低電平。
而雙極性,就是用正負電平的脈衝分別表示二進位代碼1和0。
圖2 多種常見的編碼形式;來源:網絡
data_NZR=2*data-1; % 將數據改成NRZ編碼格式
data數據改成NRZ形成編碼,在Matlab中也是簡單的一句命令即可,具體波形如圖3中「串」波形。
圖3 QPSK的調製原理;來源:班長自製
很多程序中,會用reshape函數一句話,實行了數據比特的串並轉換。
s_p_data=reshape(data_NZR,2,length(data)/2); % 數據串並轉換
關於&34;函數的作用,就是將A的行列排列成m行n列。它對我們輸入data_NZR的作用就如圖4所示。
圖4 數據的串並轉換;來源:班長自製
就是把一串數據,按照m行n列重新排列。
我們為什麼要把一串數據,如圖4中「串」形數列轉換為並行呢?
這裡的M代表多進位,M=2,4,8...,通常取2的正整數冪。
也就是常說的2PSK,4PSK/QPSK,8PSK......
一個三角函數sk(t),我們通常用三個參數就可以唯一確定,分別為振幅A,頻率f/ω,初始相位θk。
我們這裡討論的是相位調製,所以振幅A和頻率f/ω不會變化。
圖5 QPSK信號分析;來源:班長自製
θk的變化,如圖5所示。
如果定義θk等於π或者0兩種情況,那麼sk(t)就有兩種唯一的波形,分別為
這兩種波形,正好對應二進位的0和1,這就是2PSK/BPSK調製。
那麼4PSK/QPSK調製呢?
以此類推,按照θk的公式,我們可以取0,π/2,π,3π/2四種初相位,對應4種sk(t)波形
這四種波形,可以表示四種二進位組合01,00,10,11,這就是4PSK/QPSK調製。
同樣是sk(t)波形,在QPSK中可以同時傳輸兩個bit,所以理論上4/QPSK調製的數據傳輸速率是2PSK的兩倍。
生成QPSK信號,就是上文的sk(t)信號。
sk(t)是一個三角函數,根據三角展開式,我們可以進行如下展開:
sk(t)波形被展開成兩個正弦波的疊加,且初始相位均為0,二者相位差π/2(cos與sin相位差π/2)。
載波信號coswt很容易獲得,sinwt信號在cosωt的基礎上做一個π/2移相,也可以獲得。
那麼根據圖3所示,當數據流串並轉換之後,分成2路,一路為ak,一路為bk;
分別與cos和sin相乘之後,再進行疊加,輸出QPSK信號。
我們用圖3中的串行數據-1 +1 -1 +1 +1 +1 -1 -1 +1 +1作為輸入。
當ak=-1,bk=+1,輸入為(0,1)時,
sk(t)=-1*cosωt+(+1)sinωt=√2 * cos(ωt + 5π/4 ),θ3 = 5π/4;
當ak=+1,bk=+1,輸入為(1,1)時,
sk(t)=+1*cosωt+(+1)sinωt=√2 * cos(ωt + 3π/4 ),θ4 = 7π/4;
當ak=-1,bk=-1,輸入為(0,0)時,
sk(t)=-1*cosωt+(-1)sinωt=√2 * cos(ωt + 7π/4 ),θ2 = 3π/4;
當ak=+1,bk=-1,輸入為(1,0)時,
sk(t)=+1*cosωt+(-1)sinωt=√2 * cos(ωt + π/4 ),θ1 = π/4;
嘿嘿,這也是四個相位,那麼這也是QPSK。
圖6 QPSK的四種相位信號;來源:班長自製
自此,我們發現之所以要串行轉換為並行,就是為了方便調製cos和sin載波,然後疊加,形成QPSK信號。
那麼,我們可以生產QPSK信號如下圖7所示。同相信號Inphase和正交Quadrature信號疊加,形成最終QPSK信號。
圖7 QPSK信號仿真圖;來源:班長自製
for(i=1:length(data)/2) y1=s_p_data(1,i)*cos(2*pi*f*pt); % 同相分量 y2=s_p_data(2,i)*sin(2*pi*f*pt) ;% 正交分量 y_in=[y_in y1]; % 同相信號向量 y_qd=[y_qd y2]; % 正交信號向量 y=[y y1+y2]; % 調製信號end
文中的仿真其實還是有改進之處的,班長在此拋出3個思考,大家可以思考下,會加深對QPSK的理解。
QPSK可是4G、5G中的重要調製技術,尤其在信號覆蓋較差的時候,一點也不過時啊。
思考1:為什麼一般的程序中要用NRZ編碼這種形式,用其他的編碼形式可以嗎?
思考2:圖7中最後紅色的QPSK信號,在&34;位置處,出現了不連續,或者說是突變?這對信號傳輸有影響嗎?能否改進?
思考3:圖6中的對應方式,即
為什麼要這麼排列,可以打亂順序麼?格雷碼是什麼?
看到這裡,幫文章點個讚吧!
歡迎您在評論區留言討論!