首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >对七位半电压表内部两个滤波器级联建模(以 DM 7275 为例)

对七位半电压表内部两个滤波器级联建模(以 DM 7275 为例)

作者头像
云深无际
发布2026-01-07 14:39:51
发布2026-01-07 14:39:51
490
举报
文章被收录于专栏:云深之无迹云深之无迹

我们今天来研究一下直流表的滤波器,作用就是稳定读数,代价是输出速率和测量时间变慢。

全网最详细NPLC算法解读(含与SINC3滤波器对比)

NPLC算法: 本质属于boxcar 平均滤波器(SINC家族)

积分时间 = 第 1 级低通 + 工频抑制

说明书 6.1 里提到“设置积分时间”,本质上就是 A/D 本身的积分型滤波。

image-20251224123932245
image-20251224123932245

可以把 DM7275 看成一个“积分型 ADC(相当于 sinc 滤波器):积分时间 设成 1 PLC、10 PLC …这里 PLC = 电网周期(50 Hz 时 1 PLC = 20 ms)。

在一个积分周期内,ADC 对输入电压做时间平均:

所以它相当于一个矩形窗口的积分低通滤波器。频率响应大致:

在 电网频率处有 深陷波,50 Hz、150 Hz、250 Hz… 都被强烈抑制

越长:→ 带宽越窄,噪声越小,读数更稳定;→ 但更新时间越慢

平滑化(SMOOTH)= 移动平均 FIR 滤波器

说明书“平滑化功能”那一段给出了公式:

:第 次测量值(已经经过积分 ADC 的结果)

:当前是第几次测量

:平均次数(可以设 2~100 次)

这就是一个标准的移动平均滤波器:每来一个新读数,就把最近 个点平均一次;相当于一个长度为 的 FIR 低通滤波器,冲激响应是矩形窗。

在 z 域里:

它的幅频特性是一个 sinc 形状:直流增益 = 1(不会改变慢慢漂移的基准值)

-3 dB 截止频率约为, ( 是更新率)

在 处有零点(完全抑制那些频率分量)

A 设得越大 → 平均窗口越长 → 读数越稳、随机噪声越小;但也意味着:瞬间的变化要过 个样点才完全反映出来,显示的就是一个“超低带宽”的低噪声 DC 电压

EXT I/O 的“输入滤波器” = 去抖 / 抗干扰

说明书 11.4 讲的“滤波器”,是指 外部输入端(EXT I/O) 的输入滤波:

DM7275 可以从外部信号(TRIG 输入等)接收触发、判定、接触检查信号;这些端子上经常接 PLC、继电器、光耦之类的东西,容易出现窄脉冲、毛刺、抖动。

“滤波器”在这里就是一个数字去抖滤波:只有当输入连续稳定为高电平(比如 >1 ms 或 >5 ms)才当成有效信号;短于滤波时间的毛刺全部忽略;目的是防止外部噪声导致“误触发”、“误判定”。

这个滤波不作用在测量值本身,只作用在控制信号(TRIG、判定输入等)上。

详细建模 PLC+移动平均 FIR 滤波器,级联起来

建一个统一的时间轴

第一级:PLC 积分 = 连续时间矩形积分滤波

频率响应(连续时间)

第二级:移动平均 FIR(长度 A)

级联:总冲激响应 & 总频率响应

冲激响应视角

整个系统等效为:先在连续时间上用矩形窗 积分;再在“每个积分结果”上对最近 A 个结果做平均。

如果把时间细分得足够细(比如内部采样很多次),可以把二者都看作离散的方窗,它们的卷积会得到一个“更宽一些的三角窗”:总窗口长度大约 ;权重是从 0 慢慢爬升、再慢慢下降(比单纯的矩形平均更“柔和”)

对于一个瞬时变化(比如 LM399 旁边有人摸了一下板子导致 5 µV 步进)不会立刻在显示上反映出来,而是被这个“宽窗口”慢慢平均掉——看到的是“几秒钟时间缓慢爬到新值”。

频率响应视角

直觉:第一级已经是一道低通,再叠一层低通,等效带宽进一步缩小,白噪声会再被压缩一轮。

对白噪声的效果:等效噪声带宽 ENBW

来个具体例子(10 PLC + A=10)

仿真

用「10 PLC + 平滑 A=10」做可视化,直观看看这两级滤波器叠在一起是什么样子。(如果有详细的滤波器参数就可以绘制这个图,以后我设计仪器就把这个加进来)

参数: 工频 50 Hz → 1 PLC = 20 ms 积分时间: 积分后采样率: 移动平均长度:A = 10(等于再平均 10 个读数)

PLC 积分滤波(10 PLC)
PLC 积分滤波(10 PLC)

PLC 积分滤波(10 PLC)

这张是 积分窗口本身的频率响应(连续时间 sinc):左边低频(<0.1 Hz)几乎 0 dB,说明 直流 & 超慢变化完整保留;接近 1–2 Hz 开始迅速往下掉,到了几 Hz 以上已经是几十 dB 的抑制;工频 50 Hz 的位置其实已经远在这个图右边外面了,在那里是一个完整的零点(理想情况下 -∞ dB)。

直觉:10 PLC 积分已经把「50 Hz 以上的东西」基本全融成一团平均掉,只剩下面向“<几 Hz 的慢变化”。

移动平均 FIR(A = 10)
移动平均 FIR(A = 10)

