寫(xiě)在前面:本博文是《深入淺出通信原理》的學(xué)習筆記,僅供個(gè)人學(xué)習記錄使用
先回顧一下用實(shí)數運算實(shí)現BPSK調制的框圖:

還記得我們講BPSK調制的時(shí)候,都是假的與 c o s ω 0 t cosω_0t cosω0?t相乘的都是直流分量+1或-1,但是真實(shí)傳輸過(guò)程中往往沒(méi)有那么簡(jiǎn)單,經(jīng)常會(huì )是一些非周期信號。我們假設 x ( t ) x(t) x(t)的頻譜如下所示:

我們通過(guò)上篇博文學(xué)習到的傅里葉變換,看看這個(gè)非周期的復雜信號
x
(
t
)
x(t)
x(t)和余弦載波
c
o
s
ω
0
t
cosω_0t
cosω0?t相乘之后的頻譜有什么特征:
X
′
(
ω
)
=
∫
?
∞
+
∞
x
(
t
)
c
o
s
ω
0
t
e
?
j
ω
t
d
t
=
∫
?
∞
+
∞
x
(
t
)
1
2
(
e
j
ω
0
t
+
e
?
j
ω
0
t
)
e
j
ω
t
d
t
=
1
2
∫
?
∞
+
∞
x
(
t
)
e
j
(
ω
0
?
ω
)
t
d
t
+
1
2
∫
?
∞
+
∞
x
(
t
)
e
?
j
(
ω
+
ω
0
)
t
d
t
=
1
2
∫
?
∞
+
∞
x
(
t
)
e
?
j
(
ω
?
ω
0
)
t
d
t
+
1
2
∫
?
∞
+
∞
x
(
t
)
e
?
j
(
ω
+
ω
0
)
t
d
t
=
1
2
X
(
ω
?
ω
0
)
+
1
2
X
(
ω
+
ω
0
)
X′(ω)=∫+∞?∞x(t)cosω0te?jωtdt=∫+∞?∞x(t)12(ejω0t+e?jω0t)ejωtdt=12∫+∞?∞x(t)ej(ω0?ω)tdt+12∫+∞?∞x(t)e?j(ω+ω0)tdt=12∫+∞?∞x(t)e?j(ω?ω0)tdt+12∫+∞?∞x(t)e?j(ω+ω0)tdt=12X(ω?ω0)+12X(ω+ω0)
X′(ω)?=∫?∞+∞?x(t)cosω0?te?jωtdt=∫?∞+∞?x(t)21?(ejω0?t+e?jω0?t)ejωtdt=21?∫?∞+∞?x(t)ej(ω0??ω)tdt+21?∫?∞+∞?x(t)e?j(ω+ω0?)tdt=21?∫?∞+∞?x(t)e?j(ω?ω0?)tdt+21?∫?∞+∞?x(t)e?j(ω+ω0?)tdt=21?X(ω?ω0?)+21?X(ω+ω0?)?
通過(guò)對
x
(
t
)
c
o
s
ω
0
t
x(t)cosω_0t
x(t)cosω0?t的傅里葉變換,我們發(fā)現:當信號
x
(
t
)
x(t)
x(t)與
c
o
s
ω
0
t
cosω_0t
cosω0?t相乘之后,相當于將
x
(
t
)
x(t)
x(t)的頻譜
X
(
ω
)
X(ω)
X(ω)一分為二,分別向左和向右移動(dòng)
ω
0
ω_0
ω0?(也要注意幅度的變換:二分之一?。?/p>
【注意:如果頻譜用的是 X ( f ) X(f) X(f)表示,那么就相當于 X ( f ) X(f) X(f)一分為二,分別向左和向右移動(dòng)f】!
那么乘上了載波 c o s ω 0 t cosω_0t cosω0?t之后的頻譜變?yōu)椋?/p>

