Matlab實現模擬調製與解調
本文會介紹簡單的模擬調製解調方法,涉及AM、DSB、SSB,但沒有VSB,VSB相關的資料會在後文附上。
幅度調製
幅度調製原理
幅度調製是由調製訊號去控制高頻載波的幅度,使之隨調製訊號作線性變化的過程
簡單的說,幅度調製的作用就是使得載波的幅度承載資訊。
設正弦型載波為:
式中:A為載波幅度,ω為載波角頻率,φ為載波初始相位
幅度已調訊號一般可表示為:
式中:m(t)為基帶調製訊號
設m(t)的頻譜為M(ω),則s(t)的頻譜為:
從頻域表示式可以看出,幅度調製訊號為調製訊號在頻域上的線性搬移。不過實際上,任何一種調製都是非線性的。
調幅(AM)
調幅的時域表示式為:
式中:A0為外加直流分量,Ac為載波訊號的最大幅值,Ka為調製度
matlab實現過程如下:
生成調製訊號
A0 = 0.1;
Ka = 0.5;
Fs = 300;
% Modulating signal
Am = 1;
fa = 10;
Ts = 1/Fs;
t = 0:Ts:1-Ts;
ym = Am*sin(2*pi*fa*t);
figure(1);
subplot(3,2,1);
plot(t,ym);
title('Modulating signal');
[YfreqDomain,frequencyRange] = centeredFFT(ym,Fs);
subplot(3,2,2)
stem(frequencyRange,abs(YfreqDomain));
生成載波訊號
%Carrier signal
Ac = 1;
fc = fa*10;
Tc = 1/fc;
yc = Ac*sin(2*pi*fc*t);
subplot(3,2,3);
plot(t,yc);
title('Carrier signal');
[YfreqDomain,frequencyRange] = centeredFFT(yc,Fs);
subplot(3,2,4)
stem(frequencyRange,abs(YfreqDomain));
生成已調訊號
%AM Modulation
y = Ac*(A0 + Ka*ym).*yc;
subplot(3,2,5);
plot(t,y);
title ( 'Amplitude Modulated signal');
[YfreqDomain,frequencyRange] = centeredFFT(y,Fs);
subplot(3,2,6)
stem(frequencyRange,abs(YfreqDomain));
滿調製的效果如下:
通過調節Ka的值,可以控制調製深度
Ka<1時為欠調製,效果如下:
Ka小於1
Ka>1時為過調製,效果如下:
Ka大於1
雙邊帶調製(DSB)
在幅度調製中,載波分量並不攜帶資訊。為了提高效率,將AM調製的A0去掉,同時也可以減小功率,從而得到雙邊帶調製。
其時域表示式為:
matlab實現過程如下:
調製訊號和載波訊號用前面給出的,以下是已調訊號:
y = ym.*yc;
subplot(3,2,5);
plot(t,y);
title ( 'Double-sideband Modulated signal');
[YfreqDomain,frequencyRange] = centeredFFT(y,Fs);
subplot(3,2,6)
stem(frequencyRange,abs(YfreqDomain));
axis([-(fc+fa+5) +(fc+fa+5) 0 0.3]);
title ( 'Frequency of double-sideband Modulated signal');
效果如下:
單邊帶調製(SSB)
注意看就會發現,DSB的頻譜上邊帶和下邊帶是一樣的,完全可以去掉其中一個邊帶,這樣可以節省一半的頻寬,這種調製方式就是單邊帶調製。
一想到要去掉一個邊帶,自然就會想到使用濾波的方法。
頻域表示式為:
matlab實現為:
y = ym.*yc;
Hd = getHighPassFilter;
y = filter(Hd,y);
subplot(3,2,5);
plot(t,y);
title ( 'Single-sideband Modulated signal');
[YfreqDomain,frequencyRange] = centeredFFT(y,Fs);
subplot(3,2,6)
stem(frequencyRange,abs(YfreqDomain));
axis([-(fc+fa+5) +(fc+fa+5) 0 0.3]);
title ( 'Frequency of single-sideband Modulated signal');
濾波器的實現如下:
function Hd = getHighPassFilter
%GETFILTER Returns a discrete-time filter object.
% MATLAB Code
% Generated by MATLAB(R) 9.4 and DSP System Toolbox 9.6.
% Generated on: 27-Aug-2018 17:17:35
Fstop = 100; % Stopband Frequency
Fpass = 108; % Passband Frequency
Astop = 60; % Stopband Attenuation (dB)
Apass = 1; % Passband Ripple (dB)
Fs = 300; % Sampling Frequency
h = fdesign.highpass('fst,fp,ast,ap', Fstop, Fpass, Astop, Apass, Fs);
Hd = design(h, 'kaiserwin', ...
'MinOrder', 'any');
效果如下:
殘留邊帶調製(VSB)
VSB調製有點複雜,實現的過程我還是不太清楚,只知道大致的作用。
雖然SSB在一般情況下是沒有問題的,但是當調製訊號頻率較低(比如模擬電視訊號),上邊帶和下邊帶頻率會在載波頻率重合,這種情況下設計一個直接隔離這兩條邊帶的濾波器是基本不可能的(濾波器的歸一化值不能小於0.01,假設目標頻率為6MHz,那麼過渡帶最少就需要600Hz),從而會導致訊號丟失一些資訊。
在參考資料中有提供VSB的詳細文件介紹
幅度解調
解調有兩種方法:相干解調和非相干解調(包絡檢波)
相干解調
相干解調原理很簡單,就是將搬移後的已調波頻譜再搬移回去。
這就需要一個與傳送已調波載波訊號同頻同向的本地載波,它與接收的已調訊號相乘後,經過低通濾波後就得到原始基帶訊號。
已調訊號一般時域表示式為:
與本地載波相乘後得到:
經過一個低通濾波器濾除ω載波分量後,就可以得到原始基帶訊號。
AM解調
matlab實現如下:
% AM Demodulation
figure;
sd = y.*yc*2 - A0;
H_am = demod_filter;
sd = filter(H_am,sd);
plot(t,sd);
title('Demodulated and true message signals for AM');
濾波器實現如下:
function Hd = demod_filter
%GETFILTER Returns a discrete-time filter object.
% MATLAB Code
% Generated by MATLAB(R) 9.4 and DSP System Toolbox 9.6.
% Generated on: 29-Aug-2018 20:44:14
Fpass = 10; % Passband Frequency
Fstop = 90; % Stopband Frequency
Apass = 1; % Passband Ripple (dB)
Astop = 60; % Stopband Attenuation (dB)
Fs = 300; % Sampling Frequency
h = fdesign.lowpass('fp,fst,ap,ast', Fpass, Fstop, Apass, Astop, Fs);
Hd = design(h, 'kaiserwin', ...
'MinOrder', 'any');
效果如下:
DSB解調
DSB解調方法和AM解調一樣,就不貼程式碼了
效果如下:
SSB解調
SSB的解調需要注意的是,由於削去了一半的訊號,所以解調出來的訊號不再是原始基帶訊號的一半幅度,而是四分之一,從時域表示式也可以看得出。
SSB的時域表示式為:
因此matlab實現需要稍作修改:
% SSB Demodulation
figure;
sd = y.*yc*4;
H_am = demod_filter;
sd = filter(H_am,sd);
plot(t,sd);
title('Demodulated and true message signals for SSB');
效果如下:
所有程式碼已上傳Github
https://github.com/greedyhao/Wireless/blob/master/ana_mod_demod/ana_mod_demod.m
複製連結到瀏覽器可以下載程式碼
網上某位大神給的模擬調製解調的實現
https://www.colorado.edu/ECE/ecen4242/linmod2.m
他做了GUI,而且他的濾波器是用模擬濾波器,比我對模擬調製解調友好一些(畢竟是模擬的嘛),我用數字濾波器做完後才反應過來,我是對訊號取樣後用數字濾波器處理的。
參考資料
-
《通訊原理》樊昌信 第七版
相關文章
- 【Matlab】BFSK的調製與解調模擬Matlab
- 【Matlab】BASK的除錯與解調模擬Matlab除錯
- 正交幅度調製(QAM)訊號的產生與解調介紹及matlab實現Matlab
- 基於星座圖整形方法的QAM調製解調系統MATLAB誤位元速率模擬,對比16,32,64,256四種QAM調製方式Matlab
- 基於CNN卷積神經網路的MQAM調製識別matlab模擬CNN卷積神經網路MQMatlab
- 雷達原理--線性調頻訊號的MATLAB模擬Matlab
- matlab實現調整圖片的對比度Matlab
- 基於BP神經網路的64QAM解調演算法matlab效能模擬神經網路演算法Matlab
- 基於BP神經網路的16QAM解調演算法matlab效能模擬神經網路演算法Matlab
- 編碼與調製
- 基於FPGA的MSK調製解調系統verilog開發,包含testbench,同步模組,高斯通道模擬模組,誤位元速率統計模組FPGA
- 12.3 實現模擬滑鼠錄製回放
- Android模擬器繪製實現概述Android
- 《沙盤模擬系列》JVM如何調優JVM
- WebView詳解與簡單實現Android與H5互調WebViewAndroidH5
- 無線通訊中的IQ調製,BPSK調製,QPSK調製,16QAM調製的理解
- 2ASK調製解調的VERILOG程式程式碼
- 基於A律壓縮的PCM脈衝編碼調製通訊系統simulink建模與模擬
- 基於MATLAB的指紋識別演算法模擬實現Matlab演算法
- win10如何解決調變解調器出現錯誤 寬頻調變解調器連線出現問題Win10
- 簡單實現.NET Hook與事件模擬Hook事件
- Vue響應式原理與模擬實現Vue
- Web 魔方模擬器的設計與實現Web
- 基於FPGA的BPSK調製解調系統,包含testbench,高斯通道模組,誤位元速率統計模組,可以設定不同SNRFPGA
- 詳解 new/bind/apply/call 的模擬實現APP
- promise的模擬實現Promise
- 人工智慧語音機器人如何完美模模擬人語調?人工智慧機器人
- 基於FPGA的QPSK調製+軟解調系統,包含testbench,高斯通道模組,誤位元速率統計模組,可以設定不同SNRFPGA
- PB 級大規模 Elasticsearch 叢集運維與調優實踐Elasticsearch運維
- 基於圓柱體鏡子和光線跟蹤實現鏡反射觀測全景觀圖的matlab模擬模擬反射Matlab
- 基於FPGA的2ASK調製解調系統,包含testbench,高斯通道模組,誤位元速率統計模組,可以設定不同SNRFPGA
- 基於FPGA的2FSK調製解調系統,包含testbench,高斯通道模組,誤位元速率統計模組,可以設定不同SNRFPGA
- Maven 原始碼解析:依賴調解是如何實現的?Maven原始碼
- 【原始碼】使用MATLAB進行ECG模擬原始碼Matlab
- JVM效能調優與實戰篇JVM
- 關於WiFi協議的調製方式詳解WiFi協議
- bind,call,apply模擬實現APP
- 【Java】——模擬登入實現Java