寫在前面:本博文是《深入淺出通信原理》的學習筆記,加之本人自我理解撰寫而成,僅供個人學習使用
一、BPSK調製過程
還記得我們在之前的博文中提到的IQ調製嗎?我們再來熟悉一下IQ調製的流程:
BPSK (Binary Phase Shift Keying) —— 二進制相移鍵控。
它的調製過程很簡單,我們只使用一種載波:cos(ω0t)
當輸入的二進制信號是0時,s(t)=cos(ω0t);當輸入的二進制信號是1時,s(t)=cos(ω0t+Π)
而我們知道:cos(ω0t+Π)=−cos(ω0t),那麼我們可以得到下面的映射關係:
輸入的二進制信號 |
對應的I、Q信號 |
調製後的波形 |
0 |
I = 1;Q = 0 |
s(t)=cos(ω0t) |
1 |
I = -1;Q = 0 |
s(t)=cos(ω0t+Π) |
1.1 用旋轉向量的角度理解BPSK調製
首先,我們先明確一個概念:正頻率f=2Πω表示旋轉向量沿逆時針旋轉;複頻率−f=−2Πω表示旋轉向量沿着順時針旋轉。(這個概念的分析我們將在後續博文中學習)
那麼,由於BPSK中,輸入0時,輸出s(t)=cosω0t,輸入1時,輸出s(t)=cos(ω0t+Π)。
那麼,如果在旋轉向量的角度上,輸入0,輸出s(t)=cosω0t的情況相當於初始位置如下圖(a)所示的逆時針旋轉向量在實軸上的投影;輸出1,輸出−cosω0t=cos(ω0t + Π)$的情況相當於初始位置下圖(b)中順時針旋轉的向量在實軸上的投影
請注意:上圖展示的分別是傳輸爲0和1時初始位置的向量,我們知道,對於BPSK,傳輸每一個二進制信號之間都是會有時間間隔的,那麼它們在這個時間間隔中是會一直旋轉的!那麼調製的過程,就是這個旋轉向量在旋轉過程中在實軸上的映射(這個在實軸上的映射波形就是調製波形)
可能大家不太能夠想象旋轉向量旋轉時在實軸上的映射是怎麼樣的波形,那麼下面通過一個動圖看看單位向量:ejω0t(頻率爲+,代表逆時針旋轉)旋轉過程中在實軸上的映射波形和在虛軸上的映射波形:
1.2 用Matlab實現BPSK調製過程
我們打算傳輸的一段二進制序列是“ 0 1 0 0 1 0 1 1”,使用的載波頻率是fc = 5
subplot(4,1,1); %第一個圖
t = 0:0.01:8;
d = [0 0;0.5 0;1 1;1.5 1;2 0;2.5 0;3 0;3.5 0;4 1;4.5 1;5 0;5.5 0;6 1;6.5 1;7 1;7.5 1;8 1];
signal = pulstran(t - 0.25, d, 'rectpuls', 0.5); %矩形脈衝
plot(t, signal);
axis([0 8 -0.5 1.5]);
title('輸入的二進制序列');
grid();
subplot(4,1,2);
d1 = [0 1;0.5 1;1 -1;1.5 -1;2 1;2.5 1;3 1;3.5 1;4 -1;4.5 -1;5 1;5.5 1;6 -1;6.5 -1;7 -1;7.5 -1;8 -1];
I = pulstran(t-0.25, d1, 'rectpuls', 0.5);
plot(t, I);
axis([0 8 -2 2]);
title('映射過來的I路信號');
grid();
subplot(4,1,3);
d3 = [0 0;0.5 0;1 0;1.5 0;2 0;2.5 0;3 0;3.5 0;4 0;4.5 0;5 0;5.5 0;6 0;6.5 0;7 0;7.5 0;8 0];
Q = pulstran(t-0.25, d3, 'rectpuls', 0.5);
plot(t, Q);
axis([0 8 -2 2]);
title('映射過來的Q路信號');
grid();
s1 = I.*cos(2*pi*5*t);
s2 = Q.*sin(2*pi*5*t);
output = s1 - s2;
plot(t, output);
axis([0 8 -2 2]);
title('調製之後的信號');
grid();
二、BPSK解調過程
2.1 用旋轉向量的角度理解BPSK解調
通過上文的學習我們知道,如果我們接受的是一個旋轉向量,並且假設接收端接收到0時刻和t時刻的旋轉向量如圖所示:
爲了解調出信號0或者1,我們可以給接受的旋轉向量乘上順時針旋轉的單位向量:e−jω0t
那麼,我們就可以得到一個靜止的向量,他不會亂跑,因此我們可以很輕鬆地知道傳輸過來的是什麼數字。但是,理想很美好,現實很骨骨感 —— 我們實際上傳輸的,是旋轉向量在實軸上的投影,那麼,我們應該怎麼辦呢?
還記得麼,BPSK傳輸0時的s(t)=cos(ω0t),傳輸1時的s(t)=−cos(ω0t)
別忘了我們還有這個利器:cosω0t=21(ejω0t+e−jω0t)
上面這樣做,就可以理解爲把cosω0t分解爲了兩個幅值爲21,一個逆時針旋轉;一個順時針旋轉的向量,如下圖所示:
那麼,現在的解調,第一步,我們可以這樣做:把s(t)乘上順時針旋轉單位向量e−jω0t,再乘2。這樣,我們就可以得到一個靜止的,模爲1的向量和一個順時針旋轉,角速度爲2ω0的向量
2e−jω0tcos(ω0t)=2e−jω0t21(ejω0t+e−jω0t)=1+e−2jω0t
取出其中那個不旋轉的向量,我們就可以解調出需要的信號了。對於s(t)=−cos(ω0t)的情況也是一樣的處理。
−2e−jω0tcos(ω0t)=−2e−jω0t21(ejω0t+e−jω0t)=−1+e−2jω0t
按這樣的方法,輸入0時解調得到的是1+e−2jω0t;輸入1時得到的是−1+e−2jω0t
我們看到:向量1+e−2jω0t包括一個靜止分量1,和一個角頻率爲−2ω0,順時針方向旋轉的向量。
−1+e−2jω0t包括一個靜止分量-1,和一個角頻率爲−2ω0,順時針方向旋轉的向量。
那麼,取出那個不旋轉的向量就可以解調出+1 和 -1 ,從而得到輸入信號是0還是1
【問題來了】:如何取出那個不旋轉的向量+1和-1呢?
- 使用低通濾波器,濾去高頻分量,得到直流量。
- 通過積分。
下面我們看看用積分怎麼取出直流量:
【1】當我們接收到的信號是s(t)=cos(ω0t)時,我們做如下的積分:
T1∫−2T2T2s(t)e−jω0tdt=T1∫−2T2T(ejω0t+e−jω0t)e−jω0tdt=1+T1∫−2T2Te−2jω0tdt=1+T1∫−2T2T[cos(−2ω0t)+jsin(−2ω0t)]dt=1
在上面的積分中,我們用了∫−2T2Tcostdt=0∫−2T2Tsintdt=0
好啦,以上就是BPSK調製和解調的數學過程,並使用IQ調製實現,下面我們綜合來看看整個過程:
四、利用複數運算實現BPSK調製
我們還記得用複數運算實現IQ調製的過程:
【特別要記得還有“取實部”這一過程!】
我們上文提到了BPSK調製過程中,輸入信號和I,Q信號的映射關係裏面,始終有Q = 0,即:b = 0。
那麼用複數運算實現BPSK調製,我們需要將上圖中的b = 0:
那麼,我們發送出去的調製信號s(t)就等於Re(aejω0t)=acos(ω0t)
Tips:在我們用matlab仿真BPSK調製的時候,我們的調製信號也是直接寫成s(t)=acos(ω0t)了
%%%舉個例子(僞代碼)%%%
fc %載波頻率
fs %採樣頻率
假設定義好了t和 I 路信號
那麼, s(t) = I.*cos(2*pi*fc*(t/fs)); %相當於上圖中的取實部了
五、利用實數運算實現BPSK調製
其實,調製過程和就是我們僞代碼的思路,解調過程是將接收到的信號再乘上一樣的cos(ω0t),再積分,我們看看框圖:
我們用數學方法看看用實數運算實現BPSK解調的過程:(以當接收到的信號是cos(ω0t)爲例)
T2∫−2T+2Tcos(ω0t)cos(ω0t)dt=T2∫−2T+2Tcos2(ω0t)dt=T2∫−2T+2T(21+21cos(2ω0t))dt=1