我們先來(lái)看看一個(gè)脈沖寬度為1的矩形波和頻率 f c f_c fc? = 5Hz的載波相乘的頻譜變化:
%%%下面先從時(shí)域上來(lái)看看x(t)與余弦載波相乘的結果:%%% subplot(3,1,1); t = -1.5:0.01:1.5; y = rectpuls(t, 1); plot(t, y); axis([-1.5 1.5 -0.5 1.5]); grid on; subplot(3,1,2); carrier = cos(2*pi*5*t); %fc = 5; plot(t, carrier); grid on; axis([-1.5 1.5 -1.5 1.5]); subplot(3,1,3); st = y.*carrier; plot(t, st); grid on; axis([-1.5 1.5 -1.5 1.5]);

從之前的學(xué)習中我們知道:矩形波信號的頻譜是:
X
(
f
)
=
τ
s
i
n
c
(
τ
f
)
X(f) = τsinc(τf)
X(f)=τsinc(τf)
其中,
τ
τ
τ是脈沖寬度,那么對于上面這個(gè)脈沖寬度為1的矩形波
x
(
t
)
x(t)
x(t),它的頻譜就可以表示為:
s
i
n
c
(
f
)
sinc(f)
sinc(f),代碼如下:
figure(2);
k = -12:0.001:12;
xf = sinc(k);
plot(k, xf);
axis([-12,12,-0.3,1]);
grid on;

它與載波相乘之后, X ′ ( f ) X'(f) X′(f)相當于原頻譜一分為二,分別向左和向右移動(dòng)f的過(guò)程,因此,有:
figure(3);
xf_new = 0.5.*sinc(k - 5) + 0.5*sinc(k + 5);
plot(k, xf_new);
axis([-12,12,-0.3,1]);
grid on;

為了便于對比,我們將這兩個(gè)頻譜放到一起:

關(guān)于從時(shí)域上理解BPSK調制解調,可以參考:
【通信原理 入坑之路】 —— 深入理解BPSK調制和解調的全過(guò)程及其Matlab實(shí)現
時(shí)域上,將
x
(
t
)
x(t)
x(t)信號和余弦載波
c
o
s
ω
0
t
cosω_0t
cosω0?t相乘的時(shí)域波形是這樣的:

下面,我們從三維空間看看正負脈沖和余弦載波相乘的頻譜:
%下面是正脈沖的情況% f = -9:0.001:-1; x = 0.5*sinc(f+5); fill3(x,f,0*f,'r'); hold on; f = 1:0.001:9; x = 0.5*sinc(f - 5); xlabel('x'); ylabel('f'); zlabel('y') grid on; fill3(x,f,0*f,'r'); set(gca, 'YDir', 'reverse');

%下面是負脈沖的情況% f = -9:0.001:-1; x = -0.5*sinc(f+5); fill3(x,f,0*f,'r'); hold on; f = 1:0.001:9; x = -0.5*sinc(f - 5); xlabel('x'); ylabel('f'); zlabel('y') grid on; fill3(x,f,0*f,'r'); set(gca, 'YDir', 'reverse');

我們看看Q路信號與正弦載波 s i n ( ω 0 t ) sin(ω_0t) sin(ω0?t)相乘的頻譜變化:

