基於jupyter notebook的python編程-----通過python編程實現通信系統的多徑仿真


對於通信傳輸,多徑傳輸一直以來都是重要且難點的內容,不僅需要考慮多徑衰落帶來的影響,還需要考慮怎麼在模擬中完成多徑的搭建模擬,本次博客,林君學長主要帶大家瞭解,如何通過python代碼實現通信系統的多徑仿真

一、多徑衰落信道簡介

1、多徑衰落信道

在無線信道中,發送和接收天線之間通常存在多於一條的信號傳播路徑。多徑的存在是因爲發射機和接收機之間建築物和其他物體的反射、繞射、散射等引起的。當信號在無線信道傳播時,多徑反射和衰減的變化將使信號經歷隨機波動。因此,無線信道的特性是不確定的、隨機變化的。

2、多徑衰落信道特點

  • 頻率選擇性衰落
  • 時間選擇性衰落

3、多徑衰落信道原理

本次博客,通過一個簡單的模擬程序來說明多徑衰落信道的特點,然後再給出多徑衰落信道的仿真方法。
1)、首先,先說一下程序模擬多徑信道的場景,如圖4-15所示
在這裏插入圖片描述
假設在一條筆直的高速公路上,一端安裝了一個固定的基站,在另一端有一面完全反射電磁波的牆面,基站距反射牆的距離爲d,移動臺距基站初始距離爲r0r_0。基站發射一個頻率爲f的正弦信號,表示爲cos(2πft)cos(2\pi ft),由於牆面的反射,移動臺可以接收到2徑信號,其中之一是從基站直接發射的信號,另一徑是從反射牆反射過來的信號。
2)、首先來看移動臺靜止的情況。顯然,從基站發出的直射信號到達移動臺需要的時間爲 r0/cr_0/c (c爲光速),從反射牆反射過來的信號到達移動臺所需要的時間爲 (2dr0)/c(2d-r_0)/c。換句話說,在時
刻t,移動臺分別接收到了從時刻 tr0/ct-r_0/c 基站發出的直射信號和從時刻 t((2dr0)/c)t-((2d-r_0)/c) 基站發出的反射信號。
3)、信號在傳播的過程中要衰減,自由空間中,電磁波功率隨距離r按平方規律衰減,相應的電場強度(接收信號電壓)隨 1/r1/r 規律衰減並且反射信號同直射信號的相位相反。所以,時刻t移動臺接收到的合成信號爲
在這裏插入圖片描述

式中,減號體現了反射信號與直射信號的相位相反

接下來,我們就通過python代碼來實現上面的原理吧!

二、python的多徑衰落信道模擬

1、在r0r_0處的信道特點

1)、python代碼如下所示:

#r0=3
import numpy as np
from numpy import random
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #顯示中文標籤
plt.rcParams['axes.unicode_minus']=False
f=1                                        #發射信號頻率
v=0                                        #移動臺速度,靜止時刻爲0
c=3e8                                      #電磁波速度,光速
r0=3                                       #移動臺距離基站的初始距離
d=10                                       #基站距離反射牆的距離
t1=np.array([])                            #時間
for i in np.arange(0.1,10+0.0001,0.0001):
    t1=np.insert(t1,len(t1),i)
E1=np.cos(2*np.pi*f*((1-v/c)*t1-r0/c))/(r0+v*t1)                 #直射徑信號
E2=np.cos(2*np.pi*f*((1+v/c)*t1+(r0-2*d)/c))/(2*d-r0-v*t1)      #反射徑信號
plt.plot(t1,E1,t1,E2,'-g',t1,E1-E2,'-r')                          #畫出直射徑信號、反射徑信號、移動臺接收的合成信號
plt.legend(["直射徑信號","反射徑信號","移動臺接收的合成信號"],loc='upper left')
plt.axis([0,10,-0.8,0.8])                                         #設置橫縱比
plt.show()

2)、模擬結果
在這裏插入圖片描述
3)、結論
上圖可以清楚地看出,即使移動臺是靜止的,由於反射徑的存在,使得接收到的合成信號最大值要小於直射徑的信號.

2、修改移動臺距離基站的位置,讓r0=9r_0=9

1)、python代碼如下所示:

#r0=9
f=1                                        #發射信號頻率
v=0                                        #移動臺速度,靜止時刻爲0
c=3e8                                      #電磁波速度,光速
r0=9                                       #移動臺距離基站的初始距離
d=10                                       #基站距離反射牆的距離
t1=np.array([])                            #時間
for i in np.arange(0.1,10+0.0001,0.0001):
    t1=np.insert(t1,len(t1),i)
