單邊帶調製(SSB調製)的理論基礎和MATLAB仿真


前言

《通訊原理》這門課程的第一次研討中,老師提供了一個關於SSB調製的研討方向。本文彙總了咱們小組準備的資料,分紅SSB的理論實現部分基於MATLAB的仿真部分兩部分,帶領你們詳細探討SSB調製過程,但願你們有所收穫。(若是各位看官發現問題,還請不吝指出,謝謝~)html


1、SSB調製的起源

1. 信號的幅度調製:

《通訊原理》(第2版)的定義:用消息信號去控制載波的瞬時幅度,使載波的幅度隨調製信號而變化。

  聽着很抽象是否是?如下是通俗易懂版本:
    無線通訊的發射端須要把信號加在一個功率很大的載波信號上,纔可以確保在很遠的地方接收到信號,這個過程能夠參考射頻傳輸加以瞭解。
網絡

2. AM和DSB-SC:

常規調幅(AM)
     時域表達式:在這裏插入圖片描述
  優勢:接收端的製造成本低(只須要使用包絡檢波電路就能夠實現);
     在須要大量接收機的時候有優點;
  缺點:調製效率不高(發送的過程當中發送了大量純載波,也就是「1」);
     抑制載波雙邊帶調製(DSB-SC):
  時域表達式:在這裏插入圖片描述
   優勢:沒有了載波「1」,傳輸效率能夠達到100%
   缺點:提升了接收端的成本(須要使用鎖相環進行相干解調);







dom

3. SSB調製:

改進:DSB-SC使用的雙邊帶調製,在頻帶資源很緊張的狀況下,傳輸雙邊帶顯然會形成資源浪費,由於根據傅里葉變換的性質,實函數(真實傳輸的信號)的正負頻率部分是共軛對稱的。函數

實現方式一:濾波法
  用濾波法產生SSB信號的原理框圖以下:


性能

    由上圖可知,邊帶濾波器有兩種,其中,Husb(w)用於剔除下邊帶,Hlsb(w)用於剔除上邊帶。spa

實現方式二:相移法(MATLAB仿真)
    用相移法產生SSB信號的原理框圖以下:


.net

2、MATLAB仿真

1.Hilbert變換的仿真:

 理論基礎部分:3d

  • 解析信號 = 原(實)信號 + j * 通過Hilbert變換以後的原信號,即:z(t) = x(t) + j * hilbert(x(t))code

  • MATLAB中的hilbert()函數獲得的是覆信號,緣由爲:hilbert()的做用是將原信號中正頻率的部分相移 -π/2,負頻率部分相移π/2,所以須要經過實部和虛部一塊兒表示信號(能夠瀏覽附錄一的圖片加以理解);orm

 關鍵代碼展現:

%%
%時域分析
ts = 0.0025;
fs = 1/ts;
N = 200;
f = 50;
k = 0:N-1;
t = k*ts;
% 結論:sin信號通過Hilbert變換後變爲cos信號
y =  sin (2* pi *f*t);
yh = hilbert(y);     % matlab函數獲得信號是合成的覆信號
yi = imag (yh);     % 虛部爲相移以後的原信號

%%
%頻域分析
y_length=length(y);
yi_length=length(yi);
NFFT_y = 2^nextpow2(y_length);
NFFT_yi = 2^nextpow2(yi_length);
F_Y_domain = (fs/2)*linspace(0,1,NFFT_y/2);  
F_YI_domain = (fs/2)*linspace(0,1,NFFT_yi/2); 
Y = fft(y,NFFT_y)/y_length;     
YI = fft(yi,NFFT_yi)/yi_length;     
Amp_Y = 2*abs(Y(1:NFFT_y/2));         
Amp_YI = 2*abs(YI(1:NFFT_yi/2)); 
ANG_Y = angle(Y(1:NFFT_y/2));  
ANG_YI = angle(YI(1:NFFT_yi/2));

 仿真結果展現:



2.「sin(t)」+"cos(t)"的仿真:(以正弦信號爲例驗證Hilbert變換)

 理論基礎部分:

  • 正弦函數的FT變換以下:

    咱們不妨作如下嘗試來驗證Hilbert變換:
     a. 對通過hilbert變換以後的正弦信號翻轉π/2(即*j),而後看這個處理以後的信號在實軸的投影,若是這個信號的投影爲0,而且它的相位譜和原信號的相位譜相同,則說明Hilbert變換確實改變了信號的相位;
     b. 看原信號和通過上述特殊處理的信號相加獲得的疊加信號的頻譜,若是在正頻率上的幅度譜是直接相加獲得的,則說明Hilbert變換確實沒有改變信號的幅度譜。



 關鍵代碼展現:

%%
%信號翻轉
y =  sin (2* pi *f*t);
yh = hilbert(y);     % matlab函數獲得信號是合成的覆信號
yi = j * imag (yh);     % *j 作翻轉

%%
%信號疊加
y_yi = y + yi;
y_yi_length=length(y_yi);
NFFT_y_yi = 2^nextpow2(y_yi_length);
F_Y_YI_domain = (fs/2)*linspace(0,1,NFFT_y_yi/2);  
Y_YI = fft(y_yi,NFFT_y_yi)/y_yi_length;     
Amp_Y_YI = 2*abs(Y_YI(1:NFFT_y_yi/2));         
ANG_Y_YI = angle(Y_YI(1:NFFT_y_yi/2));

 仿真結果展現:





