0%

时域特征提取

时域特征提取是在信号处理和模式识别领域中常用的一种方法,用于分析信号在时间上的变化特性。时域特征是指在信号的原始时序数据上直接计算得到的特征,而不需要进行频域转换或其他复杂的数学运算。时域特征提取通常用于语音识别、音频处理、生物信号分析、机器学习等领域。

常见方法和特征

  1. 均值(Mean): 信号的所有数值的平均值,表示信号的整体幅度水平。
  2. 方差(Variance): 信号数值的离散程度,用于描述信号的波动性。
  3. 标准差(Standard Deviation): 方差的平方根,也是一种衡量信号波动性的指标。
  4. 最大值(Maximum)和最小值(Minimum): 信号中的最大和最小数值。
  5. 峰值(Peak)和峰-峰值(Peak-to-Peak): 信号的最大振幅和最小振幅之间的差异。
  6. 时域零交叉率(Zero Crossing Rate): 信号过零点的频率,用于描述信号的波形特性。
  7. 自相关(Autocorrelation): 信号与其自身滞后版本之间的相关性,用于分析信号的周期性。
  8. 时域能量(Energy): 信号的能量大小,通常计算信号的平方和。
  9. 时域熵(Entropy): 描述信号复杂度和不规则性的指标。

程序实现

  1. 确保提前安装NumPy库,使用以下命令进行安装:

    1
    pip install numpy
    然后在程序中引入:
    1
    import numpy as np

  2. 准备一个数组:假设有一段10秒的电信号,单个样本采集时长为2秒,采集频率是20kHz,所以单个样本的采样长度为40000。即一共有5个样本,每个样本有40000条数据

    1
    2
    # 假设有一个时域信号,用一个NumPy数组表示
    signal = np.array([1, 2, 3, 2, 1, -1, -3, -4, -3, -1, 1, 3, 4, 3, 2, 1])

  3. 具体实现

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    # 计算均值
    mean_value = np.mean(signal)

    # 计算方差
    variance = np.var(signal)

    # 计算标准差
    standard_deviation = np.std(signal)

    # 计算最大值和最小值
    max_value = np.max(signal)
    min_value = np.min(signal)

    # 计算峰值
    peak_value = np.abs(max_value)

    # 计算峰峰值
    peak_to_peak_value = np.ptp(signal)

    # 计算过零率:找出signal数组中发生符号变化的位置,并返回这些位置的索引
    zero_crossings = np.where(np.diff(np.sign(signal)))[0]
    zero_crossing_rate = len(zero_crossings) / len(signal)

    # 计算自相关
    autocorrelation = np.correlate(signal, signal, mode='full')

    # 计算时域能量
    energy = np.sum(signal ** 2)

    # 计算时域熵
    histogram, _ = np.histogram(signal, bins=range(min(signal), max(signal) + 2))
    probabilities = histogram / len(signal)
    entropy = -np.sum([p * np.log2(p) for p in probabilities if p != 0])