Advertisement

信号处理基础:信号处理概述_(1).信号处理基础:信号的分类与特性

阅读量:

信号处理基础:信号的分类与特性

在前一节里, 我们就信号处理的基本概念进行了基础讲解. 本节专门阐述了信号的分类与特性, 这是掌握信号处理技术的核心内容. 通过研究这些性质, 不仅有助于我们更加深入地认识和分析各种类型的信号, 同时还能为我们选择合适的处理方法提供重要的指导依据.

在这里插入图片描述

1. 信号的分类

信号可以根据不同的特性进行分类,主要分为以下几类:

1.1 按时间特性分类

1.1.1 连续时间信号与离散时间信号

连续时间信号(Continuous-time Signal)被称为在时间轴上持续流动而不间断的变化过程,在工程学中通常以函数形式x(t)来表示。其中t为自变量代表物理意义上的时刻或位置参数等信息。该类信号能够被数学上地被视为具有无限多连续点的时间轴上的映射关系。由于其理论上的可操作性,在实际应用中其采样频率理论上可以达到任意高的数值以满足不同的精度需求和系统性能要求等特性特征

离散时间信号 (Discrete-time Signal) 被定义为在时间和幅度上均呈现离散特性的信息载体,在工程学和计算机科学领域具有重要地位,并被广泛应用于数字系统的设计与分析中。这种类型的信号通常以有序的数据序列形式存在,并且每个数据点都对应着特定的时间刻度点以及相应的数值指标值

我们可以认为存在一个连续时间信号 x(t) = \sin(2\pi t)。该连续时间信号通过采样过程被转换成离散时间序列。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 定义连续时间信号
    def continuous_signal(t):
    return np.sin(2 * np.pi * t)
    
    # 生成时间向量
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    x_t = continuous_signal(t)
    
    # 采样为离散时间信号
    fs = 100  # 采样频率为100 Hz
    n = np.arange(0, 1, 1/fs)  # 生成离散时间索引
    x_n = continuous_signal(n)
    
    # 绘制连续时间和离散时间信号
    plt.figure(figsize=(12, 6))
    plt.plot(t, x_t, label='连续时间信号', color='blue')
    plt.stem(n, x_n, label='离散时间信号', linefmt='r-', markerfmt='ro', basefmt='k-')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('连续时间信号与离散时间信号的对比')
    plt.legend()
    plt.grid(True)
    plt.show()

1.2 按幅度特性分类

1.2.1 模拟信号与数字信号

模拟信号 (Analog Signal)表示幅度在某一区间内连续变化的信号,并以函数形式表示为 x(t) 。该类信号可通过传感器进行采集处理,在工程应用中具有重要价值

数字信号(Digital Signal)是指其幅度值域内呈现分立变化特征的信号。数字信号以序列x[n]表示,并通过量化与编码过程实现了将模拟信息转换为便于存储与处理的形式。

示例 :将一个模拟信号量化为数字信号。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 定义模拟信号
    def analog_signal(t):
    return np.sin(2 * np.pi * t) + 0.5 * np.cos(4 * np.pi * t)
    
    # 生成时间向量
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    x_t = analog_signal(t)
    
    # 量化为数字信号
    bits = 8  # 量化位数
    levels = 2**bits  # 量化级别
    max_val = np.max(x_t)
    min_val = np.min(x_t)
    quantized_x_t = np.round((x_t - min_val) / (max_val - min_val) * (levels - 1))
    
    # 绘制模拟信号和数字信号
    plt.figure(figsize=(12, 6))
    plt.plot(t, x_t, label='模拟信号', color='blue')
    plt.step(t, quantized_x_t, label='数字信号', color='red', where='post')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('模拟信号与数字信号的对比')
    plt.legend()
    plt.grid(True)
    plt.show()

1.3 按信号的确定性分类

1.3.1 确定性信号与随机信号

确定性信号 (Deterministic Signal)即为能够被精确地用数学表达式或明确的规则来描述的一种特定类型的信号。其显著特征在于其波形具有完全可预知性和规律性,在工程应用中常见于如正弦振动、方形周期变化以及三角函数模式等多种形式中。

具有随机性质的信号(Random Signal)指的是其波形呈现不可预测性,并无法用明确的数学表达式来描述。它常用于表示噪声、通信等领域中的信号分析

示例 :生成一个正弦波信号和一个随机噪声信号。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 生成确定性信号(正弦波)
    def deterministic_signal(t):
    return np.sin(2 * np.pi * t)
    
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    x_t = deterministic_signal(t)
    
    # 生成随机信号(噪声)
    np.random.seed(0)  # 固定随机种子以便复现结果
    noise = np.random.normal(0, 0.1, len(t))
    
    # 绘制确定性信号和随机信号
    plt.figure(figsize=(12, 6))
    plt.plot(t, x_t, label='确定性信号', color='blue')
    plt.plot(t, noise, label='随机信号', color='red')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('确定性信号与随机信号的对比')
    plt.legend()
    plt.grid(True)
    plt.show()

1.4 按信号的周期性分类

1.4.1 周期信号与非周期信号

周期信号(Periodic Signal)被定义为一种在时间维度上呈现周期性变化特征的信号。即满足对于所有时间点t都有x(t + T) = x(t)成立的条件。常见的周期信号如正弦波、方波等典型实例所展示的。

周期信号(Periodic Signal)被定义为一种在时间维度上呈现周期性变化特征的信号。即满足对于所有时间点t都有x(t + T) = x(t)成立的条件。
常见的周期信号如正弦波、方波等典型实例所展示的。

Aperiodic Signal(非周期信号)即指在时间上不具备规律性的重复模式。这类信号通常包括脉冲序列、阶跃函数以及其他类型的瞬态波形等典型实例

