震惊,怼老板高速怒写六千字!直接解剖 SINC 函数(非常通俗版)
上篇文章其实已经写的挺全面了,但是对于 SINC 这个函数,还可以换一个角度:方波做傅里叶变换/傅里叶级数”。这一视角非常重要因为sinc 函数 = 方波(矩形脉冲)在频域里的自然形状。 另外也可以回归它作为函数的本身性质做研究。
矩形 ↔ sinc
方波 / 脉冲 / 门函数在时域里越方 → 在频域里的形状越像 sinc
频域“sinc 主瓣 + 无穷旁瓣”;而方波只是“无限长周期矩形脉冲列”,因此它的傅里叶变换由一串 sinc 加采样点构成。
从“单个矩形脉冲”说起:sinc 最原始的来源
先看一个最基础的信号:
就是一个 宽度为 的矩形脉冲。
它的傅里叶变换
计算得到:
这就是标准 sinc,已经在前面的图里看到过。
解释:为什么一定是 sinc?
积分上界、下界是固定常数 → 在频域中出现 ;频率变量在分母里是因为“对指数积分时出现 ”这两个表达是从 傅里叶变换 的角度解释矩形窗在频域中为什么会出现 sinc 函数。
“积分上界、下界是固定常数 → 在频域中出现 ”
这个意思是说,当你对一个信号进行 傅里叶变换 时,信号的时域表示(比如矩形窗)和频域表示(比如 sinc 函数)是通过积分关系连接的。
傅里叶变换的基本形式是:
这里, 是时域信号, 是频域信号。特别地,当时域信号是 矩形窗(rectangular window) 时,它在时域上是有限长度的,具有一个固定的上下界,例如在 到 之间为 1,其余地方为 0。
傅里叶变换后的频域响应就是:
这个积分是一个常数区间的积分,因为矩形窗在时域中有固定的时长 。计算这个积分:
这个结果正是 sinc 函数,其主要形态为:
为什么出现 ?
因为积分的形式:时域信号为矩形窗时,傅里叶变换对应的就是一个 指数函数 在有限区间上的积分。这个积分结果会产生一个 函数,而 就是傅里叶变换中常见的 sinc 形状;矩形窗的傅里叶变换由于时域信号的固定时间范围,导致频域中出现了一个 sinc 函数,它的主瓣宽度和时域信号的时长 有关。
“频率变量在分母里是因为’对指数积分时出现 ’”
这个意思是说,傅里叶变换 中 频率变量 出现在分母中,源自于在 时域信号与复指数的积分 过程中,所得到的频域响应公式中有一个与 频率 相关的项。
具体来看,傅里叶变换的公式是:
这里 指数项 产生了 **复频率变量 **,当你对时域信号进行积分时,得到的频域响应有一个与频率 成反比的因子。
那为什么会有 的项呢?
对于矩形窗而言,时域的信号会有一个固定的长度,而在做傅里叶变换时,复指数函数 会因其 频率成分的变化,在频域产生一个以 为尺度的衰减项;最后频率变量出现在分母中,意味着频率 越大,频域响应会越小。这正是 高频分量衰减得更快的原因,也就是 sinc 函数旁瓣的衰减速度;正是因为频率 在分母中的项,体现了高频分量衰减的趋势,造成了 sinc 函数旁瓣 的出现。
因此:
只要一个信号在时域有“硬截断”,频域一定会出现 sinc。
任何矩形窗、时间限制、片段截取……频域都会出现 sinc。
从一个矩形脉冲列到“方波”:周期采样 → sinc 加谐波
方波(周期矩形波)定义
设周期为 ,占空比为 50% 的方波:
这是一个“周期性矩形脉冲列 + 直流移位”。
方波傅里叶级数:谐波系数包含 sinc
计算第 k 次谐波系数(只取偶性简化):
结果是:
更准确地(50% duty):
只存在奇次谐波(k=1,3,5,…),且幅值:
而这个形式就是 sinc 的采样点:
方波的频谱只有 奇次谐波,衰减与 1/k 成正比;这其实就是 sinc 主瓣在奇数点上被“采样”出来的效果。
方波并不是只和“1/k”衰减有关,它本质是 sinc 形状的频谱被周期采样。
时域卷积 / 频域乘法视角:方波 = 矩形脉冲 * Dirac comb
方波可以写成:
傅里叶变换:
rect(t) → sinc
impulse train → impulse train(频域 comb)
因此
也就是:

