信号的概念与分类
信号是携带信息的物理量或函数,是信息传递的载体,在通信、控制、信号处理等领域有广泛应用。信号可以从多个维度进行分类,其特性决定了分析和处理方法。
- 信号的基本分类
信号的核心分类方式如下表所示:
| 分类维度 | 类型 | 定义与特点 | 典型例子 |
|---|---|---|---|
| 时间特性 | 连续时间信号 | 在连续时间范围内有定义的信号,通常用函数x(t)表示。 |
模拟语音信号、温度变化曲线。 |
| 离散时间信号 | 仅在离散时间点上有定义的信号,通常用序列x[n]表示。 |
数字音频采样值、每日股票收盘价。 | |
| 确定性 | 确定信号 | 任意时刻的取值可由确定的数学表达式或规则描述。 | 正弦波 sin(2πft)、阶跃信号。 |
| 随机信号 | 取值具有不确定性,只能用概率统计特性描述。 | 通信信道中的噪声、语音信号的未来值。 | |
| 周期性 | 周期信号 | 存在正数T(周期),使得 x(t+T) = x(t) 对所有t成立。 |
正弦波、方波。 |
| 非周期信号 | 不具有周期性。 | 单个脉冲、指数衰减信号。 | |
| 能量与功率 | 能量信号 | 总能量有限,平均功率为零。满足: `E = ∫_{-∞}^{∞} | x(t) |
| 功率信号 | 总能量无限,但平均功率有限且不为零。满足: E → ∞, ` |
||
| 0 < P < ∞`。 | 周期信号(如正弦波)、持续的白噪声。 |
说明:一个信号不可能同时是能量信号和功率信号。持续时间有限的非周期信号通常是能量信号;而周期信号、随机信号和持续存在的非周期信号通常是功率信号。
- 基本信号与奇异信号
这些是构成或分析复杂信号的基础。
-
阶跃信号
u(t):在t=0时刻发生跳变,常用于表示信号的开始或开关行为。python# Python示例:生成并绘制单位阶跃信号 import numpy as np import matplotlib.pyplot as plt t = np.linspace(-2, 2, 1000) u = np.where(t >= 0, 1.0, 0.0) # 单位阶跃函数定义 plt.plot(t, u) plt.title('Unit Step Signal u(t)') plt.xlabel('Time t') plt.ylabel('Amplitude') plt.grid(True) plt.show() -
冲激信号
δ(t):也称为狄拉克函数,强度集中在一个无限小时刻,积分为1。它是理论分析的重要工具,可用于表示瞬时作用或信号的抽样。 -
正弦信号
A sin(ωt + φ):最基本的周期信号,是频域分析的基础。 -
指数信号 :
- 实指数信号 :
e^(αt),表示增长(α>0)或衰减(α<0)。 - 复指数信号 :
e^(σ+jω)t,结合了振荡和增长/衰减特性,通过欧拉公式e^(jωt) = cos(ωt) + j sin(ωt)可与正弦信号相互转换。
- 实指数信号 :
- 信号在工程中的特殊考虑
在具体工程领域,信号处理有特定要求。
-
高速数字信号(PCB设计) :对于如DDR内存、PCIe、高速网口(PHY)、LVDS等并行或差分高速信号,为保证多根信号线同时到达接收端,必须进行等长布线。其时序要求严格,不等长会导致数据错位。等长约束通常围绕一个目标长度在一定误差范围内(如±5mil)进行设计。
-
Linux进程信号 :在操作系统中,信号是一种软件中断,用于通知进程发生了某个事件。内核为每个进程维护一个信号结构(
task_struct中的sig和sighand),包含信号位图(待处理信号集pending)和信号处理函数指针数组。信号可以被阻塞 (屏蔽)、捕捉 (由用户自定义函数处理)或执行默认 动作(终止、忽略等)。一个典型的捕捉SIGINT信号(Ctrl+C)的C语言示例如下:c#include <stdio.h> #include <signal.h> #include <unistd.h> void sigint_handler(int sig_num) { // 自定义信号处理函数 printf("
Caught signal %d (SIGINT). Exiting gracefully.
", sig_num);
_exit(0);
}
int main() {
struct sigaction sa;
sa.sa_handler = sigint_handler; // 设置处理函数
sigemptyset(&sa.sa_mask); // 清空信号掩码
sa.sa_flags = 0;
// 捕捉SIGINT信号
if (sigaction(SIGINT, &sa, NULL) == -1) {
perror("sigaction");
return 1;
}
printf("Process %d running. Press Ctrl+C to send SIGINT.
", getpid());
while(1) {
pause(); // 挂起进程,等待信号
}
return 0;
}
```
信号处理流程涉及用户态到内核态的切换:当信号产生,进程从内核态返回用户态前,会检查并处理待处理的、未被阻塞的信号。
- 信号的时域运算与变换
对信号进行运算可以得到新的信号,是系统分析的基础。
- 时移 :
x(t) -> x(t - t0),信号在时间轴上平移。 - 反褶 :
x(t) -> x(-t),信号以纵轴为对称轴翻转。 - 尺度变换 :
x(t) -> x(at),a>1时信号在时间轴上压缩,0<a<1时扩展。 - 微分与积分 :冲激信号
δ(t)是阶跃信号u(t)的微分,阶跃信号是冲激信号的积分。