傅立叶、拉普拉斯与小波:三种积分变换的内积本质与工程实践 简介这份手写公式推导笔记围绕信号处理与数学建模中三大核心变换展开系统整理了连续傅立叶变换与离散傅立叶变换、单边及双边拉普拉斯变换、连续小波变换与离散小波变换的定义公式和推导思路适合电子信息、自动化及相关专业学生复习备考也可作为数学建模参赛者的速查参考。整个资源包以单个PDF文件形式打包大小约12.85MB内容紧凑、便于按章节翻阅。目前已有2250人学习使用说明其在实际学习场景中具备一定参考价值。笔记不是简单罗列公式而是以手写推导过程呈现每种变换的来龙去脉同时区分连续与离散情形帮助读者理解时域、频域与复频域之间的转换逻辑并可与教材中的例题对照学习提升公式记忆与运用能力。1. 傅立叶、拉普拉斯与小波三次积分变换的同一道内积题很多人学这三种变换是从「背公式」开始的傅立叶管频域拉普拉斯管微分方程小波管时频分析然后各自刷题、各自忘。真正做信号处理时才发现公式背得越多越不知道该用哪个。我翻手写推导笔记时得到的第一个结论是这三个变换本质上是同一道积分内积题只是核函数的选择不一样。傅立叶把时域信号向 $e^{-i\omega t}$ 上投影拉普拉斯把指数里的 $i\omega$ 换成复频率 $s$ 以容纳暂态衰减小波则用一族可伸缩平移的母函数 $\psi$ 换取时间分辨率。理解这条主线再回头推公式很多符号就不需要死记。这篇笔记适合正在准备数学建模或算法岗面试的人也适合工作里已经和频谱、滤波器打交道但还说不清收敛域细节的工程师。2. 从傅立叶到拉普拉斯核函数与收敛域决定了适用边界2.1 傅立叶变换的推导起点把周期现象推广到非周期信号傅立叶级数的出发点是「任何周期函数都可以写成正交三角函数的叠加」。把周期 $T$ 推向无穷求和变成积分就得到连续傅立叶变换$$F(\omega) \frac{1}{\sqrt{2\pi}}\int_{-\infty}^{\infty} f(t)e^{-i\omega t}dt$$这里有两个容易忽略的细节。第一归一化系数 $1/\sqrt{2\pi}$ 只是众多约定之一有的教材会把 $1/(2\pi)$ 放到反变换那边正反变换的系数只要乘积为 $1/2\pi$ 就成立。第二频率变量 $\omega$ 是实数$e^{-i\omega t}$ 本身有界且振荡所以 $f(t)$ 必须绝对可积否则积分不收敛。这就是傅立叶变换的第一层限制遇到不衰减或增长型信号它直接发散。离散傅立叶变换则是对采样序列 $x[0],\dots,x[N-1]$ 做周期延拓$$X[k] \sum_{n0}^{N-1} x[n]e^{-i2\pi kn/N}$$展开式里的 $k/N$ 是归一化数字频率对应模拟频率 $k \cdot f_s/N$。推导 DFT 时最核心的一步是 $e^{-i2\pi kn/N}$ 对 $n$ 求和的几何级数性质当 $k$ 为整数时这个和要么等于 $N$$k \equiv 0 \mod N$要么等于 $0$。正是这个正交性保证了频域系数能逐一解耦也让 FFT 的分治算法有了数学依据。2.2 拉普拉斯变换用复频率换取发散信号的收敛域拉普拉斯变换的推导可以看作傅立叶变换的延拓。把傅立叶核 $e^{-i\omega t}$ 换成 $e^{-st}$并允许 $s\sigmai\omega$ 取复值得到单边和双边两种形式$$F(s) \int_{0^{-}}^{\infty} f(t)e^{-st}dt \quad (\text{单边})$$$$F(s) \int_{-\infty}^{\infty} f(t)e^{-st}dt \quad (\text{双边})$$多出来的实部 $\sigma$ 起衰减作用。当 $\sigma$ 足够大时即使 $f(t)$ 是阶跃或指数增长信号$f(t)e^{-\sigma t}$ 也能被压回可积范围。这意味着拉普拉斯变换显式地把「哪些 $\sigma$ 能收敛」写进了结果也就是收敛域ROC。单边形式的积分下限从 0 开始天然携带 $t0$ 部分被清零的初值信息所以解常微分方程时初值会自动出现在 $s$ 域表达式里这是傅立叶变换做不到的。实际使用时我会把两者当成同一族算子令 $s$ 取纯虚数即 $si\omega$双边拉普拉斯变换就退回傅立叶变换。反变换时积分路径必须取在收敛域内、与虚轴平行的一条直线上这也是手推笔记里最容易漏掉的一步不标定 ROC 就谈零极点很容易把右边信号当左边信号处理。下面用表格把三条线的异同列出来方便对照手写笔记自查。变换变量核函数收敛特性典型场景傅立叶变换$\omega \in \mathbb{R}$$e^{-i\omega t}$绝对可积频谱分析、图像滤波单边拉普拉斯$s\sigmai\omega$$e^{-st}$$t\ge 0$ROC 为半平面微分方程初值问题双边拉普拉斯$s\sigmai\omega$$e^{-st}$ROC 为带状区域系统稳定性分析连续小波$(\tau, s)$$\psi((t-\tau)/s)/\sqrt{s}$母函数满足容许条件时频局部化分析再看 $s$ 域如何理解零极点。$F(s)$ 的极点位置直接决定系统是否稳定ROC 包含虚轴时系统稳定此时傅立叶变换存在。手推拉普拉斯笔记时很多人漏了 ROC 这一行后面积分限和因果性判断就会出错。好在单边和双边唯一的实质差别就在积分下限下限为 0 则保留初值信息为 $-\infty$ 则考察整个时轴上的有限功率信号。3. Python 复现连续与离散傅立叶变换及拉普拉斯符号推导3.1 从定义式手写 DFT 到调用 FFT写代码前先按手写笔记的定义式实现一个朴素 DFT用循环把公式原样翻译过来import numpy as np def dft(x): N len(x) X np.zeros(N, dtypecomplex) for k in range(N): # 遍历频域索引 for n in range(N): # 遍历时域采样点 X[k] x[n] * np.exp(-2j * np.pi * k * n / N) return X fs 1000 # 采样率 1000 Hz t np.arange(0, 1, 1 / fs) x 0.6 * np.sin(2 * np.pi * 50 * t) 0.4 * np.sin(2 * np.pi * 120 * t) X_dft dft(x[:128]) # 前 128 点压缩演示耗时 freqs np.fft.fftfreq(len(x[:128]), 1 / fs) mag np.abs(X_dft) / len(x[:128])这段代码里$k$ 对应离散频率索引$n$ 对应当前采样点np.exp(-2j * np.pi * k * n / N)就是 DFT 公式里的旋转因子。双重循环的复杂度是 $O(N^2)$$N1000$ 时大约百万次复数乘法勉强能跑一旦把采集长度提到 4096等待时间就不可接受了。工程上不会有人用这个版本但它非常适合对照公式验证自己对 DFT 的理解尤其是检查输出X[k]的共轭对称性和峰值位置。实际分析中我一般直接使用np.fft.fft底层是 FFT 的 Cooley-Tukey 分解把复杂度压到 $O(N\log N)$。相同数据下两者的峰值应完全一致X_fft np.fft.fft(x) freqs np.fft.fftfreq(len(x), 1 / fs) half len(x) // 2 freqs_half freqs[:half] amplitude np.abs(X_fft[:half]) / len(x) amplitude[1:] * 2.0 # 单边谱正频幅值翻倍直流不翻倍 peak_freq freqs_half[np.argmax(amplitude)]这里有两个点需要注意。fftfreq的第一个参数是信号长度第二个参数1/fs是采样间隔输出的是物理频率轴单位与fs一致。单边谱幅值乘 2 是因为对称的负频分量能量合并到了正频这边但直流分量$k0$本身没有镜像所以amplitude[1:]才翻倍。运行后peak_freq会得到 50 Hz和构造信号的频率完全对应。3.2 用符号工具推拉普拉斯变换给手写推导做机械检查拉普拉斯变换在工程里更多是符号推导的环节。要数值化地直接计算连续拉普拉斯积分并不直观我通常先用 SymPy 验证手写推导结果给定时域函数让符号积分把 $F(s)$ 推出来再和笔记里的中间步骤对比。import sympy as sp t, s sp.symbols(t s) f sp.exp(-2 * t) * sp.Heaviside(t) # 因果衰减指数信号 F sp.laplace_transform(f, t, s) print(F) # (1/(s 2), 0, True) g sp.sin(3 * t) * sp.Heaviside(t) G sp.laplace_transform(g, t, s) print(G) # (3/(s**2 9), 0, True)laplace_transform返回三元组第一个元素是 $F(s)$第二个是收敛域的左侧边界第三个表示变换是否存在。这里的边界 0 对应 $\sigma 0$正好说明为什么要显式写出收敛域而不能只看表达式。把符号结果和手写笔记对照能最快发现自己积分上下限写错或漏了 Heaviside 阶跃函数的问题。3.3 反变换与部分分式展开的检查手段只拿到 $F(s)$ 后手推反变换最常用的是部分分式展开。用scipy.signal.residue可以直接拿到留数和极点省去手算待定系数的时间import scipy.signal as signal num [1, 2] # 分子 s 2 den [1, 3, 2] # 分母 s^2 3s 2 (s1)(s2) r, p, k signal.residue(num, den) print(r, p, k) # 留数 [1.]极点 [-1.]余项 [0.]返回的 $r$ 是留数$p$ 是极点。对应到时域每个极点 $p_i$ 贡献一项 $r_i e^{p_i t}u(t)$如果是重极点则再乘 $t^{m-1}$ 因子。这个检查在数学建模里特别有用先算零极点分布再对比手写的反变换结果能判断题是不是在代数化简时丢了项。如果出现复数极点说明系统存在振荡模态时域会出现正弦乘指数的组合。4. 小波变换的多尺度分解母函数、尺度与频率的换算4.1 连续小波变换的公式在说什么连续小波变换的定义为$$W(\tau,s)\frac{1}{\sqrt{s}}\int_{-\infty}^{\infty}f(t)\psi\left(\frac{t-\tau}{s}\right)dt$$对比傅立叶变换两个关键变化一是基函数从无穷长的复指数换成了有限支撑的母函数 $\psi(t)$二是多了平移参数 $\tau$ 和尺度参数 $s$。$s$ 控制波形伸缩$s$ 小时 $\psi((t-\tau)/s)$ 被压缩对应高频$s$ 大时被拉宽对应低频。$\tau$ 决定小波在时间轴上的位置。变换结果 $W(\tau,s)$ 同时记录「什么时间出现」和「什么样的频率内容」这是傅立叶变换给不了的时频局部化能力。这只在 $\psi(t)$ 满足容许条件时成立$\int |\Psi(\omega)|^2/|\omega|,d\omega \infty$也即 $\Psi(0)0$。换句话说母函数必须零均值且在时域上有衰减。小波因此天然适合处理非平稳信号比如带有瞬态冲击的振动数据。工程里常见的错误是拿小波去替代傅立叶做稳态功率谱估计这是概念上的错位小波给的是一张时频图而非一条频谱线。4.2 手写离散小波变换的索引离散小波变换在笔记里写为$$W[j,k]\frac{1}{\sqrt{2^j}}\sum_{n0}^{N-1}x[n]\psi\left(\frac{n-2^j k}{2^j}\right)$$这里的 $j$ 控制尺度采用二进制伸缩$k$ 控制平移。Mallat 算法把这一层公式实现为高通与低通滤波加二抽取每层输出的近似系数 $ca$ 来自低通滤波细节系数 $cd$ 来自高通滤波。因此工程中很少按上式直接求和而是用滤波器组迭代完成pywt.dwt就是该算法的封装。4.3 PyWavelets 实操与参数换算下面用 PyWavelets 对一个受高斯包络调制的非平稳信号做连续小波变换和上一章的傅立叶结果对比差异会非常直观import numpy as np import pywt fs 1000 t np.arange(0, 1, 1 / fs) x np.sin(2 * np.pi * 30 * t) * np.exp(-((t - 0.5) ** 2) / 0.01) scales np.arange(1, 64) coef, freqs pywt.cwt(x, scales, waveletmorl, sampling_period1 / fs)pywt.cwt返回的coef形状为(len(scales), len(x))每一行对应一个尺度下的系数波形。wavelet参数选母函数类型morl是复数 Morlet 小波适合做频率形状直观的时频图sampling_period1/fs表示采样间隔用来把尺度换算成实际频率。scales从 1 取到 63覆盖从接近 Nyquist 频率到低频的范围。实际做分析时一般先粗扫描看能量聚集在哪个尺度区间再缩小scales范围提高分辨率。如果做离散小波分解ca, cd pywt.dwt(x, waveletdb4, modesymmetric) x_rec pywt.idwt(ca, cd, waveletdb4, modesymmetric) recon_err np.max(np.abs(x_rec - x))dwt返回的ca和cd长度约为原信号一半这来自二抽取idwt重构时先插值再滤波。只要分解和重构使用相同的wavelet与mode重构误差在 $10^{-13}$ 量级可以当成无损分解。重构误差偏大时优先检查mode参数是否一致这是初学最容易踩的坑。母函数的选择直接影响分解语义。下面按工程经验整理一张选型表方便和笔记里的参数对应母函数正交性支撑与对称性常见用途haar正交长度 1不对称突变检测、教学示例db2 / db4正交有限长度不对称一般信号分解与重构sym8正交近似对称较平滑图像处理、降噪morl / cmor非正交无限衰减对称CWT 时频图bior 系列双正交对称图像重建、医学信号haar 虽然结构最简单但因为不连续平滑信号上会产生大量细节系数选 db4 通常比 haar 更适合工程数据的多层分解。正交小波的分解结果信息量不冗余适合逐层重构验证而 morl 这类非正交母函数在 CWT 时频图中更直观但不能用于完美的重构验证。两者的使用场景是互补的。5. 阈值去噪与模式修补三种变换在工程落地的查漏技巧在把三种变换真正落地时有两组经验值得单独写出来。第一组是怎么用 DWT 做阈值去噪。常见做法是采用 Donoho 提出的通用阈值公式$thr \sigma\sqrt{2\ln N}$噪声标准差 $\sigma$ 用第一层细节系数 $cd$ 的中位绝对偏差来估计即 $\mathrm{median}(|cd|)/0.6745$noise_sigma np.median(np.abs(cd)) / 0.6745 thr noise_sigma * np.sqrt(2 * np.log(len(x))) cd_den pywt.threshold(cd, thr, modesoft) x_den pywt.idwt(ca, cd_den, waveletdb4, modesymmetric)pywt.threshold的mode参数有两个常用值soft会把系数向 0 收缩去噪结果平滑但可能过度圆滑hard保留大于阈值的系数原值能保住冲激形状但会在重建信号上引起轻微振铃。选哪个取决于信号背景语音和生物信号用软阈值更稳振动冲击信号用硬阈值保留幅值更合理。验证去噪参数是否合适有一个简单办法把噪声数据单独用同一组参数跑一遍观察重构残差是否呈现平稳白噪声特征如果残差里还有明显结构说明阈值偏低。第二组技巧是边界模式。pywt.dwt的mode参数控制信号边界的延拓方式常见的有zero补零和symmetric对称延拓以及periodization。补零会让边界出现不连续尤其信号两端不为零时重构结果会留下明显边缘伪影对称延拓更贴近自然信号的变化趋势。实际使用时分解和重构两端的mode必须完全一致否则重构误差会从 $10^{-13}$ 量级跳到 $10^{-3}$ 甚至更大。先检查重构误差再信任去噪结果具体取舍以重构误差曲线为准而不是以时频图好不好看为准。本文还有配套的精品资源点击获取