示例 :生成一个周期性的正弦波信号和一个非周期性的脉冲信号。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 生成周期信号(正弦波)
    def periodic_signal(t):
    return np.sin(2 * np.pi * t)
    
    t = np.linspace(0, 2, 1000)  # 0到2秒,1000个点
    x_t_periodic = periodic_signal(t)
    
    # 生成非周期信号(脉冲信号)
    def aperiodic_signal(t):
    return np.where(t == 1, 1, 0)
    
    x_t_aperiodic = aperiodic_signal(t)
    
    # 绘制周期信号和非周期信号
    plt.figure(figsize=(12, 6))
    plt.plot(t, x_t_periodic, label='周期信号', color='blue')
    plt.plot(t, x_t_aperiodic, label='非周期信号', color='red', linestyle='--', marker='o')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('周期信号与非周期信号的对比')
    plt.legend()
    plt.grid(True)
    plt.show()

2. 信号的特性

信号的特征是表征信号的重要参数,包括大小、高低、位移、强度以及能量密度等。这些特征能够帮助我们更加有效地分析和处理信号。

2.1 幅度特性

振幅

示例 :绘制不同幅度的正弦波信号。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 生成不同幅度的正弦波信号
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    amplitudes = [0.5, 1, 1.5, 2]
    signals = [amp * np.sin(2 * np.pi * t) for amp in amplitudes]
    
    # 绘制不同幅度的正弦波信号
    plt.figure(figsize=(12, 6))
    for amp, signal in zip(amplitudes, signals):
    plt.plot(t, signal, label=f'幅度 = {amp}')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('不同幅度的正弦波信号')
    plt.legend()
    plt.grid(True)
    plt.show()

2.2 频率特性

频率(Frequency)定义为单位时间段内波形重复的次数。其特性表征了波形中的频率组成。

示例 :绘制不同频率的正弦波信号。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 生成不同频率的正弦波信号
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    frequencies = [1, 2, 3, 4]
    signals = [np.sin(2 * np.pi * f * t) for f in frequencies]
    
    # 绘制不同频率的正弦波信号
    plt.figure(figsize=(12, 6))
    for f, signal in zip(frequencies, signals):
    plt.plot(t, signal, label=f'频率 = {f} Hz')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('不同频率的正弦波信号')
    plt.legend()
    plt.grid(True)
    plt.show()

2.3 相位特性

相位(Phase)描述了信号在某一时刻相对于参考点的时间延迟或提前。相位特性表征了信号的时间变化。

示例 :绘制不同相位的正弦波信号。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 生成不同相位的正弦波信号
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    phases = [0, np.pi/4, np.pi/2, 3*np.pi/4]
    signals = [np.sin(2 * np.pi * t + phase) for phase in phases]
    
    # 绘制不同相位的正弦波信号
    plt.figure(figsize=(12, 6))
    for phase, signal in zip(phases, signals):
    plt.plot(t, signal, label=f'相位 = {phase:.2f} rad')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('不同相位的正弦波信号')
    plt.legend()
    plt.grid(True)
    plt.show()

2.4 能量与功率特性

能量(Energy)和功率(Power)分别作为表征信号强度的两大关键指标。能量等于信号在整个时间段内各瞬时值的平方和之总合,而功率则等于该信号在单位时间内所携带的能量总量。

对于离散时间信号 x[n],能量 E 和功率 P 可以表示为:

E = \sum_{n=-\infty}^{\infty} |x[n]|^2

P = \lim_{N \to \infty} \frac{1}{2N+1} \sum_{n=-N}^{N} |x[n]|^2

对于连续时间信号 x(t),能量 E 和功率 P 可以表示为:

E = \int_{-\infty}^{\infty} |x(t)|^2 \, dt

P = \lim_{T \to \infty} \frac{1}{2T} \int_{-T}^{T} |x(t)|^2 \, dt

示例 :计算和绘制不同信号的能量和功率。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 生成不同类型的信号
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    x_t_periodic = np.sin(2 * np.pi * t)  # 周期信号
    x_t_aperiodic = np.where(t == 0.5, 1, 0)  # 非周期信号
    
    # 计算能量
    E_periodic = np.sum(x_t_periodic**2)
    E_aperiodic = np.sum(x_t_aperiodic**2)
    
    # 计算功率
    P_periodic = E_periodic / len(t)
    P_aperiodic = E_aperiodic / len(t)
    
    # 绘制信号
    plt.figure(figsize=(12, 6))
    plt.plot(t, x_t_periodic, label='周期信号', color='blue')
    plt.plot(t, x_t_aperiodic, label='非周期信号', color='red', linestyle='--', marker='o')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('周期信号与非周期信号的能量和功率')
    plt.legend()
    plt.grid(True)
    plt.show()
    
    # 输出能量和功率
    print(f"周期信号的能量: {E_periodic:.2f}")
    print(f"周期信号的功率: {P_periodic:.2f}")
    print(f"非周期信号的能量: {E_aperiodic:.2f}")
    print(f"非周期信号的功率: {P_aperiodic:.2f}")

2.5 信号的频谱特性

频谱(Spectrum)是指信号在频域上的表示形式,在此过程中傅里叶变换被用来实现时域与频域之间的转换关系;其频率组成及其能量分布情况则完整地描述了信号所包含的关键信息特征。

示例 :计算和绘制正弦波信号的频谱。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 生成正弦波信号
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    x_t = np.sin(2 * np.pi * 5 * t)  # 5 Hz的正弦波
    
    # 计算频谱
    X_f = np.fft.fft(x_t)
    frequencies = np.fft.fftfreq(len(t), d=1/1000)  # 1000 Hz的采样频率
    
    # 绘制频谱
    plt.figure(figsize=(12, 6))
    plt.plot(frequencies, np.abs(X_f), label='频谱', color='blue')
    plt.xlabel('频率 (Hz)')
    plt.ylabel('幅度')
    plt.title('正弦波信号的频谱')
    plt.legend()
    plt.grid(True)
    plt.show()