X
′
(
ω
)
=
∫
?
∞
+
∞
x
(
t
)
s
i
n
ω
0
t
e
?
j
ω
t
d
t
=
∫
?
∞
+
∞
x
(
t
)
(
?
j
2
)
(
e
j
ω
0
t
?
e
?
j
ω
0
t
)
e
?
j
ω
t
d
t
=
∫
?
∞
+
∞
x
(
t
)
(
?
j
2
)
e
j
(
ω
0
?
ω
)
t
d
t
+
∫
?
∞
+
∞
x
(
t
)
j
2
e
?
j
(
ω
0
+
ω
)
t
d
t
=
∫
?
∞
+
∞
x
(
t
)
(
?
j
2
)
e
?
j
(
ω
?
ω
0
)
t
d
t
+
∫
?
∞
+
∞
x
(
t
)
j
2
e
?
j
(
ω
0
+
ω
)
t
d
t
=
?
j
2
X
(
ω
?
ω
0
)
+
j
2
X
(
ω
+
ω
0
)
X′(ω)=∫+∞?∞x(t)sinω0te?jωtdt=∫+∞?∞x(t)(?j2)(ejω0t?e?jω0t)e?jωtdt=∫+∞?∞x(t)(?j2)ej(ω0?ω)tdt+∫+∞?∞x(t)j2e?j(ω0+ω)tdt=∫+∞?∞x(t)(?j2)e?j(ω?ω0)tdt+∫+∞?∞x(t)j2e?j(ω0+ω)tdt=?j2X(ω?ω0)+j2X(ω+ω0)
X′(ω)?=∫?∞+∞?x(t)sinω0?te?jωtdt=∫?∞+∞?x(t)(?2j?)(ejω0?t?e?jω0?t)e?jωtdt=∫?∞+∞?x(t)(?2j?)ej(ω0??ω)tdt+∫?∞+∞?x(t)2j?e?j(ω0?+ω)tdt=∫?∞+∞?x(t)(?2j?)e?j(ω?ω0?)tdt+∫?∞+∞?x(t)2j?e?j(ω0?+ω)tdt=?2j?X(ω?ω0?)+2j?X(ω+ω0?)?
我們發(fā)現,信號與正弦載波
s
i
n
(
ω
0
t
)
sin(ω_0t)
sin(ω0?t)相乘,頻譜的變化有兩個(gè):
下面我們從三維角度看看信號與正弦載波相乘的頻譜:
%下面是正脈沖的情況% f = -9:0.001:-1; st1 = 0.5*sinc(f+5); fill3(0*f,f,st1, 'b'); grid on; hold on; f = 1:0.001:9; st2 = -0.5*sinc(f-5); fill3(0*f,f,st2,'b'); grid on; set(gca,'YDir','reverse');

下面,我們將I路信號與余弦載波 c o s ω 0 t cosω_0t cosω0?t相乘的頻譜、Q路信號與 s i n ( ω 0 t ) sin(ω_0t) sin(ω0?t)相乘的頻譜畫(huà)在一起:

