时域特征提取是在信号处理和模式识别领域中常用的一种方法,用于分析信号在时间上的变化特性。时域特征是指在信号的原始时序数据上直接计算得到的特征,而不需要进行频域转换或其他复杂的数学运算。时域特征提取通常用于语音识别、音频处理、生物信号分析、机器学习等领域。
常见方法和特征
- 均值(Mean): 信号的所有数值的平均值,表示信号的整体幅度水平。
- 方差(Variance): 信号数值的离散程度,用于描述信号的波动性。
- 标准差(Standard Deviation): 方差的平方根,也是一种衡量信号波动性的指标。
- 最大值(Maximum)和最小值(Minimum): 信号中的最大和最小数值。
- 峰值(Peak)和峰-峰值(Peak-to-Peak): 信号的最大振幅和最小振幅之间的差异。
- 时域零交叉率(Zero Crossing Rate): 信号过零点的频率,用于描述信号的波形特性。
- 自相关(Autocorrelation): 信号与其自身滞后版本之间的相关性,用于分析信号的周期性。
- 时域能量(Energy): 信号的能量大小,通常计算信号的平方和。
- 时域熵(Entropy): 描述信号复杂度和不规则性的指标。
程序实现
确保提前安装NumPy库,使用以下命令进行安装:
然后在程序中引入:1
pip install numpy
1
import numpy as np
准备一个数组:假设有一段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])具体实现
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])