E1=np.cos(2*np.pi*f*((1-v/c)*t1-r0/c))/(r0+v*t1)                 #直射徑信號
E2=np.cos(2*np.pi*f*((1+v/c)*t1+(r0-2*d)/c))/(2*d-r0-v*t1)      #反射徑信號
plt.plot(t1,E1,t1,E2,'-g',t1,E1-E2,'-r')                          #畫出直射徑信號、反射徑信號、移動臺接收的合成信號
plt.legend(["直射徑信號","反射徑信號","移動臺接收的合成信號"],loc='upper left')
plt.axis([0,10,-0.8,0.8])                                         #設置橫縱比
plt.show()

2)、模擬結果
在這裏插入圖片描述
3)、結論
從圖中可以看出,這次由於靠近反射牆的位置,直射信號要比r0=3r _0=3處弱-一些,反射信號要比r0=3r_0=3位置處的信號強一些,但移動臺接收到的合成信號更弱了,不僅要小於直射徑的信號更小於反射徑的信號

3、修改發射頻率f=108r0=3f=10^8且r_0=3

以上是發射頻率f=1的情況,發射其他頻率的信號結果會怎樣呢?修改f=108f=10^8並且r0=3r_0=3
1)、python代碼如下所示:

#f=10的8次方,r0=3
f=1e8                                      #發射信號頻率
v=0                                        #移動臺速度,靜止時刻爲0
c=3e8                                      #電磁波速度,光速
r0=3                                       #移動臺距離基站的初始距離
d=10                                       #基站距離反射牆的距離
t1=np.array([])                            #時間
for i in np.arange(0.1,10+0.0001,0.0001):
    t1=np.insert(t1,len(t1),i)
E1=np.cos(2*np.pi*f*((1-v/c)*t1-r0/c))/(r0+v*t1)                 #直射徑信號
E2=np.cos(2*np.pi*f*((1+v/c)*t1+(r0-2*d)/c))/(2*d-r0-v*t1)      #反射徑信號
plt.plot(t1,E1,t1,E2,'-g',t1,E1-E2,'-r')                          #畫出直射徑信號、反射徑信號、移動臺接收的合成信號
plt.legend(["直射徑信號","反射徑信號","移動臺接收的合成信號"],loc='upper left')
plt.axis([0,10,-0.8,0.8])                                         #設置橫縱比
plt.show()

2)、模擬結果
在這裏插入圖片描述
3)、結論
我們會發現,此時移動臺接收到的信號得到了增強;至此,可以得出結論,在同一位置, 由於反射徑信號的存在,發射不同頻率的信號時,在接收機處接收到信號有的頻率是被增強了,有的頻率是被削弱了。頻率選擇性衰落由此產生。
4)、擴展
既然有頻率選擇性衰落,自然會問,哪些頻率會被增強,哪些頻率會被削弱呢?在上面的例子中,如果f=1, 2, 3,.100, … 1000, 會發現這些頻率基本,上都是被削弱的,只有讓f充分大,如f=10", 纔會看出信號被增強了,那麼就把那些受到影響基本一致的頻率範圍稱爲相干帶寬。

4、讓移動臺以速度v=1向反射牆運動

使f=2,v=1,r0=3,d=15,t1=0.1:12:0.001f=2 ,v=1,r0=3,d=15,t1=0.1:12:0.001

1)、上面討論 了移動臺靜止的情況。現在讓移動臺向反射牆運動,速度爲v,則在時刻t,移動臺距離基站的位置r=r+vt。把最開始式中的r0r_0用r代替得:
在這裏插入圖片描述
2)、那麼通過python代碼模擬如下:

#f=2,v=1,r0=3,d=15,t1=0.1:12:0.001 
f=2                                        #發射信號頻率
v=1                                        #移動臺速度,靜止時刻爲0
c=3e8                                      #電磁波速度,光速
r0=3                                       #移動臺距離基站的初始距離
d=15                                       #基站距離反射牆的距離
t1=np.array([])                            #時間
for i in np.arange(0.1,12+0.001,0.001):
    t1=np.insert(t1,len(t1),i)
