二进制数字调制
数字调制最简单的情况是二进制调制,即调制信号是二进制数字信号。在二进制数字调制
中,载波的幅度、频率或相位只有两种变化状态。
接下来将介绍二进制幅度键控、二进制频移键控、二进制相移键控、二进制差分相移键控。
一、二进制幅度键控(2ASK)
2ASK信号是其他数字调制的基础,早期用于无线电报,由于抗噪声性能差现在已较少使用。
1、调制
在幅度键控中,载波的幅度随着数字信号1和0在两个电平之间转换。二进制幅度键控
(2ASK)最简单的形式是OOK(通-断键控),即载波在数字信号1或0的控制下通或断。
ook信号时域表达式:
2ASK信号可以表示为单极性脉冲序列与正弦型载波相乘。2ASK信号是双边带调幅信号。
代码:
clc
clear
% 定义时间范围和采样频率
T = 1; % 每个比特的持续时间为1秒
fs = 1000; % 采样频率为1000 Hz
t = 0:1/fs:T*7-1/fs; % 时间范围从0到7秒,以一个周期为跨度
% 生成基带信号
binary_seq = [1 0 1 1 0 0 1]; % 二进制序列
baseband_signal = []
for i = 1:length(binary_seq)
baseband_signal = [baseband_signal ones(1, fs*T) * binary_seq(i)]; % 连接基带信号
end
% 生成载波信号
fc = 5; % 载波频率为10 Hz
carrier_signal = sin(2*pi*fc*t); % 生成正弦波信号 sin(wt)=sin(2pi/T *t)=sin(2*pi*fc*t)
% OOK调制
ook_signal = baseband_signal .* carrier_signal;
2、解调
2ASK信号有包络解调和相干解调两种方式。由于被传输的是信号1和0,因此在每个码元间隔
内,对低通滤波器的输出还有经抽样判决电路做一次判决,对恢复出的基带信号进行整型,提高输
出信号的质量。相干解调需要在接收端产生一个本地的相关载波,由于设备复杂所以在ASK系统中
很少使用。
2.1 包络解调
步骤:带通滤波器--->全波整流器--->低通滤波器--->抽样判决器--->输出
1、带通滤波器
带通滤波器是一种具有一个上限频率和一个下限频率的滤波器。根据其中心频率和带宽的设
置,将特定频率范围内的信号通过,而抑制其他频率范围的信号。当2ASK信号经过带通滤波器
时,可以有效地滤除不需要的噪声或其他干扰信号,从而提高接收信号的质量和可靠性。
2、全波整流器
经过带通滤波器的2ASK信号再经过全波整流器时,全波整流器会将输入信号的负半周期部分
转换为正半周期部分,这样可以使信号的能量更加集中,消除了负半周期的信息漂移,使信号更容
易被正确解读和处理,从而进一步增强信号的可靠性和准确性。
3、低通滤波器
全波整流器将2ASK信号的所有负半周期转换为正半周期,得到一个包含了两倍信号频谱的波
形。然而,这种波形包含了很多高频成分,这些高频成分可能是噪声或其他干扰。通过经过低通滤
波器处理,只有较低频率成分能够通过滤波器,而高频成分则被抑制或削弱。
低通滤波器的作用是对信号进行平滑和去噪,去除高频噪声成分,使得信号更加平稳和可
靠。它可以帮助提高信号的信噪比,并减少不必要的频率成分对后续信号处理和解码的影响。
4、抽样判决器
抽样判决器将经过低通滤波器处理后的信号进行离散化,即将连续时间的信号转换为一系列
离散时间的采样点。在每个采样点上,判决器会根据预定的阈值或决策规则,将该点判定为特定的
离散值(例如二进制的0或1)。这样完成后,我们就得到了一个离散的数字信号序列。
5、输出
代码:
%**************包络解调*********************
%带通滤波器设计
fcutoff = 2; % 滤波器截止频率
fspan = 2; % 滤波器频带宽度
f1 = fc - fspan/2; % 滤波器的下限频率 2-1=1
f2 = fc + fspan/2; % 滤波器的上限频率 2+1=3
[b, a] = butter(2, [f1, f2]/(fs/2)); % 2阶巴特沃斯滤波器设计 butter(滤波器的阶数,滤波器的截至频率)
% 带通滤波器处理
filtered_signal = filter(b, a, ook_signal);
% 全波整流
rectified_signal = abs(filtered_signal);
% 低通滤波器设计
fcutoff_lp = 10; % 滤波器截止频率
[b_lp, a_lp] = butter(2, fcutoff_lp/(fs/2)); % 2阶巴特沃斯低通滤波器设计
% 过低通滤波器
filtered_signal_lp = filter(b_lp, a_lp, rectified_signal);
% 抽样判决器
threshold = 0.5; % 阈值
sampled_signal = filtered_signal_lp > threshold;
2.2 相干解调
步骤:带通滤波器--->相乘器--->低通滤波器--->抽样判决器--->输出
相乘器:
简单来说需要提供一个参考信号与经过带通滤波器的2ASK信号相乘。这个参考信号通常为正
弦型函数,且参考信号应于信号具有相同频率和相位。由于2ASK信号是一种调幅信号,其信息编
码在振幅中。通过将2ASK信号与参考信号相乘,可以将原始信号的振幅信息提取出来并放大。
代码:
%*****************相干解调*******************************
%相乘器
multiplied_signal = filtered_signal .* sin(2*pi*fc*t)
% 低通滤波器设计
fcutoff_lp = 10; % 滤波器截止频率
[b_lp, a_lp] = butter(2, fcutoff_lp/(fs/2)); % 2阶巴特沃斯低通滤波器设计
% 过低通滤波器
filtered_signal_lp_1 = filter(b_lp, a_lp, multiplied_signal);
% 抽样判决器
threshold_1 = 0.5; % 阈值
sampled_signal_1 = filtered_signal_lp_1 > threshold_1;
3、2ASK总体实现效果:
二、二进制频移键控(2FSK)
1、调制
频移键控是利用载波的频率变化来传递数字信息。在二进制情况下,1对应与载波频率f1,0
对应于载波频率f2。二进制频移键控(2FSK)如同两个不同频率交替发送的ASK信号,因此时域
表达式:
在最简单最常用的情况下,g(t)为单个矩形脉冲。2FSK信号的波形可分解为如下图所示:
代码如下:
% 定义时间范围和采样频率
T = 1; % 每个比特的持续时间为1秒
fs = 1000; % 采样频率为1000 Hz
t = 0:1/fs:T*5-1/fs; % 时间范围从0到7秒,以一个周期为跨度
% 生成基带信号
binary_seq = [0 1 1 0 1]; % 二进制序列
baseband_signal = [];
for i = 1:length(binary_seq)
baseband_signal = [baseband_signal ones(1, fs*T) * binary_seq(i)]; % 连接基带信号
end
% 生成载波信号
%载波信号1
fc = [0 10 10 0 10]; % 载波频率
carrier_signal_1 = [];
for i = 1:5
t_period = t((i-1)*fs*T+1:i*fs*T);
carrier_signal_1 = [carrier_signal_1 sin(2*pi*fc(i)*t_period)];
end
%载波信号2
fc = [20 0 0 20 0]; % 载波频率
carrier_signal_2 = [];
for i = 1:5
t_period = t((i-1)*fs*T+1:i*fs*T);
carrier_signal_2 = [carrier_signal_2 sin(2*pi*fc(i)*t_period)];
end
% 2PSK信号调制
psk_signal = carrier_signal_1 + carrier_signal_2;
2、解调
2FSK的信号也有相干和非相干两种。其中过零检测法是一种常用而简便的解调方法。2FSK
信号的过零点数随不同载频而异,因而检测出过零点数就可以得到载频的差异,进一步得到调制信
号的信息。
过零检测法解调步骤:2FSK信号-->限幅-->微分-->整流-->宽脉冲发生-->低通-->输出
1、限幅
限幅可以将信号的振幅限制在一个特定的范围内,抑制干扰信号和噪声的影响,更容易地确
定信号穿越零点的时刻,有效抑制由多径传播引起的信号失真,提高解调的可靠性和稳定性。
2、微分
提取信号的边缘信息,即信号变化率较大的位置。对于2FSK信号,微分可以帮助检测到频率
转换时发生的边缘,从而准确地识别信号中的频率切换点。
3、整流
通过整流操作,可以将负半波转换为正半波,增强不同频率信号之间的幅度差异,使得频率
判决更加准确和可靠。
4、宽脉冲发生
宽脉冲发生可以还原出原始调制信号的大致形状。
5、低通
平滑信号的幅度包络,去除高频噪声和快速变化的成分。
6、输出
三、 二进制相移监控(2PSK)
1、调制
二进制相移键控(2PSK)是用二进制数字信号控制载波的两个相位,这两个相位通常相隔
Π,例如用相位0和Π分别表示1和0,所以这种调制又称为二相相移键控(BPSK)。二进制相移键
控信号的时域表达式为:
看到这里大家会发现和2ASK的时域表达式很相像,它们的表达式在形式上是相同的,其区别
在于,2PSK信号是双极性序列的双边带调制,而2ASK信号是单极性脉冲序列的双边带调制。简单来说,在2ASK中,an的取值为1和0,而在2PSK中,an的取值为1和-1。
代码如下:
% 生成基带信号
binary_seq = [1 0 1 1 0 0 1]; % 二进制序列
baseband_signal = [];
for i = 1:length(binary_seq)
baseband_signal = [baseband_signal ones(1, fs*T) * binary_seq(i)]; % 连接基带信号
end
% 生成载波信号
%载波信号1
fc = [5 0 5 5 0 0 5]; % 载波频率
carrier_signal_1 = [];
for i = 1:7
t_period = t((i-1)*fs*T+1:i*fs*T);
carrier_signal_1 = [carrier_signal_1 sin(2*pi*fc(i)*t_period)];
end
%载波信号2
fc = [0 -5 0 0 -5 -5 0]; % 载波频率
carrier_signal_2 = [];
for i = 1:7
t_period = t((i-1)*fs*T+1:i*fs*T);
carrier_signal_2 = [carrier_signal_2 sin(2*pi*fc(i)*t_period)];
end
% 2PSK信号调制
psk_signal = carrier_signal_1 + carrier_signal_2;
2、解调
由于PSK信号的功率谱中无载波分量,所以必须采用相干解调的方式。在相干解调中,如何
获得同频同相的载波是一个关键问题。只有对PSK信号进行非线性变换,才能产生载波分量。常用
的载波恢复电路有两种:平方环电路和科斯塔斯环电路,均为锁相环。但使用锁相环恢复出来的本
地载波与所需要的相干载波可能同相,也可能反相。这种相位的不确定性称为0,Π相位模糊度,
是不可避免的共同问题。
本地载波相位fc1:
本地载波相位fc2:
代码如下:
%解调
%本地载波恢复
%fc = [5 5 5 5 5 5 5]; % 载波频率1
fc = [-5 -5 -5 -5 -5 -5 -5]; % 载波频率2
carrier_signal = [];
for i = 1:7
t_period = t((i-1)*fs*T+1:i*fs*T);
carrier_signal = [carrier_signal sin(2*pi*fc(i)*t_period)];
end
%相乘器
multi_signals = carrier_signal.*psk_signal
%低通
% 低通滤波器设计
fcutoff_lp = 10; % 滤波器截止频率
[b_lp, a_lp] = butter(2, fcutoff_lp/(fs/2)); % 2阶巴特沃斯低通滤波器设计
% 过低通滤波器
filtered_signal_lp = filter(b_lp, a_lp, multi_signals);
% 抽样判决器
threshold = 0; % 阈值
sampled_signal = filtered_signal_lp > threshold;
四、二进制差分相移键控(2DPSK)
一、调制
在2PSK信号中,相位变化是以未调载波的相位作为参考基准的。由于是利用载波相位的绝对
数值传送数字信息,因而称为绝对调相。而利用载波相位的相对数值传送信息,也就是利用前后码
元之间载波相位的变化来表示数字基带信号的方法,称为相对调相。
相对调相信号的产生过程是,首先对数字基带信号进行差分编码,即由绝对码变成相对码,
然后再进行绝对调相。基于这种形成过程,二相对调相信号称为二进制差分相移键控信号
(2DPSK)信号。
差分码编码规则有两种,即传号差分码和空号差分码。传号差分码的编码规则:
在使用传号差分码的条件下,载波相位遇1变而遇0不变。
代码:
%绝对码
absolute_signal = []
for i =1:length(absolute_code)
absolute_signal = [absolute_signal ones(1, fs*T) * absolute_code(i)]
end
%相对码
relative_code = []
relative_signal = [];
previous_bit = 0; % 初始值为0,用于表示前一个比特的数值
for i = 1:length(absolute_code)
if absolute_code(i) == previous_bit
bit_value = 0; % 当前位与前一位异或运算,相同为0,不同为1
else
bit_value = 1;
end
relative_code = [relative_code bit_value]
relative_signal = [relative_signal bit_value*ones(1,fs*T)];
previous_bit = bit_value; % 更新前一位比特的数值
end
%2DPSK信号
DPSK_signal = []
for i = 1:length(relative_code)
t_period = t((i-1)*fs*T+1:i*fs*T);
if relative_code(i) == 1
fc = 5
else
fc = -5
end
DPSK_signal = [DPSK_signal sin(2*pi*fc*t_period)];
end
二、解调
2DPSK信号的解调可以参考2PSK信号,另一种解调方法是差分相干解调。这种方法解调时不
需要恢复本地载波,只需由收到的信号单独完成。将DPSK信号延时一个码元间隔T,然后与DPSK
本身相乘。相乘器起相位比较的作用,相乘结果经低通滤波后再抽样判决,即可恢复出原始数字信
息。差分相干解调又称延迟解调,只有DPSK信号才能采用这种方法解调。
代码:
%解调
%延迟Ts
relative_Ts_code = [0]
for i =1:length(relative_code)
relative_Ts_code = [relative_Ts_code relative_code(i)]
end
%2DPSK信号延迟
t1 = 0:1/fs:T*9-1/fs;
DPSK_Ts_signal = [zeros(1,fs*T)]
for i = 2:length(relative_Ts_code)
t_period = t1((i-1)*fs*T+1:i*fs*T);
if relative_Ts_code(i) == 1
fc = 5
else
fc = -5
end
DPSK_Ts_signal= [DPSK_Ts_signal sin(2*pi*fc*t_period)];
end
%相乘器
disp(length(DPSK_signal));
disp(length(DPSK_Ts_signal));
mix_signal = DPSK_signal(fs*T+1:end) .* DPSK_Ts_signal(fs*T+1:end-(fs*T));
disp(length(mix_signal));
%低通滤波器
% 低通滤波器设计
fcutoff_lp = 10; % 滤波器截止频率
[b_lp, a_lp] = butter(2, fcutoff_lp/(fs/2)); % 2阶巴特沃斯低通滤波器设计
% 过低通滤波器
filtered_signal_lp = filter(b_lp, a_lp, mix_signal);
% 抽样判决器
threshold = 0; % 阈值
sampled_signal = filtered_signal_lp < threshold;