前言
Matlab系列之信号调制
本来是打算弄下simulink的,但是吧,考虑了下大概的使用情况,会有挺多部分和之前的system generator系列相重,就不写了(主要还是懒~),打算接下来几篇开始对Matlab进行一些应用,比如本篇的信号调制,还有后面的信号解调以及一些图像处理的应用。
介绍
信号调制使用到的载波信号,通常可以用下方的公式表示:
s ( t ) = a ( t ) s i n ( ω t + φ ) s(t)=a(t)sin(ωt+φ) s(t)=a(t)sin(ωt+φ)
a(t)表示幅度,ω为频率,φ代表相位,所以载波信号可改变的就是该三变量,根据不同变量的改变,可以分为幅度调制、频率调制以及相位调制三大类。
更多原理性的学习可以找本通信原理的书籍看看,就不多述了。
幅度调制
BASK调制
BASK调制即二进制幅度调制又称二进制幅度键控(2ASK),设调制信号的公式为:
s ( t ) = a k c o s ( w t ) s(t)=a_kcos(wt) s(t)=akcos(wt)
公式中ak为0或1,特点::"1"码期间有等幅余弦波输出,相当与开关开通, "0"码期间无输出,相当与开关切断,因此称为幅移键控。
示例
%一秒传10bit的信号
close all
clear
t=0:1/1e3:1-1/1e3;%1s
a=randi([0,1],1,10);%10个随机数 非0即1
s=a(ceil(10*t+0.01)).*cos(2*pi*100*t);%调制信号
subplot(211)
plot(t,a(ceil(10*t+0.01)));
axis([0,1-1/1e3,-0.2,1.2]);
subplot(212)
plot(t,s);
axis([0,1-1/1e3,-1.2,1.2]);
结果
此外还可以进行频域的分析,原理如下图。
调制后的功率谱表达如下图
然后我们对示例的基带信号和调制信号进行频域的分析。
代码
%一秒传10bit的信号
close all
clear
t=0:1/1e3:1-1/1e3;%1s
%a=randi([0,1],1,10);%10个随机数 非0即1
a=[1,1,1,0,1,0,0,1,1,1];%与上面生成的保持一致
s1=a(ceil(10*t+0.01));%基带信号
s2=s1.*cos(2*pi*100*t);%调制信号
%分析功率谱
L=512;%做512点的FFT
fs=1e3;
%f=fs*(0:L/2)/L;
f=(-L/2:L/2-1)*(fs/L);
%f=(0:L-1)*(1e3/L);
S1=fftshift(fft(s1,L));
S2=fftshift(fft(s2,L));
P1=abs(S1).^2/L;
P2=abs(S2).^2/L;
subplot(211)
plot(f,P1)
subplot(212)
plot(f,P2)
结果
可以从结果很明显的看出来,基带信号被搬移到了载波频率处(100Hz)。
MASK调制
BASK是输入的二进制比特流的调制,而MASK则是输入M进制比特流的幅度调制,M=2N,其中N≥2,N代表同时发送的比特数,假设N=2,则以2bit为一组同时发送,同组的比特则称为一个码元;MASK对应的振幅值A表达式为:
A = ( 2 m + 1 − M ) ∗ d , m = 0 , . . .