3.SSB的仿真:(以理想的「u(t)-u(t-1) 」信號做爲原信號)

 理論基礎部分:

  • 本仿真過程當中採用的是剔除下邊帶SSB調幅法,即:在這裏插入圖片描述
  • 因爲MATLAB中的Hilbert()變換階數有限,因此對一個理想的窗函數進行Hilbert變換以後,得不到理想的衝擊函數,而是有必定的高度
  • 因爲Hilbert變換在頻率爲零的附近沒有定義,爲了保證幅度譜的連續性,MATLAB會強制在零頻率幅值,因此一個理想的窗函數通過Hilbert變換以後,在頻域上得不到理想的sinc函數;
  • 載波的頻率爲5000hz,因此原信號和通過了Hilbert變換以後的信號相加獲得的疊加信號的幅度譜,在5000hz的右邊(上邊帶)爲兩個信號的幅度譜直接相加,在5000hz的左邊(下邊帶)爲兩個信號的幅度譜直接相減
  • 因爲MATLAB都是使用DFT進行信號的處理,因此仿真出來的結果不會出現理想的狀況。

 關鍵代碼展現:

變量表示的意思:
y:cos載波信號;					y_h:sin載波信號;
m:原信號; 						m_h:通過Hilbert變換以後的原信號;
y_m:原信號加載在cos載波信號;	y_h_m_h:通過Hilbert變換以後的原信號加載在sin載波信號;
y_m_y_h_m_h:y_m + y_h_m_h
%%
%定義相移法中用到的載波
ts = 0.000025;
fs = 1/ts;
N_zai = 200;
f_zai = 5000;
k = 0:N_zai;
t_zai = k*ts;
%獲得cos載波信號
y =  cos (2* pi *f_zai*t_zai);
yh = hilbert(y); 
%獲得sin載波信號
y_h = imag (yh);      

%%
%原函數:使用理想的u(t)-u(t-1) (時域)
f_yuan = 50;
t = -2:1/f_yuan:2;
ut1 = stepfun(t,0);
ut2 = stepfun(t,1);
m = ut1 - ut2;
mh = hilbert(m);
m_h = imag (mh);
%原函數:使用理想的u(t)-u(t-1) (頻域)
m_length=length(m);
NFFT_m = 2^nextpow2(m_length);
F_M_domain = (fs/2)*linspace(0,1,NFFT_m/2);  
M = fft(m,NFFT_m)/m_length;  
Amp_M = 2*abs(M(1:NFFT_m/2));   
M_H = fft(m_h,NFFT_m)/m_length;  
Amp_M_H = 2*abs(M_H(1:NFFT_m/2));  

%%
%SSB的相移過程:(默認Ac=1)
y_m = m.*y;
y_h_m_h = (j*m_h).*(j*y_h);
y_m_y_h_m_h = y_m + y_h_m_h;
y_m_length=length(y_m);
y_h_m_h_length=length(y_h_m_h);
y_m_y_h_m_h_length=length(y_m_y_h_m_h);
NFFT_y_m = 2^nextpow2(y_m_length);
NFFT_y_h_m_h = 2^nextpow2(y_h_m_h_length);
NFFT_y_m_y_h_m_h = 2^nextpow2(y_m_y_h_m_h_length);
F_Y_M_domain = (fs/2)*linspace(0,1,NFFT_y_m/2);  
F_Y_H_M_H_domain = (fs/2)*linspace(0,1,NFFT_y_h_m_h/2);  
F_Y_M_Y_H_M_H_domain = (fs/2)*linspace(0,1,NFFT_y_m_y_h_m_h/2);  
Y_M = fft(y_m,NFFT_y_m)/y_m_length;  
Y_H_M_H = fft(y_h_m_h,NFFT_y_h_m_h)/y_h_m_h_length; 
Y_M_Y_H_M_H = fft(y_m_y_h_m_h,NFFT_y_m_y_h_m_h)/y_m_y_h_m_h_length; 
Amp_Y_M = 2*abs(Y_M(1:NFFT_y_m/2));   
Amp_Y_H_M_H = 2*abs(Y_H_M_H(1:NFFT_y_h_m_h/2));   
Amp_Y_M_Y_H_M_H= 2*abs(Y_M_Y_H_M_H(1:NFFT_y_m_y_h_m_h/2));  
ANG_Y_M = angle(Y_M(1:NFFT_y_m/2))*180/pi;  
ANG_Y_H_M_H = angle(Y_H_M_H(1:NFFT_y_h_m_h/2))*180/pi;  
ANG_Y_M_Y_H_M_H = angle(Y_M_Y_H_M_H(1:NFFT_y_m_y_h_m_h/2))*180/pi;

 仿真結果展現:








總結

  原信號通過Hilbert變換器獲得與原信號相位不一樣、幅值相同的新信號,而後經過一個簡單的加法器就能夠進行疊加,最後實現SSB調製。這種調製方式既可以解決AM調製效率不高的問題,又可以解決DSB-SC浪費頻帶的問題,是如今實現幅度調製比較好而且能夠調製性能比較高的調幅方式。
  最後,特別感謝通訊原理第一小組的全部組員們(因爲網絡隱私問題,這裏就不寫你們的名字了)。可以獲得最後仿真的成果,是由於你們一塊兒準備的材料,尤爲是你們彙總的PPT,能夠說,這篇文章,只是把你們彙總的PPT進行了書面的表達。因此,再次感謝你們~

引用(感謝如下做者)

文章名字 文章做者
通訊原理第一小組(研討題:31) 通訊原理第一小組全體組員
經常使用傅里葉變換對 楊老師
【 MATLAB 】sinc 函數簡介 李銳博恩
深刻淺出傅里葉變換(目前看到的講得最好的一篇文章) 聰聰那年_
希爾伯特變換(Hilbert Transform)簡介及其物理意義 江戶川柯壯

附錄:四次Hilbert變換

相關文章
相關標籤/搜索