【Matlab】BFSK的調製與解調模擬

是阿夢呀發表於2021-05-19

寫在前面

本篇是【Matlab】BASK的調製與解調模擬的下篇,考慮到閱讀體驗,故另開一篇分享將BFSK的調製與解調模擬。

索引

  • 寫在前面
  • 一、BFSK的調製
    • 1.1 異頻載波生成
    • 1.2 訊號合併
    • 1.3 波形預覽
    • 1.4 引數設定(參考)
  • 二、BFSK的解調
    • 2.1 模型搭建
    • 2.2 波形預覽
    • 2.3 引數設定(參考)
  • 三、常見問題
  • 寫在最後

一、BFSK的調製

一個FSK訊號可以看成是兩個不同載波的BASK訊號的疊加,BFSK訊號的頻譜可以看成是\(f_1\)\(f_2\)兩個BASK頻譜的組合。

頻移鍵控是利用載波的頻率來傳遞數字訊號,在BFSK中,載波的頻率隨著二進位制基帶訊號在\(f_1\)\(f_2\)兩個頻率點間變化,頻移鍵控是利用載波的頻移變化來傳遞數字資訊的。故其表示式為:

\[e_{BFSK}(t)= \begin{cases} A\cos{(\omega_1t+\phi_n)}\\ A\cos{(\omega_2t+\theta_n)}\\ \end{cases} \]

BFSK的調製方式有兩種,即模擬調頻法和鍵控法。本篇使用鍵控法,通過Simulink進行模擬。鍵控法的原理圖如下圖所示:

【Matlab】BFSK的調製與解調模擬
下面我們使用Matlab/Simulink進行模型的分步實現。

1.1 異頻載波生成

根據BFSK訊號表示式可知,我們需要準備兩個不同頻率的載波。為了生成異頻載波,我們將BASK調製模型中的Signal Geneator替換成Sine Wave。另外,為了體現01訊號的特點,需要使曼徹斯特碼的其中一個通道經過非門NOT,再通過乘法器。

【Matlab】BFSK的調製與解調模擬
上圖中,通過Product 0b生成的訊號代表二進位制0的載波,通過Product 1b生成的訊號代表二進位制1的載波。Scope的波形圖如下圖所示:
【Matlab】BFSK的調製與解調模擬

1.2 訊號合併

觀察1.1中的波形圖,我們很容易的得出一個結論:BFSK調製訊號由0編碼BFSK調製訊號和1編碼BFSK調製訊號加和而得。因此我們讓兩個異頻載波經過Sum即可得到完整的BFSK調製訊號。
為了模型的可視性,我將0編碼BFSK調製訊號和1編碼BFSK調製訊號進行封裝。

【Matlab】BFSK的調製與解調模擬

1.3 波形預覽

使用Scope模組,我們可以觀察到各個階段中訊號的波形。將曼徹斯特碼和BFSK調製訊號連線到示波器,我們可以觀察到下圖:

【Matlab】BFSK的調製與解調模擬

1.4 引數設定(參考)

我們可以調節各模組的引數來控制BFSK調製訊號的形狀,下面給出各模組的參考引數:

模組名 引數 設定值
Pulse Generator Period (secs) 1
Pulse Width (% of period) 50
Sine Wave 0b Frequency (rad/sec) 12*pi
Sine Wave 1b Frequency (rad/sec) 24*pi

注:未列出的模組引數按預設處理。


二、BFSK的調製

BFSK的解調方式有兩種,即相干解調和非相干解調。本篇使用相干解調,通過Simulink進行模擬。相干解調的原理圖如下圖所示:

graph LR Input["BFSK訊號輸入"] BandpassFilter0b["帶通濾波器0b"] BandpassFilter1b["帶通濾波器1b"] Product1["相乘器"] Product2["相乘器"] LowpassFilter1["低通濾波器"] LowpassFilter2["低通濾波器"] SamplingDecimator["抽樣判決器"] SamplingPulse["抽樣脈衝"] Cosine0b["Cosine Wave 0b"] Cosine1b["Cosine Wave 1b"] Output["BFSK解調訊號輸出"] Input --> BandpassFilter0b --> Product1 --> LowpassFilter1 --> SamplingDecimator --> Output Input --> BandpassFilter1b --> Product2 --> LowpassFilter2 --> SamplingDecimator SamplingPulse --> SamplingDecimator Cosine0b --> Product1 Cosine1b --> Product2

下面我們使用Matlab/Simulink進行模型的分步實現。

2.1 模型搭建

在Simulink中,我們可以用Analog Filter Design來代替帶通濾波器和低通濾波器,用Sine Wave輸出同頻解調載波,用GreaterThanOrEqual代替抽樣判決器和抽樣脈衝。具體模型如下:

【Matlab】BFSK的調製與解調模擬

2.2 波形預覽

使用Scope模組,我們可以觀察到各個階段中訊號的波形。將曼徹斯特碼、BFSK調製訊號和BFSK解調訊號連線到示波器,我們可以觀察到下圖:

【Matlab】BFSK的調製與解調模擬

2.3 引數設定(參考)

下面給出各模組的參考引數:

模組名 自定義名稱 引數 設定值
Analog Filter Design Bandpass Filter 0b Filter type Bandpass
Lower passband edge frequency (rad/s) 12*pi-20
Upper passband edge frequency (rad/s) 12*pi+20
Bandpass Filter 1b Filter type Bandpass
Lower passband edge frequency (rad/s) 24*pi-20
Upper passband edge frequency (rad/s) 24*pi+20
Lowpass Filter 0b Passband edge frequency (rad/s) 10*pi
Lowpass Filter 1b Passband edge frequency (rad/s) 23*pi
Sine Wave Sine Wave Frequency (rad/sec) 12*pi
Sine Wave1 Frequency (rad/sec) 24*pi
GreaterThanOrEqual GreaterThanOrEqual Relational operator <

注:未列出的模組引數按預設處理。


三、常見問題

Q:模擬過程中遇到正弦波畸變(包括幅度和形狀),該怎麼處理?
A:若在模擬過程中遇到正弦波畸變(包括幅度和形狀),可以在Simulink工程空白處右鍵,選擇Model Configuration Parameters,進入頁面後,在選項卡Solver -> Solver details中進行如下引數設定:

引數 設定值
Max step size 1e-5
Relative tolerance 1e-5

.


寫在最後

這幾周實在是太忙啦,隔了一天才把這一篇寫完,不過還是趕在週四前寫好了Orz
希望本篇隨筆和姊妹篇能夠對大家有所幫助~

相關文章