📖 一句话概括
预畸变,就是“先把要求故意说歪,等机器自动掰直后,结果就刚刚好”。
🎯 一个生活中的比喻:订做弯曲的尺子
想象你要网购一把塑料直尺,但卖家说:
“我们的机器做出来的尺子会自动变弯,做成直的会变弯,做成弯的反面会变直。”
你该怎么办?
正常思路(错误示范):
“我要一把20厘米的直尺。” → 机器做出来 → 尺子变弯了 → 量东西不准 ❌
预畸变思路(正确做法):
“请给我做一把21厘米的弯尺(按我的计算弯这么多)。”
→ 机器做出来 → 尺子自动变直了→ 正好是20厘米的直尺 ✅
这个“故意要求做弯尺”的过程,就是预畸变。
📡 在数字滤波器里到底发生了什么?
1.问题根源:双线性变换的“扭曲效应”
数字滤波器设计时,有一个关键步骤叫双线性变换,它有个怪毛病:
它会把所有频率像捏橡皮泥一样压缩,高频被压得更扁
具体公式:
模拟频率Ω = tan(数字频率ω/2)
这意味着:如果你直接告诉它“我要在数字频率100Hz处截止”,它实际做出来的截止点不是100Hz,而是被压缩后的某个值。
2.预畸变怎么解决?
思路:既然知道它会压缩,那我故意把要求说高点。
举个例子:
你实际想要:数字频率100Hz处截止
但机器会压缩,100Hz会被压成比如80Hz
预畸变做法:故意告诉机器“我要在125Hz处截止”
机器压缩后:125Hz → 正好变成100Hz✅
🔄 完整流程对比
没有预畸变(错误流程):
你:我要数字滤波器在100Hz截止 ↓ 直接设计模拟滤波器,在100Hz处设计 ↓ 用双线性变换转为数字滤波器 ↓ 结果:实际截止在80Hz(被压缩了)❌
有预畸变(正确流程):
你:我要数字滤波器在100Hz截止 ↓ 预畸变计算:需要用125Hz作为设计目标 ↓ 设计模拟滤波器,在125Hz处设计 ↓ 用双线性变换转为数字滤波器 ↓ 神奇的事情发生:125Hz被压缩 → 正好变成100Hz ✅
🎯 预畸变的核心思想
三个关键词理解:
| 概念 | 比喻 | 在滤波器中 |
|---|---|---|
| 1. 扭曲规律 | 机器会把尺子做弯 | 双线性变换会压缩频率 |
| 2. 预畸变 | 故意订做弯尺 | 故意提高设计频率 |
| 3. 自动矫正 | 机器做出来自动变直 | 变换后频率正好对 |
记住这个黄金法则:
你想让它做成A,就要告诉它做成B,因为它的加工过程会把B变成A。
📊 实际设计中的一步
在实际MATLAB设计中,预畸变是自动完成的:
% 你想设计数字低通滤波器,截止在100Hz digital_freq = 100; % 你真正想要的数字频率 % 预畸变自动发生(在buttord等函数内部): analog_freq = 2*tan(pi*digital_freq/fs); % 这就是预畸变公式 % 然后用这个analog_freq去设计模拟滤波器 % 再变换回数字域时,就正好在100Hz截止了你不用手动计算,但要知道背后的原理。
🎓 为什么叫“预”畸变?
预= 预先、提前
畸变= 扭曲、变形
连起来:预先知道它会变形,所以提前反着变形,让它变回来后正好是我们要的。
就像你要往东走100米,但知道路上有个传送带会把你向西送20米,于是你预先向东走120米,传送后正好到目标点。
💡 一句话总结给初学者
预畸变就是:因为知道设计工具(双线性变换)有“压缩频率”的坏习惯,所以我们故意把要求说高一些,等它压缩完,结果就正好是我们真正想要的。