2.6 信号的时域与频域特性

时域特性(Time-domain Properties)是指信号在时间上的表现(即信号的时间域特性),包括形状(波形)、大小(幅度)和频率(频率特性和振幅特性)。

频域特性 (Frequency-domain Properties)表征了信号在频域上的表现,并由傅里叶变换得出。频域特性表征了信号的频率组成及其强度。

示例 :绘制正弦波信号的时域和频域特性。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 生成正弦波信号
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    x_t = np.sin(2 * np.pi * 5 * t)  # 5 Hz的正弦波
    
    # 计算频谱
    X_f = np.fft.fft(x_t)
    frequencies = np.fft.fftfreq(len(t), d=1/1000)  # 1000 Hz的采样频率
    
    # 绘制时域和频域特性
    plt.figure(figsize=(12, 6))
    plt.subplot(2, 1, 1)
    plt.plot(t, x_t, label='时域', color='blue')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('正弦波信号的时域特性')
    plt.legend()
    plt.grid(True)
    
    plt.subplot(2, 1, 2)
    plt.plot(frequencies, np.abs(X_f), label='频域', color='red')
    plt.xlabel('频率 (Hz)')
    plt.ylabel('幅度')
    plt.title('正弦波信号的频域特性')
    plt.legend()
    plt.grid(True)
    plt.tight_layout()
    plt.show()

2.7 信号的线性与非线性特性

也被称为(被称为)Linear Signal

基于此,《非线性信号》(Nonlinear Signal)被定义为一种其特性违背了传统线性系统所依据的叠加原理与齐次性的基本假设的关键概念。这使得在复杂环境中分析和处理这类信号变得更具挑战性。而对这类信号的处理往往涉及应用专门设计的非线性系统以获得预期的结果输出

示例 :生成一个线性信号和一个非线性信号,并绘制其时域特性。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 生成线性信号
    def linear_signal(t):
    return t
    
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    x_t_linear = linear_signal(t)
    
    # 生成非线性信号
    def nonlinear_signal(t):
    return t**2
    
    x_t_nonlinear = nonlinear_signal(t)
    
    # 绘制线性信号和非线性信号
    plt.figure(figsize=(12, 6))
    plt.plot(t, x_t_linear, label='线性信号', color='blue')
    plt.plot(t, x_t_nonlinear, label='非线性信号', color='red')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('线性信号与非线性信号的对比')
    plt.legend()
    plt.grid(True)
    plt.show()

2.8 信号的相关特性

属性 (Correlation)是衡量两个信号间相似程度或相互依存关系的具体指标。这种属性在信号处理领域具有广泛应用价值,在信号检测中用于识别目标信号,在识别过程中帮助区分不同类型,并在同步环节确保信号的时间一致性。具体而言,这表示两个信号在时间或频率上的相似程度以及它们之间的相互依存关系。这一特性在信号检测中用于识别目标信号,在识别过程中帮助区分不同类型,并在同步环节确保信号的时间一致性。属性分为自属性和互属性两大类。

Autocorrelation (Autocorrelation)是一种度量工具,在信号处理领域中被广泛采用以评估信号与其自身之间的相似性。这种特性使得它成为研究信号内在规律的重要手段之一。通过自相关函数可以深入探索信号中的周期性特征及其稳定性。

互相关(Cross-correlation)定义为两个不同信号之间的相互关联程度,并用来衡量它们的相似程度。互相关函数常用于实现信号匹配和同步操作。