E1=np.cos(2*np.pi*f*((1-v/c)*t1-r0/c))/(r0+v*t1)                 #直射徑信號
E2=np.cos(2*np.pi*f*((1+v/c)*t1+(r0-2*d)/c))/(2*d-r0-v*t1)      #反射徑信號
plt.plot(t1,E1,t1,E2,'-g',t1,E1-E2,'-r')                          #畫出直射徑信號、反射徑信號、移動臺接收的合成信號
plt.legend(["直射徑信號","反射徑信號","移動臺接收的合成信號"],loc='upper left')
plt.axis([0,12,-0.5,0.5])                                         #設置橫縱比
plt.show()

3)、模擬結果:
在這裏插入圖片描述

5、分離出移動臺接收的合成信號

1)、分離接收合成信號python代碼如下所示:

#f=2,v=1,r0=3,t1=0.1:12:0.001時候單獨畫接收信號
f=2                                        #發射信號頻率
v=1                                        #移動臺速度,靜止時刻爲0
c=3e8                                      #電磁波速度,光速
r0=3                                       #移動臺距離基站的初始距離
d=15                                       #基站距離反射牆的距離
t1=np.array([])                            #時間
for i in np.arange(0.1,12+0.001,0.001):
    t1=np.insert(t1,len(t1),i)
E1=np.cos(2*np.pi*f*((1-v/c)*t1-r0/c))/(r0+v*t1)                 #直射徑信號
E2=np.cos(2*np.pi*f*((1+v/c)*t1+(r0-2*d)/c))/(2*d-r0-v*t1)      #反射徑信號
plt.plot(t1,E1-E2,'-r')                                           #移動臺接收的合成信號
plt.legend(["移動臺接收的合成信號"],loc='upper left')
plt.axis([0,12,-0.5,0.5])                                         #設置橫縱比
plt.show()

2)、分離結果:
在這裏插入圖片描述
3)、結論
從前面的程序中可知多徑導致了頻率選擇性。當移動臺運動起來後,發現即使同一頻率,在不同的時間點,合成信號的強度也是不一樣的。

三、多徑仿真結論

1、多徑仿真結論

1)、在數字通信中,接收端是週期性的對接收符號進行判決從而恢復信息的,1個符號脈衝的週期可大可小,因此,根據相干時間與符號脈衝週期的相對長短,可以把信道分爲慢變信道和快變信道。在上面第二張圖中,如果發送符號的週期小於1.25s,就可以認爲這是慢變信道(或者準靜態信道)
2)、無線信道大體可以分爲4種:慢變瑞利衰落信道、快變瑞利衰落信道、慢變頻率選擇性信道、快變頻率選擇性信道。
在這裏插入圖片描述

2、多徑擴展

1)、如果信道沒有頻率選擇性,則最大的時延擴展Tmax要遠遠小於符號週期T(Tmax <<T,),在這種情況下,所有的延遲多徑分量到達的時段僅爲一個符號時間的一小部分。 在這種情況下,信道可以用單一路徑來建模,輸入/輸出關係可以表示爲乘法,即:
在這裏插入圖片描述

四、Matlab多徑仿真完整代碼

林君學長同時在這裏給出Matlab的多徑仿真的一部分代碼,其他可通過以下代碼改寫

1、matlab多徑源碼如下

clear all
f=1;        %發射信號頻率
v=0;        %移動臺速度,靜止時刻爲0
c=3e8;      %電磁波速度,光速
r0=3;       %移動臺距離基站的初始距離
d=10;       %基站距離反射牆的距離
t1=0.1:0.0001:10;     %時間
E1=cos(2*pi*f*((1-v/c).*t1-r0/c))./(r0+v.*t1);    %直射徑信號
E2=cos(2*pi*f*((1+v/c)*t1+(r0-2*d)/c))./(2*d-r0-v*t1);  %反射徑信號
figure
plot(t1,E1,t1,E2,'-g',t1,E1-E2,'-r')   %移動臺接收的合成信號
legend('直射徑信號','反射徑信號','移動臺接收的合成信號')
axis([0 10 -0.8 0.8])     %設置橫縱比

以上就是本次博客的全部內容啦,通過本次博客,大家可以更好的瞭解到通信系統多徑仿真原理,同時,林君學長也希望大家能夠深入的瞭解多徑衰落應該如何降低到最低,適合我們信號傳輸的那個點,理解原理;代碼有錯誤的地方記得給林君學長留言改正。
遇到問題的小夥伴也記得評論區留言,林君學長看到會給大家回覆解答的,這個學長不太冷!

陳一月的又一天編程歲月^ _ ^

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章