信号分类与特性解析

信号的概念与分类

信号是携带信息的物理量或函数,是信息传递的载体,在通信、控制、信号处理等领域有广泛应用。信号可以从多个维度进行分类,其特性决定了分析和处理方法。

  1. 信号的基本分类

信号的核心分类方式如下表所示:

分类维度 类型 定义与特点 典型例子
时间特性 连续时间信号 在连续时间范围内有定义的信号,通常用函数x(t)表示。 模拟语音信号、温度变化曲线。
离散时间信号 仅在离散时间点上有定义的信号,通常用序列x[n]表示。 数字音频采样值、每日股票收盘价。
确定性 确定信号 任意时刻的取值可由确定的数学表达式或规则描述。 正弦波 sin(2πft)、阶跃信号。
随机信号 取值具有不确定性,只能用概率统计特性描述。 通信信道中的噪声、语音信号的未来值。
周期性 周期信号 存在正数T(周期),使得 x(t+T) = x(t) 对所有t成立。 正弦波、方波。
非周期信号 不具有周期性。 单个脉冲、指数衰减信号。
能量与功率 能量信号 总能量有限,平均功率为零。满足: `E = ∫_{-∞}^{∞} x(t)
功率信号 总能量无限,但平均功率有限且不为零。满足: E → ∞, `
0 < P < ∞`。 周期信号(如正弦波)、持续的白噪声。

说明:一个信号不可能同时是能量信号和功率信号。持续时间有限的非周期信号通常是能量信号;而周期信号、随机信号和持续存在的非周期信号通常是功率信号。

  1. 基本信号与奇异信号

这些是构成或分析复杂信号的基础。

  • 阶跃信号 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) 可与正弦信号相互转换。
  1. 信号在工程中的特殊考虑

在具体工程领域,信号处理有特定要求。

  • 高速数字信号(PCB设计) :对于如DDR内存、PCIe、高速网口(PHY)、LVDS等并行或差分高速信号,为保证多根信号线同时到达接收端,必须进行等长布线。其时序要求严格,不等长会导致数据错位。等长约束通常围绕一个目标长度在一定误差范围内(如±5mil)进行设计。

  • Linux进程信号 :在操作系统中,信号是一种软件中断,用于通知进程发生了某个事件。内核为每个进程维护一个信号结构(task_struct中的sigsighand),包含信号位图(待处理信号集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;

}

```

信号处理流程涉及用户态到内核态的切换:当信号产生,进程从内核态返回用户态前,会检查并处理待处理的、未被阻塞的信号。

  1. 信号的时域运算与变换

对信号进行运算可以得到新的信号,是系统分析的基础。

  • 时移x(t) -> x(t - t0),信号在时间轴上平移。
  • 反褶x(t) -> x(-t),信号以纵轴为对称轴翻转。
  • 尺度变换x(t) -> x(at)a>1时信号在时间轴上压缩, 0<a<1时扩展。
  • 微分与积分 :冲激信号δ(t)是阶跃信号u(t)的微分,阶跃信号是冲激信号的积分。

参考来源

相关推荐
JAVA面经实录9171 小时前
JVM 性能监控 + 全链路分析实战 + 性能优化(完整版)
java·jvm
WL_Aurora1 小时前
Python 算法基础篇之查找算法(一):顺序查找、二分查找与插值查找
开发语言·python·算法
号码认证服务1 小时前
小米、OPPO、VIVO手机支持号码认证显示公司名吗?
java·服务器·网络·经验分享·智能手机·云计算·php
阿文的代码库1 小时前
对于C++中push_back的原理介绍与分析
开发语言·c++
ChoSeitaku2 小时前
06_可变参数_递归_类和对象_封装
java·数据结构·算法
枕星而眠2 小时前
C++ 核心语法精讲:auto / 模板 / 命名空间 / 动态内存 从用法到面试
开发语言·c++·面试
Full Stack Developme2 小时前
Spring Context 解析
java·spring·rpc
_深海凉_2 小时前
LeetCode热题100-二叉搜索树中第 K 小的元素
算法·leetcode·职场和发展
图码2 小时前
文本两端对齐算法详解:从LeetCode到实际应用
数据结构·图像处理·算法·leetcode·生成对抗网络·面试·职场和发展