示例 :计算和绘制两个信号的自相关和互相关。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 生成两个信号
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    x_t = np.sin(2 * np.pi * 5 * t)  # 5 Hz的正弦波
    y_t = np.sin(2 * np.pi * 5 * t + np.pi/4)  # 5 Hz的正弦波,相位差为π/4
    
    # 计算自相关
    def autocorrelation(x):
    result = np.correlate(x, x, mode='full')
    return result[result.size // 2:]
    
    # 计算互相关
    def crosscorrelation(x, y):
    result = np.correlate(x, y, mode='full')
    return result
    
    # 计算自相关和互相关
    x_t_autocorr = autocorrelation(x_t)
    x_t_y_t_crosscorr = crosscorrelation(x_t, y_t)
    
    # 绘制自相关和互相关
    plt.figure(figsize=(12, 6))
    
    plt.subplot(2, 1, 1)
    plt.plot(x_t_autocorr, label='自相关', color='blue')
    plt.xlabel('时间延迟')
    plt.ylabel('相关值')
    plt.title('正弦波信号的自相关')
    plt.legend()
    plt.grid(True)
    
    plt.subplot(2, 1, 2)
    plt.plot(x_t_y_t_crosscorr, label='互相关', color='red')
    plt.xlabel('时间延迟')
    plt.ylabel('相关值')
    plt.title('正弦波信号与相位差信号的互相关')
    plt.legend()
    plt.grid(True)
    
    plt.tight_layout()
    plt.show()

2.9 信号的时频分析特性

时间频率分析 (Time-Frequency Analysis)被称为一种在时域与频域间进行双向解析的技术框架。这一方法论体系为我们深入解析信号随时间和频率变化的动态特征提供了强有力的工具,在处理非平稳信号方面具有突出作用。

常用的时频分析手段涵盖短时傅里叶变换(Short-Time Fourier Transform, STFT)以及小波变换(Wavelet Transform)等多种技术

示例 :使用短时傅里叶变换(STFT)分析一个非平稳信号。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.signal import stft
    
    # 生成非平稳信号
    t = np.linspace(0, 2, 2000)  # 0到2秒,2000个点
    x_t = np.sin(2 * np.pi * 5 * t) + np.sin(2 * np.pi * 10 * t) * (t < 1) + np.sin(2 * np.pi * 15 * t) * (t >= 1)
    
    # 使用STFT进行时频分析
    frequencies, times, Zxx = stft(x_t, fs=1000, nperseg=100)
    
    # 绘制时频图
    plt.figure(figsize=(12, 6))
    plt.pcolormesh(times, frequencies, np.abs(Zxx), vmin=0, vmax=10, shading='gouraud')
    plt.ylabel('频率 (Hz)')
    plt.xlabel('时间 (秒)')
    plt.title('短时傅里叶变换 (STFT) 时频图')
    plt.colorbar(label='幅度')
    plt.grid(True)
    plt.show()

2.10 信号的稳定性特性

稳定性 (Stability)表示为信号在持续过程中所展现的行为特征。稳定信号表现为其统计属性在整个持续过程中保持恒定状态,在此期间其特性不会发生显著变化。而非稳定信号则表现出其统计属性随时间的变化而不断演变的特点,在持续过程中其特性会随之调整和发展。

示例 :生成一个稳定信号和一个非稳定信号,并绘制其时域特性。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 生成稳定信号(正弦波)
    t = np.linspace(0, 2, 2000)  # 0到2秒,2000个点
    x_t_stable = np.sin(2 * np.pi * 5 * t)
    
    # 生成非稳定信号(频率随时间变化的信号)
    x_t_unstable = np.sin(2 * np.pi * (5 * t + 2 * t**2))
    
    # 绘制稳定信号和非稳定信号
    plt.figure(figsize=(12, 6))
    plt.plot(t, x_t_stable, label='稳定信号', color='blue')
    plt.plot(t, x_t_unstable, label='非稳定信号', color='red')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('稳定信号与非稳定信号的对比')
    plt.legend()
    plt.grid(True)
    plt.show()

2.11 信号的频带特性

波宽(Bandwidth)是信号在频域中所占有的频率范围。其特性和属性则明确了信号的波宽及频率分布情况。

对于一个具有有限频带的信号(Band-limited Signal),其频带范围是有限的;而在 band-pass signal 中,则表示该信号主要集中在某个特定频率区域。

示例 :生成一个带限信号和一个带通信号,并绘制其频谱。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 生成带限信号(正弦波)
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    x_t_bandlimited = np.sin(2 * np.pi * 5 * t)
    
    # 生成带通信号(两个正弦波的叠加)
    x_t_bandpass = np.sin(2 * np.pi * 10 * t) + np.sin(2 * np.pi * 15 * t)
    
    # 计算频谱
    X_f_bandlimited = np.fft.fft(x_t_bandlimited)
    X_f_bandpass = np.fft.fft(x_t_bandpass)
    frequencies = np.fft.fftfreq(len(t), d=1/1000)  # 1000 Hz的采样频率
    
    # 绘制频谱
    plt.figure(figsize=(12, 6))
    
    plt.subplot(2, 1, 1)
    plt.plot(frequencies, np.abs(X_f_bandlimited), label='带限信号', color='blue')
    plt.xlabel('频率 (Hz)')
    plt.ylabel('幅度')
    plt.title('带限信号的频谱')
    plt.legend()
    plt.grid(True)
    
    plt.subplot(2, 1, 2)
    plt.plot(frequencies, np.abs(X_f_bandpass), label='带通信号', color='red')
    plt.xlabel('频率 (Hz)')
    plt.ylabel('幅度')
    plt.title('带通信号的频谱')
    plt.legend()
    plt.grid(True)
    
    plt.tight_layout()
    plt.show()

2.12 信号的瞬时特性

瞬时属性 (Instantaneous Properties)是指信号在某一特定时刻所具有的属性特征,具体包括瞬时频率、瞬时相位以及瞬时幅度这三个基本要素。这些属性特征在对非平稳信号进行分析过程中发挥着至关重要的作用。

瞬时频率 (Instantaneous Frequency)是指信号在某一时刻的频率变化率。

瞬时相位 (Instantaneous Phase)是指信号在某一时刻的相位。

瞬时幅度 (Instantaneous Amplitude)是指信号在某一时刻的幅度。

示例 :计算和绘制一个调频信号的瞬时频率和瞬时相位。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 生成调频信号
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    x_t = np.sin(2 * np.pi * (5 * t + 2 * t**2))  # 调频信号
    
    # 计算瞬时频率
    instantaneous_frequency = np.gradient(np.unwrap(np.angle(np.fft.fft(x_t)))) / (2 * np.pi * (1/1000))
    
    # 计算瞬时相位
    instantaneous_phase = np.unwrap(np.angle(np.fft.fft(x_t)))
    
    # 绘制调频信号的瞬时频率和瞬时相位
    plt.figure(figsize=(12, 6))
    
    plt.subplot(3, 1, 1)
    plt.plot(t, x_t, label='调频信号', color='blue')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('调频信号的时域特性')
    plt.legend()
    plt.grid(True)
    
    plt.subplot(3, 1, 2)
    plt.plot(t, instantaneous_frequency, label='瞬时频率', color='green')
    plt.xlabel('时间 (秒)')
    plt.ylabel('频率 (Hz)')
    plt.title('调频信号的瞬时频率')
    plt.legend()
    plt.grid(True)
    
    plt.subplot(3, 1, 3)
    plt.plot(t, instantaneous_phase, label='瞬时相位', color='purple')
    plt.xlabel('时间 (秒)')
    plt.ylabel('相位 (rad)')
    plt.title('调频信号的瞬时相位')
    plt.legend()
    plt.grid(True)
    
    plt.tight_layout()
    plt.show()

2.13 信号的噪声特性

噪声 (Noise)是一种来自干扰源(interference source)的随机扰动项(random disturbance)。其特性表征了该扰动项的空间分布特性和能量强度特征(intensity feature)。根据其空间相关性和能量谱密度分布的不同类型可将噪声划分为高斯型随机扰动(Gaussian random disturbance)、纯随机扰动(pure random disturbance)以及相关性随机扰动(correlated random disturbance)等主要类别

示例 :生成一个带有高斯噪声的信号,并绘制其时域和频域特性。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 生成带有高斯噪声的信号
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    x_t = np.sin(2 * np.pi * 5 * t)  # 5 Hz的正弦波
    np.random.seed(0)  # 固定随机种子以便复现结果
    noise = np.random.normal(0, 0.1, len(t))  # 高斯噪声
    x_t_noisy = x_t + noise
    
    # 计算频谱
    X_f_noisy = np.fft.fft(x_t_noisy)
    frequencies = np.fft.fftfreq(len(t), d=1/1000)  # 1000 Hz的采样频率
    
    # 绘制时域和频域特性
    plt.figure(figsize=(12, 6))
    
    plt.subplot(2, 1, 1)
    plt.plot(t, x_t, label='原信号', color='blue')
    plt.plot(t, x_t_noisy, label='带噪声信号', color='red')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('原信号与带噪声信号的对比')
    plt.legend()
    plt.grid(True)
    
    plt.subplot(2, 1, 2)
    plt.plot(frequencies, np.abs(X_f_noisy), label='频谱', color='red')
    plt.xlabel('频率 (Hz)')
    plt.ylabel('幅度')
    plt.title('带噪声信号的频谱')
    plt.legend()
    plt.grid(True)
    
    plt.tight_layout()
    plt.show()

2.14 信号的同步特性

同步(Synchronization)是指两个或多个信号在时间上实现对齐的过程。这种特性对于多信号的处理与分析至关重要,并且在通信系统中扮演着关键角色。

示例 :生成两个不同时间延迟的信号,并使用互相关进行同步。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 生成两个信号
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    x_t = np.sin(2 * np.pi * 5 * t)  # 5 Hz的正弦波
    y_t = np.sin(2 * np.pi * 5 * (t - 0.2))  # 5 Hz的正弦波,延迟0.2秒
    
    # 计算互相关
    x_t_y_t_crosscorr = np.correlate(x_t, y_t, mode='full')
    lags = np.arange(-len(t) + 1, len(t))
    
    # 绘制互相关
    plt.figure(figsize=(12, 6))
    plt.plot(lags, x_t_y_t_crosscorr, label='互相关', color='blue')
    plt.xlabel('时间延迟')
    plt.ylabel('相关值')
    plt.title('两个信号的互相关')
    plt.legend()
    plt.grid(True)
    plt.show()
    
    # 找到最大相关值的延迟
    max_lag = lags[np.argmax(np.abs(x_t_y_t_crosscorr))]
    print(f"两个信号的最大时间延迟: {max_lag} 个采样点")

2.15 信号的调制特性

Modulation 是一种通过改变载波参数实现信息传递的技术手段。其在通信系统中的重要性不可忽视。常见的调制方法包括调幅(AM)、调频(FM)和调相(PM)等技术手段。

示例 :生成一个调幅信号和一个调频信号,并绘制其时域特性。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 生成调幅信号
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    carrier = np.sin(2 * np.pi * 50 * t)  # 50 Hz的载波
    modulating_signal = np.sin(2 * np.pi * 5 * t)  # 5 Hz的调制信号
    am_signal = (1 + 0.5 * modulating_signal) * carrier  # 调幅信号
    
    # 生成调频信号
    fm_signal = np.sin(2 * np.pi * (50 + 5 * np.sin(2 * np.pi * 5 * t)) * t)  # 调频信号
    
    # 绘制调幅信号和调频信号
    plt.figure(figsize=(12, 6))
    
    plt.subplot(2, 1, 1)
    plt.plot(t, am_signal, label='调幅信号', color='blue')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('调幅信号的时域特性')
    plt.legend()
    plt.grid(True)
    
    plt.subplot(2, 1, 2)
    plt.plot(t, fm_signal, label='调频信号', color='red')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('调频信号的时域特性')
    plt.legend()
    plt.grid(True)
    
    plt.tight_layout()
    plt.show()

2.16 信号的压缩与扩展特性

压缩(Compression)和扩展(Expansion)涉及对信号的时间尺度进行调整。其中压缩指的是通过调整时间轴的比例来实现对信号长度的缩减;而扩展则指的是通过拉伸时间轴的比例来实现对信号长度的拓展。

示例 :生成一个压缩和扩展的信号,并绘制其时域特性。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 生成原始信号
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    x_t = np.sin(2 * np.pi * 5 * t)  # 5 Hz的正弦波
    
    # 生成压缩信号
    t_compressed = np.linspace(0, 1, 500)  # 0到1秒,500个点
    x_t_compressed = np.sin(2 * np.pi * 5 * t_compressed)
    
    # 生成扩展信号
    t_expanded = np.linspace(0, 1, 2000)  # 0到1秒,2000个点
    x_t_expanded = np.sin(2 * np.pi * 5 * t_expanded)
    
    # 绘制原始信号、压缩信号和扩展信号
    plt.figure(figsize=(12, 6))
    
    plt.subplot(3, 1, 1)
    plt.plot(t, x_t, label='原始信号', color='blue')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('原始信号的时域特性')
    plt.legend()
    plt.grid(True)
    
    plt.subplot(3, 1, 2)
    plt.plot(t_compressed, x_t_compressed, label='压缩信号', color='green')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('压缩信号的时域特性')
    plt.legend()
    plt.grid(True)
    
    plt.subplot(3, 1, 3)
    plt.plot(t_expanded, x_t_expanded, label='扩展信号', color='purple')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('扩展信号的时域特性')
    plt.legend()
    plt.grid(True)
    
    plt.tight_layout()
    plt.show()

2.17 信号的滤波特性

Filtering (也称signal processing),是利用特定装置对输入信号进行去噪或频段选择的技术。常见的Filtering手段包括低通Filter用于抑制高频噪声、高通Filter用于增强高频信号、Band-pass Filter用于选择特定信道信息以及Band-stop Filter用于排除特定频率干扰等方法。这些技术广泛应用于通信系统、音频处理以及数据采集等领域以优化信号质量并提取有用信息。

案例研究:采用可调带宽的低通滤波器与高通滤波器对混合信号进行模拟处理,并通过时域示踪技术完成对其输出特征的记录与分析。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.signal import butter, lfilter
    
    # 生成混合信号
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    x_t = np.sin(2 * np.pi * 5 * t) + np.sin(2 * np.pi * 50 * t)  # 5 Hz和50 Hz的正弦波混合信号
    
    # 定义滤波器
    def butter_bandpass_filter(data, lowcut, highcut, fs, order=5):
    nyq = 0.5 * fs
    low = lowcut / nyq
    high = highcut / nyq
    b, a = butter(order, [low, high], btype='band')
    y = lfilter(b, a, data)
    return y
    
    def butter_lowpass_filter(data,### 2.17 信号的滤波特性
    
    **滤波**(Filtering)是指通过滤波器对信号进行处理,以去除噪声或提取特定频率成分。滤波是信号处理中的一个基本技术,广泛应用于通信、音频处理、图像处理等领域。常见的滤波器类型包括低通滤波器(Low-pass Filter)、高通滤波器(High-pass Filter)、带通滤波器(Band-pass Filter)和带阻滤波器(Band-stop Filter)等。
    
    ### 2.17.1 低通滤波器
    
    **低通滤波器**(Low-pass Filter, LPF)是一种允许低频成分通过而抑制高频成分的滤波器。低通滤波器在去除高频噪声和信号平滑中非常有用。
    
    ### 2.17.2 高通滤波器
    
    **高通滤波器**(High-pass Filter, HPF)是一种允许高频成分通过而抑制低频成分的滤波器。高通滤波器在去除低频噪声和信号细节提取中非常有用。
    
    ### 2.17.3 带通滤波器
    
    **带通滤波器**(Band-pass Filter, BPF)是一种允许特定频率范围内的成分通过而抑制其他频率成分的滤波器。带通滤波器在通信系统中用于提取特定频段的信号。
    
    ### 2.17.4 带阻滤波器
    
    **带阻滤波器**(Band-stop Filter, BSF)是一种抑制特定频率范围内的成分而允许其他频率成分通过的滤波器。带阻滤波器在去除特定频段的干扰中非常有用。
    
    **示例**:使用低通滤波器和高通滤波器处理一个混合信号,并绘制其滤波后的时域特性。
    
    ```python
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.signal import butter, lfilter
    
    # 生成混合信号
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    x_t = np.sin(2 * np.pi * 5 * t) + np.sin(2 * np.pi * 50 * t)  # 5 Hz和50 Hz的正弦波混合信号
    
    # 定义滤波器
    def butter_bandpass_filter(data, lowcut, highcut, fs, order=5):
    nyq = 0.5 * fs
    low = lowcut / nyq
    high = highcut / nyq
    b, a = butter(order, [low, high], btype='band')
    y = lfilter(b, a, data)
    return y
    
    def butter_lowpass_filter(data, lowcut, fs, order=5):
    nyq = 0.5 * fs
    low = lowcut / nyq
    b, a = butter(order, low, btype='low')
    y = lfilter(b, a, data)
    return y
    
    def butter_highpass_filter(data, highcut, fs, order=5):
    nyq = 0.5 * fs
    high = highcut / nyq
    b, a = butter(order, high, btype='high')
    y = lfilter(b, a, data)
    return y
    
    # 采样频率
    fs = 1000  # 1000 Hz
    
    # 低通滤波器处理
    lowcut = 10
    x_t_lowpass = butter_lowpass_filter(x_t, lowcut, fs)
    
    # 高通滤波器处理
    highcut = 40
    x_t_highpass = butter_highpass_filter(x_t, highcut, fs)
    
    # 绘制原始信号、低通滤波后的信号和高通滤波后的信号
    plt.figure(figsize=(12, 6))
    
    plt.subplot(3, 1, 1)
    plt.plot(t, x_t, label='原始信号', color='blue')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('原始信号的时域特性')
    plt.legend()
    plt.grid(True)
    
    plt.subplot(3, 1, 2)
    plt.plot(t, x_t_lowpass, label='低通滤波后的信号', color='green')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title(f'低通滤波后的信号(截止频率 = {lowcut} Hz)')
    plt.legend()
    plt.grid(True)
    
    plt.subplot(3, 1, 3)
    plt.plot(t, x_t_highpass, label='高通滤波后的信号', color='purple')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title(f'高通滤波后的信号(截止频率 = {highcut} Hz)')
    plt.legend()
    plt.grid(True)
    
    plt.tight_layout()
    plt.show()

2.18 信号的复数表示

复数表示技术 (Complex Representation Technique)是一种用于描述信号幅度与相位信息的方法。该方法在信号处理领域具有广泛的应用,并特别适用于频域分析以及调制技术等领域。

复信号(Complex Signals)是一种特殊的信号形式,在工程学中具有重要的应用价值。它被定义为每个采样时刻都包含一个复数信息的序列,在时域中通常表示为 x[n] = a[n] + j b[n] 或者在连续时间域中用 x(t) = a(t) + j b(t) 来描述。这种信号形式特别适合于频域分析,并且在通信系统设计中发挥着核心作用。其中a(n)b(n) 分别代表该复数值序列的实部与虚部信息。

示例 :生成一个复数信号,并绘制其时域和频域特性。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 生成复数信号
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    real_part = np.sin(2 * np.pi * 5 * t)  # 5 Hz的正弦波
    imag_part = np.cos(2 * np.pi * 5 * t)  # 5 Hz的余弦波
    x_t_complex = real_part + 1j * imag_part
    
    # 绘制复数信号的时域特性
    plt.figure(figsize=(12, 6))
    
    plt.subplot(2, 1, 1)
    plt.plot(t, np.real(x_t_complex), label='实部', color='blue')
    plt.plot(t, np.imag(x_t_complex), label='虚部', color='red')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('复数信号的时域特性')
    plt.legend()
    plt.grid(True)
    
    # 计算频谱
    X_f_complex = np.fft.fft(x_t_complex)
    frequencies = np.fft.fftfreq(len(t), d=1/1000)  # 1000 Hz的采样频率
    
    # 绘制复数信号的频域特性
    plt.subplot(2, 1, 2)
    plt.plot(frequencies, np.abs(X_f_complex), label='幅度谱', color='green')
    plt.plot(frequencies, np.angle(X_f_complex), label='相位谱', color='purple')
    plt.xlabel('频率 (Hz)')
    plt.ylabel('幅度 / 相位 (rad)')
    plt.title('复数信号的频域特性')
    plt.legend()
    plt.grid(True)
    
    plt.tight_layout()
    plt.show()

2.19 信号的多分辨率分析特性

多分辨率分析 (Multi-resolution Analysis)是一种通过不同时间尺度分解和分析信号的技术。该方法有助于深入解析信号的局部特征及其全局行为,并且尤其在处理复杂或高变异性信号时展现出显著优势。

多分辨率分析方法常见地采用小波变换(Wavelet Transform)以及短时傅里叶变换(Short-Time Fourier Transform, STFT)等技术作为主要工具。其中小波变换是一种重要的工具,在信号处理领域具有广泛的应用;短时傅里叶变换也是一种常用的技术,在频谱分析方面表现出显著的优势。

示例 :使用小波变换分析一个非平稳信号。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    import pywt
    
    # 生成非平稳信号
    t = np.linspace(0, 2, 2000)  # 0到2秒,2000个点
    x_t = np.sin(2 * np.pi * 5 * t) + np.sin(2 * np.pi * 10 * t) * (t < 1) + np.sin(2 * np.pi * 15 * t) * (t >= 1)
    
    # 使用小波变换进行多分辨率分析
    coeffs = pywt.wavedec(x_t, 'db1', level=3)
    
    # 绘制小波变换系数
    plt.figure(figsize=(12, 6))
    
    for i, coeff in enumerate(coeffs):
    plt.plot(np.linspace(0, 2, len(coeff)), coeff, label=f'小波系数 {i+1}', color=f'C{i}')
    
    plt.xlabel('时间 (秒)')
    plt.ylabel('系数')
    plt.title('非平稳信号的小波变换系数')
    plt.legend()
    plt.grid(True)
    plt.show()

2.20 信号的变换特性

Transformations (Transformation) refers to methods used to convert signals from one domain to another. Among the most commonly employed techniques are the Fourier Transform, Laplace Transform, and Z-Transform, each serving specific purposes in various applications. For instance, the Fourier Transform is frequently utilized for frequency domain analysis, while the Laplace Transform is pivotal in assessing system stability, and the Z-Transform plays a crucial role in discrete-time signal processing.

傅里叶变换(Fourier Transform)是一种数学工具,能够将时域信号转换为频域表示,并广泛应用于分析信号的频率成分

拉普拉斯变换(Laplace Transform)将时域信号转换为复频域的表达式,并主要应用于分析系统稳定性。

Z变换 (Z-Transform)用于将离散时间信号表示为复频域中的形式,并用以分析离散系统的特性

示例 :计算并绘制一个信号的傅里叶变换、拉普拉斯变换和Z变换。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.signal import zpk2tf, freqz
    
    # 生成信号
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    x_t = np.sin(2 * np.pi * 5 * t)  # 5 Hz的正弦波
    
    # 计算傅里叶变换
    X_f = np.fft.fft(x_t)
    frequencies = np.fft.fftfreq(len(t), d=1/1000)  # 1000 Hz的采样频率
    
    # 计算拉普拉斯变换
    # 拉普拉斯变换通常用于连续时间系统的分析,这里我们用一个简单的例子
    s = np.linspace(0, 10, 1000)  # s域变量
    X_s = 1 / (s + 2)  # 一个简单的系统函数
    
    # 计算Z变换
    # Z变换通常用于离散时间系统的分析
    n = np.arange(0, 1000)  # 离散时间索引
    x_n = np.sin(2 * np.pi * 5 * n / 1000)  # 5 Hz的离散正弦波
    z = np.exp(1j * 2 * np.pi * n / 1000)  # Z域变量
    X_z = np.fft.fft(x_n)
    
    # 绘制傅里叶变换
    plt.figure(figsize=(12, 6))
    plt.plot(frequencies, np.abs(X_f), label='傅里叶变换', color='blue')
    plt.xlabel('频率 (Hz)')
    plt.ylabel('幅度')
    plt.title('信号的傅里叶变换')
    plt.legend()
    plt.grid(True)
    plt.show()
    
    # 绘制拉普拉斯变换
    plt.figure(figsize=(12, 6))
    plt.plot(s, np.abs(X_s), label='拉普拉斯变换', color='red')
    plt.xlabel('s域变量')
    plt.ylabel('幅度')
    plt.title('信号的拉普拉斯变换')
    plt.legend()
    plt.grid(True)
    plt.show()
    
    # 绘制Z变换
    plt.figure(figsize=(12, 6))
    plt.plot(n, np.abs(X_z), label='Z变换', color='green')
    plt.xlabel('Z域变量')
    plt.ylabel('幅度')
    plt.title('信号的Z变换')
    plt.legend()
    plt.grid(True)
    plt.show()

2.21 信号的同步检测特性

(Synchronization Detection)即为将两个或多个信号进行匹配与调谐的过程。
该技术在通信领域发挥着关键作用,并旨在保证接收到的信号与发送的信号时间上的一致性。

示例 :生成两个不同时间延迟的信号,并使用互相关进行同步检测。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 生成两个信号
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    x_t = np.sin(2 * np.pi * 5 * t)  # 5 Hz的正弦波
    y_t = np.sin(2 * np.pi * 5 * (t - 0.2))  # 5 Hz的正弦波,延迟0.2秒
    
    # 计算互相关
    x_t_y_t_crosscorr = np.correlate(x_t, y_t, mode='full')
    lags = np.arange(-len(t) + 1, len(t))
    
    # 绘制互相关
    plt.figure(figsize=(12, 6))
    plt.plot(lags, x_t_y_t_crosscorr, label='互相关', color='blue')
    plt.xlabel('时间延迟')
    plt.ylabel('相关值')
    plt.title('两个信号的互相关')
    plt.legend()
    plt.grid(True)
    plt.show()
    
    # 找到最大相关值的延迟
    max_lag = lags[np.argmax(np.abs(x_t_y_t_crosscorr))]
    print(f"两个信号的最大时间延迟: {max_lag} 个采样点")

2.22 信号的编码与解码特性

编码(Encoding)与解码(Decoding)指通过将信号转换至数字域以及还原其模拟形态的过程来实现信息传递。这些技术手段对于保障信息在数字通信系统中的可靠传输与准确恢复至关重要。

示例 :将一个模拟信号进行量化和编码,然后解码恢复为模拟信号。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 定义模拟信号
    def analog_signal(t):
    return np.sin(2 * np.pi * 5 * t) + 0.5 * np.cos(4 * np.pi * t)
    
    # 生成时间向量
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    x_t = analog_signal(t)
    
    # 量化为数字信号
    bits = 8  # 量化位数
    levels = 2**bits  # 量化级别
    max_val = np.max(x_t)
    min_val = np.min(x_t)
    quantized_x_t = np.round((x_t - min_val) / (max_val - min_val) * (levels - 1))
    
    # 解码恢复为模拟信号
    decoded_x_t = (quantized_x_t / (levels - 1)) * (max_val - min_val) + min_val
    
    # 绘制模拟信号、量化后的数字信号和解码后的模拟信号
    plt.figure(figsize=(12, 6))
    
    plt.subplot(3, 1, 1)
    plt.plot(t, x_t, label='模拟信号', color='blue')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('模拟信号')
    plt.legend()
    plt.grid(True)
    
    plt.subplot(3, 1, 2)
    plt.step(t, quantized_x_t, label='数字信号', color='red', where='post')
    plt.xlabel('时间 (秒)')
    plt.ylabel('量化值')
    plt.title('量化后的数字信号')
    plt.legend()
    plt.grid(True)
    
    plt.subplot(3, 1, 3)
    plt.plot(t, decoded_x_t, label='解码后的模拟信号', color='green')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('解码后的模拟信号')
    plt.legend()
    plt.grid(True)
    
    plt.tight_layout()
    plt.show()

2.23 信号的多路复用特性

multiplexing (Multiplexing)是一种将多个信号合并为一个信号进行传输的技术。这种技术在通信系统中的应用非常广泛;常见的multiplexing方法包括时间分集调制(TDM)、频率分集调制(FDM)以及码元分集调制(CDM)等多种形式;通过multiplexing技术可以实现高效地利用信道资源并提高通信系统的承载能力;

示例 :生成两个信号并使用时分复用(TDM)进行合并,然后恢复原始信号。

复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 生成两个信号
    t = np.linspace(0, 1, 1000)  # 0到1秒,1000个点
    x_t_1 = np.sin(2 * np.pi * 5 * t)  # 5 Hz的正弦波
    x_t_2 = np.sin(2 * np.pi * 10 * t)  # 10 Hz的正弦波
    
    # 时分复用
    def tdm_multiplex(x1, x2, t1, t2):
    multiplexed_signal = np.zeros(len(t1) + len(t2))
    multiplexed_signal[::2] = x1
    multiplexed_signal[1::2] = x2
    return multiplexed_signal
    
    # 生成复用信号
    multiplexed_signal = tdm_multiplex(x_t_1, x_t_2, t, t)
    
    # 时分复用的恢复
    def tdm_demultiplex(multiplexed_signal):
    x1 = multiplexed_signal[::2]
    x2 = multiplexed_signal[1::2]
    return x1, x2
    
    # 恢复原始信号
    x_t_1_recovered, x_t_2_recovered = tdm_demultiplex(multiplexed_signal)
    
    # 绘制原始信号、复用信号和恢复后的信号
    plt.figure(figsize=(12, 6))
    
    plt.subplot(3, 1, 1)
    plt.plot(t, x_t_1, label='信号1', color='blue')
    plt.plot(t, x_t_2, label='信号2', color='red')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('原始信号')
    plt.legend()
    plt.grid(True)
    
    plt.subplot(3, 1, 2)
    plt.plot(np.linspace(0, 2, 2000), multiplexed_signal, label='复用信号', color='green')
    plt.xlabel('时间 (秒)')
    plt.ylabel('幅度')
    plt.title('时分复用信号')
    plt.legend()
    plt.grid(True)
    
    plt.subplot(3, 1, 3)
    plt.plot(t, x_t_1_recovered, label='

全部评论 (0)

还没有任何评论哟~