首先對下面的代碼進(jìn)行一些解釋?zhuān)?br> 我們在本博客里面的仿真,比如說(shuō)BPSK調制解調還是QPSK調制解調的頻域分析,我們都默認I路,Q路信號都是脈沖寬度為1的矩形波,因此,I路信號和Q路信號的頻譜都可以用sinc函數表示。
因此,下面代碼中的xf_cos就表示:
I
c
o
s
(
ω
0
t
)
Icos(ω_0t)
Icos(ω0?t)的頻譜,xf_sin就表示
Q
s
i
n
(
ω
0
t
)
Qsin(ω_0t)
Qsin(ω0?t)的頻譜
或者我們這樣想:
I
c
o
s
(
ω
0
t
)
Icos(ω_0t)
Icos(ω0?t)的頻譜就是上圖那些紅色的圖,
Q
s
i
n
(
ω
0
t
)
Qsin(ω_0t)
Qsin(ω0?t)的頻譜就是上圖那些藍色的圖,那么由于
s
(
t
)
=
I
c
o
s
(
ω
0
t
)
+
Q
s
i
n
(
ω
0
t
)
s(t) = Icos(ω_0t) + Qsin(ω_0t)
s(t)=Icos(ω0?t)+Qsin(ω0?t)因此,頻譜也是對應地疊加。(向量相加)
那么,我們只需要將這兩個(gè)頻譜疊加(類(lèi)似于向量的合成),那么我們就可以得到調制信號的頻譜了
%發(fā)送數據10 subplot(2,2,1); a = 1/sqrt(2); f = -9:0.001:-1; xf_cos = 0.5*a*sinc(f+5); xf_sin = 0.5*a*sinc(f+5); fill3(xf_cos,f,xf_sin,'g'); hold on; f = 1:0.001:9; xf_cos = 0.5*a*sinc(f-5); xf_sin = -0.5*a*sinc(f-5); fill3(xf_cos,f,xf_sin,'g'); grid on; set(gca,'YDir','reverse'); title('發(fā)送數據10'); %發(fā)送數據11 subplot(2,2,2); f = -9:0.001:-1; xf_cos = -0.5*a*sinc(f+5); xf_sin = 0.5*a*sinc(f+5); fill3(xf_cos,f,xf_sin,'g'); hold on; f = 1:0.001:9; xf_cos = -0.5*a*sinc(f-5); xf_sin = -0.5*a*sinc(f-5); fill3(xf_cos,f,xf_sin,'g'); grid on; set(gca,'YDir','reverse'); title('發(fā)送數據11'); %發(fā)送數據01 subplot(2,2,3); f = -9:0.001:-1; xf_cos = -0.5*a*sinc(f+5); xf_sin = -0.5*a*sinc(f+5); fill3(xf_cos,f,xf_sin,'g'); hold on; f = 1:0.001:9; xf_cos = -0.5*a*sinc(f-5); xf_sin = 0.5*a*sinc(f-5); fill3(xf_cos,f,xf_sin,'g'); grid on; set(gca,'YDir','reverse'); title('發(fā)送數據01'); %發(fā)送數據00 subplot(2,2,4); f = -9:0.001:-1; xf_cos = 0.5*a*sinc(f+5); xf_sin = -0.5*a*sinc(f+5); fill3(xf_cos,f,xf_sin,'g'); hold on; f = 1:0.001:9; xf_cos = 0.5*a*sinc(f-5); xf_sin = 0.5*a*sinc(f-5); fill3(xf_cos,f,xf_sin,'g'); grid on; set(gca,'YDir','reverse'); title('發(fā)送數據00');
【這里還需要特別說(shuō)明一個(gè)問(wèn)題】:大家現在要記得QPSK的映射關(guān)系:
| 輸入二進(jìn)制信號 | I, Q信號 |
|---|---|
| 00 | + 1 2 \frac{1}{\sqrt{2}} 2 ?1?, + 1 2 \frac{1}{\sqrt{2}} 2 ?1? |
| 01 | - 1 2 \frac{1}{\sqrt{2}} 2 ?1?,+ 1 2 \frac{1}{\sqrt{2}} 2 ?1? |
| 11 | - 1 2 \frac{1}{\sqrt{2}} 2 ?1?,- 1 2 \frac{1}{\sqrt{2}} 2 ?1? |
| 10 | + 1 2 \frac{1}{\sqrt{2}} 2 ?1?,- 1 2 \frac{1}{\sqrt{2}} 2 ?1? |
那么,對于上面的程序,當輸入10時(shí),由于我們在和載波 s i n ( ω 0 t ) sin(ω_0t) sin(ω0?t)相乘時(shí)還需要對Q路信號乘上一個(gè)負號,因此,當Q路信號是負數時(shí),相當于一個(gè)正的脈沖和 s i n ( ω 0 t ) sin(ω_0t) sin(ω0?t),那么問(wèn)題來(lái)了:我們解調的時(shí)候,如果接收端Q路信號乘以的本地載波是 s i n ( ω 0 t ) sin(ω_0t) sin(ω0?t),那么此時(shí)解調出來(lái)的應該是-Q??!
這個(gè)問(wèn)題我們一會(huì )兒會(huì )遇到。

我們從BPSK解調入手,還記得我們在之前的博文中從時(shí)域上分析BPSK解調嗎:
對接收到的
s
(
t
)
=
x
(
t
)
c
o
s
ω
0
t
s(t) = x(t)cosω_0t
s(t)=x(t)cosω0?t,我們對它再乘以個(gè)本地載波
c
o
s
ω
0
t
cosω_0t
cosω0?t,然后通過(guò)一個(gè)周期內積分再乘以2就可以解調出信號,那么,用低通濾波器的方法是什么原理呢?

這是 x ( t ) x(t) x(t)經(jīng)過(guò)BPSK調制,乘上了載波信號之后,在解調端再乘上了本地余弦信號之后的結果,僅僅靠乘上 c o s ω 0 t cosω_0t cosω0?t,似乎還并不能分離出 x ( t ) x(t) x(t),而低通濾波器,就可以把高頻成分濾去,只留下 x ( t ) x(t) x(t)。
因此,調制解調的原理如下:

其中,我們使用的低通濾波器的內部結構如下圖所示:

還是以發(fā)送信號10為例:
我們把
s
(
t
)
s(t)
s(t)分別在接收端乘以
c
o
s
(
ω
0
t
)
cos(ω_0t)
cos(ω0?t)和
s
i
n
(
ω
0
t
)
sin(ω_0t)
sin(ω0?t),我們來(lái)看看解調結果:
我們還是來(lái)回顧一下發(fā)送信號10時(shí), s ( t ) s(t) s(t)的頻譜:
figure(1); a = 1/sqrt(2); f = -6:0.001:-4; xf = 0.5*a*sinc(f+5); yf = 0.5*a*sinc(f+5); fill3(xf,f,yf,'b'); hold on; f = 4:0.001:6; xf = 0.5*a*sinc(f-5); yf = -0.5*a*sinc(f-5); fill3(xf,f,yf,'b'); grid on; axis([-0.6 0.6 -12 12 -0.6 0.6]); set(gca,'YDir','reverse'); line([0 0],[-12 12],[0 0]);

對這個(gè) s ( t ) s(t) s(t)信號再乘上 c o s ( ω 0 t ) cos(ω_0t) cos(ω0?t),我們可以這樣理解,把上圖這兩個(gè)藍色分量分別乘上 c o s ( ω 0 t ) cos(ω_0t) cos(ω0?t),然后進(jìn)行向量合成,最后效果應該是這樣:
f = -11:0.001:-9; xf = 0.25*a*sinc(f+10); yf = 0.25*a*sinc(f+10); fill3(xf,f,yf,'b'); hold on; f = 9:0.001:11; xf = 0.25*a*sinc(f-10); yf = -0.25*a*sinc(f-10); fill3(xf,f,yf,'b'); hold on; f = -1:0.001:1; xf = 0.25*a*sinc(f)+0.25*a*sinc(f); yf = 0.25*a*sinc(f)-0.25*a*sinc(f); fill3(xf,f,yf,'b'); grid on; set(gca,'YDir','reverse'); axis([-0.6 0.6 -12 12 -0.6 0.6]); line([0 0],[-12 12],[0 0]);

然后,將這個(gè)信號經(jīng)過(guò)傅里葉變換得到上面這個(gè)頻譜,經(jīng)過(guò)低通濾波器就可以得到+I信號了
下面我們來(lái)看看
s
(
t
)
s(t)
s(t)乘上
s
i
n
(
ω
0
t
)
sin(ω_0t)
sin(ω0?t)的結果:
figure(2); %下面開(kāi)始解調 a = 1/sqrt(2); f = -11:0.001:-9; xf = 0.25*a*sinc(f+10); yf = -0.25*a*sinc(f+10); fill3(xf,f,yf,'b'); hold on; f = -1:0.001:1; xf = 0.25*a*sinc(f); yf = 0.25*a*sinc(f); fill3(xf,f,yf,'b'); grid on; axis([-0.6 0.6 -12 12 -0.6 0.6]); set(gca,'YDir','reverse'); line([0 0],[-12 12],[0 0]); figure(3); f = -1:0.001:1; xf = 0.25*a*sinc(f); yf = -0.25*a*sinc(f); fill3(xf,f,yf,'b'); hold on; f = 9:0.001:11; xf = -0.25*a*sinc(f-10); yf = -0.25*a*sinc(f-10); fill3(xf,f,yf,'b'); grid on; axis([-0.6 0.6 -12 12 -0.6 0.6]); set(gca,'YDir','reverse'); line([0 0],[-12 12],[0 0]); figure(4); f = -11:0.001:-9; xf = -0.25*a*sinc(f+10); yf = 0.25*a*sinc(f+10); fill3(xf,f,yf,'b'); hold on; f = 9:0.001:11; xf = -0.25*a*sinc(f-10); yf = 0.25*a*sinc(f-10); fill3(xf,f,yf,'b'); hold on; f = -1:0.001:1; xf = 0.25*a*sinc(f)+0.25*a*sinc(f); yf = 0.25*a*sinc(f)-0.25*a*sinc(f); fill3(xf,f,yf,'b'); grid on; set(gca,'YDir','reverse'); axis([-0.6 0.6 -12 12 -0.6 0.6]); line([0 0],[-12 12],[0 0]);
我們最后得到的頻譜是:

再經(jīng)過(guò)低通濾波器濾去高頻分量,就可以得到-Q信號了。最后再取個(gè)負,我們就正式完成了I, Q的解調了!
聯(lián)系客服