第2讲:信号的时域分析
一、引言
在信号与系统中,时域分析是研究信号随时间变化行为的核心方法。通过时域分析,我们可以直接观察信号的波形、幅度、相位等特征,并利用这些特征设计系统或提取信息。而人工智能(AI)中的许多技术(如卷积神经网络、时间序列预测)本质上也是在时域中操作信号。本节课将从信号的基本运算入手,逐步深入到卷积积分与卷积和,并结合AI中的实际案例,帮助大家理解时域分析的重要性。
二、信号的基本运算
信号的基本运算包括**平移(延迟/提前)、缩放(振幅调整)、翻转(对称变换)**等。这些操作是构建复杂信号和系统的基础。
(一)信号平移(延迟/提前)
- 定义:将信号 x ( t ) x(t) x(t) 沿时间轴移动 τ \tau τ 秒,得到新的信号 x ( t − τ ) x(t - \tau) x(t−τ)。若 τ > 0 \tau > 0 τ>0,表示延迟;若 τ < 0 \tau < 0 τ<0,表示提前。
- 数学表达式:
x ( t − τ ) = { x ( t ) , t ≥ τ 0 , 否则 x(t - \tau) = \begin{cases} x(t), & t \geq \tau \\ 0, & \text{否则} \end{cases} x(t−τ)={x(t),0,t≥τ否则 - AI中的应用:在时间序列预测中,平移操作常用于构建滑动窗口(sliding window),例如股票价格预测。
(二)信号缩放
- 定义:将信号 x ( t ) x(t) x(t) 的振幅乘以一个常数 A A A,得到新的信号 A x ( t ) A x(t) Ax(t)。若 A > 1 A > 1 A>1,表示放大;若 0 < A < 1 0 < A < 1 0<A<1,表示衰减。
- 数学表达式:
y ( t ) = A x ( t ) y(t) = A x(t) y(t)=Ax(t) - AI中的应用:在图像处理中,缩放操作用于调整图像亮度或对比度。
(三)信号翻转
- 定义:将信号 x ( t ) x(t) x(t) 关于时间轴对称变换,得到 x ( − t ) x(-t) x(−t)。若进一步平移,得到 x ( − t + τ ) x(-t + \tau) x(−t+τ)。
- 数学表达式:
y ( t ) = x ( − t ) y(t) = x(-t) y(t)=x(−t) - AI中的应用:在语音识别中,翻转操作可用于提取信号的对称特征。
三、冲激信号与阶跃信号
冲激信号和阶跃信号是时域分析中最重要的基本信号,它们在系统建模和特征提取中具有关键作用。
(一)冲激信号(Delta Function)
- 定义:单位冲激信号
δ
(
t
)
\delta(t)
δ(t) 满足以下条件:
δ ( t ) = { ∞ , t = 0 0 , t ≠ 0 , ∫ − ∞ ∞ δ ( t ) d t = 1 \delta(t) = \begin{cases} \infty, & t = 0 \\ 0, & t \neq 0 \end{cases}, \quad \int_{-\infty}^{\infty} \delta(t) dt = 1 δ(t)={∞,0,t=0t=0,∫−∞∞δ(t)dt=1 - 物理意义:表示一个瞬时能量极大的脉冲信号。
- AI中的应用:在卷积神经网络(CNN)中,冲激响应的概念被用于建模滤波器的权重分布。
(二)阶跃信号(Step Function)
- 定义:单位阶跃信号
u
(
t
)
u(t)
u(t) 满足:
u ( t ) = { 1 , t ≥ 0 0 , t < 0 u(t) = \begin{cases} 1, & t \geq 0 \\ 0, & t < 0 \end{cases} u(t)={1,0,t≥0t<0 - 物理意义:表示一个突变的信号,常用于建模开关或启动事件。
- AI中的应用:在二分类问题中,阶跃函数(如Sigmoid函数)用于输出离散决策。
四、卷积积分与卷积和
(一)连续时间信号的卷积积分
- 定义:两个连续时间信号
x
(
t
)
x(t)
x(t) 和
h
(
t
)
h(t)
h(t) 的卷积积分定义为:
y ( t ) = x ( t ) ∗ h ( t ) = ∫ − ∞ ∞ x ( τ ) h ( t − τ ) d τ y(t) = x(t) * h(t) = \int_{-\infty}^{\infty} x(\tau) h(t - \tau) d\tau y(t)=x(t)∗h(t)=∫−∞∞x(τ)h(t−τ)dτ - 物理意义:卷积表示一个系统对输入信号 x ( t ) x(t) x(t) 的响应,其中 h ( t ) h(t) h(t) 是系统的冲激响应。
- AI中的应用:卷积操作是卷积神经网络(CNN)的核心,用于提取局部特征。例如,在图像处理中,卷积核(filter)通过滑动窗口与图像信号卷积,提取边缘、纹理等特征。
(二)离散时间信号的卷积和
- 定义:两个离散时间信号
x
[
n
]
x[n]
x[n] 和
h
[
n
]
h[n]
h[n] 的卷积和为:
y [ n ] = x [ n ] ∗ h [ n ] = ∑ k = − ∞ ∞ x [ k ] h [ n − k ] y[n] = x[n] * h[n] = \sum_{k=-\infty}^{\infty} x[k] h[n - k] y[n]=x[n]∗h[n]=k=−∞∑∞x[k]h[n−k] - 物理意义:与连续时间卷积类似,但适用于离散信号。
- AI中的应用:在时间序列预测中,卷积和用于建模序列间的依赖关系,例如LSTM网络中的门控机制。
五、卷积神经网络(CNN)与信号处理的关联
(一)CNN中的卷积操作
-
传统卷积 vs CNN卷积:
- 传统卷积:完全遵循数学定义,需严格对齐信号和滤波器。
- CNN卷积:通过参数共享(weight sharing)和局部连接(local connectivity)减少计算量,同时引入非线性激活函数(如ReLU)增强模型表达能力。
-
公式对比:
- 传统卷积:
y [ n ] = ∑ k = − ∞ ∞ x [ k ] h [ n − k ] y[n] = \sum_{k=-\infty}^{\infty} x[k] h[n - k] y[n]=k=−∞∑∞x[k]h[n−k] - CNN卷积:
y [ n ] = f ( ∑ k = 1 K w k x [ n − k ] + b ) y[n] = f\left( \sum_{k=1}^{K} w_k x[n - k] + b \right) y[n]=f(k=1∑Kwkx[n−k]+b)
其中 f f f 为激活函数(如ReLU), w k w_k wk 为可学习参数, b b b 为偏置。
- 传统卷积:
(二)CNN在信号处理中的典型应用
- 图像分类:通过卷积层提取图像局部特征(如边缘、纹理)。
- 语音识别:通过卷积层提取语音信号的频谱特征。
- 医学信号分析:通过卷积层检测心电图(ECG)或脑电图(EEG)中的异常模式。
六、Python实践:信号的时域分析与卷积
(一)信号平移与缩放
import numpy as np
import matplotlib.pyplot as plt
# 生成一个正弦信号
fs = 1000
t = np.linspace(0, 1, fs)
x = np.sin(2 * np.pi * 5 * t)
# 平移操作(延迟0.2秒)
tau = 0.2
x_shifted = np.roll(x, int(tau * fs))
# 缩放操作(放大2倍)
x_scaled = 2 * x
# 绘制结果
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.plot(t, x, label='Original')
plt.plot(t, x_shifted, label='Shifted')
plt.legend()
plt.title('Signal Shifting')
plt.subplot(2, 1, 2)
plt.plot(t, x, label='Original')
plt.plot(t, x_scaled, label='Scaled')
plt.legend()
plt.title('Signal Scaling')
plt.tight_layout()
plt.show()
(二)卷积操作(连续时间近似)
from scipy.signal import convolve
# 定义两个信号
t = np.linspace(0, 2, 1000)
x = np.sin(2 * np.pi * 1 * t) # 输入信号
h = np.exp(-5 * t) * (t >= 0) # 冲激响应(指数衰减)
# 计算卷积
y = convolve(x, h, mode='same') # mode='same' 表示输出长度与输入相同
# 绘制结果
plt.figure(figsize=(10, 6))
plt.plot(t, x, label='Input x(t)')
plt.plot(t, h, label='Impulse Response h(t)')
plt.plot(t, y, label='Convolution y(t)')
plt.legend()
plt.title('Convolution in Continuous-Time')
plt.grid(True)
plt.show()
(三)AI中的卷积(PyTorch示例)
import torch
import torch.nn as nn
# 定义一个简单的卷积层
conv_layer = nn.Conv1d(in_channels=1, out_channels=1, kernel_size=3, padding=1)
# 生成输入信号(形状: [batch_size, channels, length])
input_signal = torch.randn(1, 1, 100)
# 前向传播
output = conv_layer(input_signal)
print("Input shape:", input_signal.shape)
print("Output shape:", output.shape)
七、总结
本节课从信号的基本运算入手,深入讲解了冲激信号、阶跃信号以及卷积积分与卷积和的数学原理,并结合人工智能中的卷积神经网络(CNN)展示了它们的实际应用。通过Python代码示例,我们直观地观察了信号的平移、缩放、卷积操作,并初步体验了AI中的卷积实现。
八、课后思考题
- 为什么卷积神经网络(CNN)的卷积操作与传统信号处理中的卷积存在差异?
- 试举一个实际场景,说明信号平移在AI中的应用(如语音识别)。
- 在CNN中,参数共享和局部连接的意义是什么?
九、参考文献
通过本节课的学习,相信你已经掌握了信号时域分析的核心方法,并开始理解它们在AI中的重要性。在接下来的课程中,我们将进一步探讨系统的时域分析方法,并结合更多AI案例深入讲解。敬请期待!