移动平均 FIR(A = 10)

这是第二级 长度 10 的滑动平均 在 5 Hz 采样率下的响应:直流 0 dB。

大约在 ~0.2 Hz 左右开始往下滚,第一零点在 ;后面是一串等间距的零点(0.5 Hz、1 Hz、1.5 Hz…),是典型箱形 FIR 的频谱。

这一级是专门在 “已经积分后的慢信号” 上再做一次低通,把 0.5 Hz 以上的波动(即「几秒内」的变化)进一步抹平。

级联后的总响应(PLC + 移动平均)
级联后的总响应(PLC + 移动平均)

级联后的总响应(PLC + 移动平均)

这一张是 两级滤波器的幅频响应相乘:低频部分(<0.05–0.1 Hz)依然保持在 0 dB 左右:→ 这就是真正想看的「LM399 的超慢漂移」;到 0.1–0.5 Hz 开始明显衰减:→ 也就是「几秒级」甚至「十几秒内」的变化都会被模糊;再往上是深度抑制 + 多个零点,结合第一层积分的 sinc,整体看起来就是一个超级窄带的低通

这两级串起来之后,整台表对「分钟以上的缓慢变化」几乎 100% 放行,对「几秒、几十毫秒、工频的噪声」全部当噪声,疯狂平均掉。

怎么用这些图来“选参数”

想让读数更安静

增大 (积分更长) → 图1 主瓣更窄

增大 A(平滑更多点) → 图2 主瓣更窄,零点间距变小

综合效果就是图3 带宽继续变窄,噪声 RMS 按 往下走。

但如果想看「1 秒以内的动态」:就要反过来减小积分时间和 A,否则图3 在 1 Hz 一带已经被压到几十 dB,你根本看不到这些变化。

后记

PLC 积分:在连续时间上对输入做一个 的矩形平均 ⇒ sinc 低通,精确抑制工频。

移动平均 FIR:在积分结果上再对最近 A 个点做平均 ⇒ 离散的 boxcar 低通。

级联后的结果

冲激响应 ≈ 一块宽度约 的“平滑三角窗”;频率响应 = 两个 sinc 的乘积,带宽更窄,50/60 Hz 仍被强压;白噪声 RMS 约随 缩小,代价是响应时间变成几秒甚至几十秒。

这套“PLC + 移动平均”的级联滤波,本质上就是在用时间换噪声,把系统变成一个 超窄带、只关注 10⁻⁴ Hz 级别慢变化 的 DC 表。

代码

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt

# Parameters
f_mains = 50.0          # Hz
PLC = 10                # integration time in PLC
T_int = PLC / f_mains   # integration time (s)
fs = 1 / T_int          # sampling rate after integration (Hz)
A = 10                  # moving average length

T_int, fs
代码语言:javascript
复制
# Frequency axis for visualization
f_max = 5.0   # up to Nyquist-ish
f = np.linspace(0.001, f_max, 4000)  # avoid zero to prevent division by zero

# First-stage (PLC integration) frequency response magnitude
H1 = np.sin(np.pi * f * T_int) / (np.pi * f * T_int)
H1_mag = np.abs(H1)

# Second-stage (moving average FIR) frequency response magnitude
omega = 2 * np.pi * f / fs  # digital radian frequency
H2 = (np.sin(A * omega / 2) / (A * np.sin(omega / 2))) * np.exp(-1j * omega * (A - 1) / 2)
H2_mag = np.abs(H2)

# Total response
H_total_mag = H1_mag * H2_mag

# Plot 1: PLC integration only
plt.figure(figsize=(8, 4))
plt.semilogx(f, 20 * np.log10(H1_mag))
plt.xlabel("Frequency (Hz)")
plt.ylabel("Magnitude (dB)")
plt.title("PLC Integration Filter (N_PLC = 10) Frequency Response")
plt.grid(True, which='both', ls='--')
plt.show()

# Plot 2: Moving average only
plt.figure(figsize=(8, 4))
plt.semilogx(f, 20 * np.log10(H2_mag))
plt.xlabel("Frequency (Hz)")
plt.ylabel("Magnitude (dB)")
plt.title("Moving Average FIR (A = 10) Frequency Response")
plt.grid(True, which='both', ls='--')
plt.show()

# Plot 3: Cascaded response
plt.figure(figsize=(8, 4))
plt.semilogx(f, 20 * np.log10(H_total_mag))
plt.xlabel("Frequency (Hz)")
plt.ylabel("Magnitude (dB)")
plt.title("Cascaded PLC + Moving Average Frequency Response")
plt.grid(True, which='both', ls='--')
plt.show()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 积分时间 = 第 1 级低通 + 工频抑制
  • 平滑化(SMOOTH)= 移动平均 FIR 滤波器
  • EXT I/O 的“输入滤波器” = 去抖 / 抗干扰
  • 详细建模 PLC+移动平均 FIR 滤波器,级联起来
  • 建一个统一的时间轴
  • 第一级:PLC 积分 = 连续时间矩形积分滤波
  • 频率响应(连续时间)
  • 第二级:移动平均 FIR(长度 A)
  • 级联:总冲激响应 & 总频率响应
    • 冲激响应视角
    • 频率响应视角
  • 对白噪声的效果:等效噪声带宽 ENBW
  • 来个具体例子(10 PLC + A=10)
  • 仿真
  • 怎么用这些图来“选参数”
  • 后记
  • 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档