二进制数字调制

        数字调制最简单的情况是二进制调制,即调制信号是二进制数字信号。在二进制数字调制

中,载波的幅度、频率或相位只有两种变化状态。

        接下来将介绍二进制幅度键控、二进制频移键控、二进制相移键控、二进制差分相移键控。

一、二进制幅度键控(2ASK)

        2ASK信号是其他数字调制的基础,早期用于无线电报,由于抗噪声性能差现在已较少使用。

1、调制

        在幅度键控中,载波的幅度随着数字信号1和0在两个电平之间转换。二进制幅度键控

(2ASK)最简单的形式是OOK(通-断键控),即载波在数字信号1或0的控制下通或断。

        ook信号时域表达式:

                                        

        2ASK信号可以表示为单极性脉冲序列与正弦型载波相乘。2ASK信号是双边带调幅信号。

                             

扫描二维码关注公众号,回复: 17288367 查看本文章

代码:

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;

猜你喜欢

转载自blog.csdn.net/chenhuifei/article/details/134050000