概述
本文会介绍简单的模拟调制解调方法,涉及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 signalAm = 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 signalAc = 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 Modulationy = 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时为过调制,效果如下:
双边带调制(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:35Fstop = 100; % Stopband FrequencyFpass = 108; % Passband FrequencyAstop = 60; % Stopband Attenuation (dB)Apass = 1; % Passband Ripple (dB)Fs = 300; % Sampling Frequencyh = 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 Demodulationfigure;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:14Fpass = 10; % Passband FrequencyFstop = 90; % Stopband FrequencyApass = 1; % Passband Ripple (dB)Astop = 60; % Stopband Attenuation (dB)Fs = 300; % Sampling Frequencyh = 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 Demodulationfigure;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 模拟调制dsb,Matlab实现模拟调制与解调的全部内容,希望文章能够帮你解决matlab 模拟调制dsb,Matlab实现模拟调制与解调所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复