方波频域 = sinc 形状的包络 + 离散谐波 lines
方波的频谱长这样:主瓣结构由 sinc 决定,各个谐波的幅度刚好落在 sinc 包络上,所以越高频谐波 amplitude 越小(~1/k)
这等于从系统角度再证明一遍:
方波 = sinc 包络下的离散 harmonics。
从建模角度:方波是“sinc 的频域采样”
如果我们用数学建模的风格写,会是这样:
单个矩形脉冲 → sinc
无限脉冲列 → 方波(周期)
傅里叶变换使用卷积与采样性质:
因此各个谐波值是:
也就是:
方波谐波 = sinc 包络在 kf0 处的采样值
常见的公式:
其实就是“sinc 形状的采样”(50% duty 时奇次点落在 sinc 的凹凸位置)。
(图我放在了下面)
单个矩形脉冲 → 连续频谱就是 sinc
我们先看最原始的“方”的东西:一个有限时长的矩形脉冲:
它的傅里叶变换:
数值积分的 |P(f)| 与理论 T·|sinc_norm(fT)| 完全重合
时域:宽度 T 的矩形
频域:主瓣宽度 ≈ 2/T,零点间隔 1/T 的 sinc
这已经把“时宽 × 带宽 ≈ 常数”的味道给出来了:
再强调一句你未来在脑子里要牢记的 pair:矩形 ↔ sinc
周期方波 = “sinc 包络 + 离散谐波”
构造一个周期方波(占空比 50%、幅度 -1/+1):
傅里叶级数告诉我们:
只包含奇次谐波:k = 1,3,5,…
谐波幅度:
而这其实可以从“矩形脉冲的 sinc 频谱”采样得到:方波可以看成“周期性的矩形高电平 + 直流”,频谱 = 单个矩形的 sinc 频谱 × 周期冲激列(频域采样),于是:
其中 是高电平持续时间(对于 50% duty,),代入具体数字就得到恰好等价于 的形式。
FFT vs 理论的数值对比(第二组图)
用 Python 做的是:
以 fs=2000 Hz、f0=5 Hz 生成 4 个周期的方波;做 N=8192 点 FFT,取正频率部分;对每个 k=1..25 的谐波,从 FFT 中找最近的频率点,估计幅度;和理论值 (仅奇数 k 非零)作对比。
在图中看到:stem(实线杆)是 FFT 估计的谐波;虚线是理论 ;二者几乎完全贴合——证明“方波谐波幅度 = sinc 包络采样点”这一事实在数值上成立。
SINC 包络可视化
又画了一张“包络图”:
连续频率 f 上画一个归一化的 sinc 包络(只保留形状);在 k·f0 这些点上画出理论谐波幅度(同样归一化);
会看到:
所有谐波都老老实实沾在 sinc 的主瓣和旁瓣上。
将来看任何“脉冲列 / 方波 / PWM”的频谱很有用—只要你知道单个脉冲的 sinc 形状,就知道整串谐波的包络大概长什么样。
占空比 D 变化:脉宽变 → sinc 宽度变 → 频谱形状变
接着做了第三组图:不同占空比 D 的周期矩形波频谱。
时间域建模
设周期 ,占空比 D,高电平持续时间 :
本质:每周期有宽度为 的矩形脉冲(加一个偏置)。
单周期矩形的频谱依然是 sinc
单周期矩形:
所以无论占空比 D 是多少,频谱包络永远是 sinc,只是宽度和零点位置变了:
脉宽越窄(D 小):主瓣越宽,频谱能量撒得更远(高频更多)。
脉宽越宽(D 大):主瓣越窄,频谱更集中在低频。
FFT 可视化
在代码里我选了 D=0.2, 0.5, 0.8 三种情况,生成一个周期矩形波:
xD = ((t2 % T0_2) < (D * T0_2)).astype(float) * 2 - 1
做 FFT,取幅度归一化后画在 dB 尺度上(0~20 倍基频)。
可以很直观地看到:D 小(窄脉冲)谱主瓣更宽,高频肩部抬得更高;D 大(宽脉冲)谱主瓣更窄,高频比较快掉下去。
占空比改变 = 改变单个矩形的宽度 τ → 改变 sinc(fτ) 的主/旁瓣结构→ 谐波之间的相对强弱全都随之改变。