⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议。
Skip to content

第1章扩展:高级DSP话题

版本: v2.0
最后更新: 2026-05-26

在线 Notebook

对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明

本文档包含第1章的深度扩展内容,适合想深入理解DSP的读者。


E1.1 窗函数详解

为什么需要窗函数

在实际应用中,我们只能处理有限长度的信号。直接对有限长信号做FFT会产生频谱泄漏(spectral leakage)。

问题: 如果信号长度不是2的幂次,或者信号在边界处不连续,FFT会产生虚假的频率成分。

解决方案: 用窗函数逐渐减小信号的边界值。

常见窗函数

1. 矩形窗(Rectangular Window)

w[n]=1,0n<N

优点: 频率分辨率最好

缺点: 频谱泄漏最严重

2. Hann窗

w[n]=0.50.5cos(2πnN1)

优点: 平衡的时频特性

缺点: 频率分辨率一般

3. Hamming窗

w[n]=0.540.46cos(2πnN1)

优点: 比Hann窗的频谱泄漏更小

缺点: 边界不为0

4. Blackman窗

w[n]=0.420.5cos(2πnN1)+0.08cos(4πnN1)

优点: 频谱泄漏最小

缺点: 频率分辨率最差

选择窗函数的建议

  • 需要高频率分辨率? → 矩形窗或Hamming窗
  • 需要低频谱泄漏? → Blackman窗
  • 不确定? → Hann窗(最平衡)

E1.2 多速率信号处理

采样率转换

有时需要改变信号的采样率:

  • 上采样:增加采样率(插值)
  • 下采样:减少采样率(抽取)

上采样(Upsampling)

步骤:

  1. 在原始样本之间插入0
  2. 用低通滤波器平滑

数学表达:

y[n]={x[n/L]if n is multiple of L0otherwise

然后用低通滤波器处理。

下采样(Downsampling)

步骤:

  1. 用低通滤波器防止混叠
  2. 每M个样本取一个

数学表达:

y[n]=x[nM]

应用

  • 音频处理:转换采样率(如44.1 kHz → 48 kHz)
  • 图像处理:图像金字塔
  • 通信系统:多速率滤波器组

E1.3 随机信号处理

确定性信号 vs 随机信号

确定性信号: 可以用公式精确描述(如正弦波)

随机信号: 不可预测,只能用统计特性描述(如噪音)

自相关函数(Autocorrelation)

定义:

R[k]=E[x[n]x[n+k]]

含义: 信号与其延迟版本的相似程度

应用:

  • 检测周期性
  • 估计信号功率
  • 设计维纳滤波器

互相关函数(Cross-correlation)

定义:

Rxy[k]=E[x[n]y[n+k]]

应用:

  • 信号检测
  • 时延估计
  • 信号匹配

功率谱密度(Power Spectral Density, PSD)

定义:

S[k]=F(R[k])

含义: 信号在不同频率的功率分布

估计方法:

  • Periodogram:直接计算
  • Welch方法:分段平均(更稳定)

E1.4 滤波器设计

FIR滤波器设计

有限冲激响应(FIR)滤波器:

y[n]=k=0M1bkx[nk]

优点:

  • 总是稳定
  • 可以有线性相位
  • 易于实现

缺点:

  • 需要很多系数才能达到陡峭的截止

IIR滤波器设计

无限冲激响应(IIR)滤波器:

y[n]=k=0Mbkx[nk]k=1Naky[nk]

优点:

  • 用少量系数达到陡峭的截止
  • 计算效率高

缺点:

  • 可能不稳定
  • 相位响应非线性

常见滤波器类型

  1. Butterworth滤波器:最平坦的通带
  2. Chebyshev滤波器:更陡峭的截止
  3. Elliptic滤波器:最陡峭的截止

E1.5 与深度学习的连接

卷积神经网络中的卷积

DSP中的卷积:

python
y[n] = sum(x[m] * h[n-m] for m)

CNN中的卷积:

python
output = sum(input * learned_kernel)

本质相同: 都是加权求和,只是权重的来源不同。

位置编码与傅里叶变换

傅里叶变换: 用不同频率的正弦波分解信号

Transformer位置编码: 用不同频率的正弦波编码位置

python
# 傅里叶变换
X[k] = sum(x[n] * exp(-j*2*pi*k*n/N))

# 位置编码
PE[pos, 2i] = sin(pos / 10000^(2i/d))
PE[pos, 2i+1] = cos(pos / 10000^(2i/d))

启示: 位置编码让Transformer能理解序列的顺序。


E1.6 推荐论文

经典论文

  1. Cooley & Tukey (1965) - "An Algorithm for the Machine Calculation of Complex Fourier Series"

    • FFT算法的原始论文
    • 改变了信号处理的历史
  2. Nyquist (1928) - "Certain Topics in Telegraph Transmission Theory"

    • 采样定理的原始论文
    • 奠定了数字信号处理的基础

现代应用

  1. Vaswani et al. (2017) - "Attention Is All You Need"

    • Transformer论文
    • 位置编码的设计灵感来自傅里叶变换
  2. He et al. (2016) - "Deep Residual Learning for Image Recognition"

    • ResNet论文
    • 卷积神经网络的经典之作

E1.7 进一步学习

书籍

  • "Discrete-Time Signal Processing" by Oppenheim & Schafer

    • DSP的经典教科书
    • 深度和广度都很好
  • "The Scientist and Engineer's Guide to Digital Signal Processing" by Smith

    • 更直观的讲解
    • 适合初学者

在线资源

  • MIT OpenCourseWare - 6.341 Discrete-Time Signal Processing
  • Stanford - EE261 The Fourier Transform and its Applications
  • Coursera - Digital Signal Processing Specialization

实践项目

  1. 音频处理

    • 实现均衡器(EQ)
    • 实现噪音消除
  2. 图像处理

    • 实现图像滤波
    • 实现图像压缩
  3. 通信系统

    • 实现调制和解调
    • 实现信道均衡

返回: 第1章:传统数字信号处理

本教程采用 CC BY-NC-SA 4.0 许可协议