用于电力系统异常检测的信号签名

信息处理 信号分析 信号检测
2022-02-12 03:22:18

我是一名电力系统工程师,正在做初步的工作,以检测电力系统中导致观察到的波形失真的特定异常。误报在这里是可以接受的,因为错过上述事件可能是灾难性的。这是信号的样子:

波形 1000 个样本

现在这个波形是一个异常模拟装置的输出,该装置已经输入了一个纯正弦波50 Hz,使用示波器捕获1000代表屏幕上显示内容的样本。

问题:

如何以编程方式检测一个周期的开始和结束位置,以及多个点代表零交叉的位置?

一旦我能做到这一点,我会对其进行 FFT,但可能需要解释方面的帮助。

我没有 DSP 的正式背景,但对所有合理的想法和建议持开放态度,并愿意学习。

附言

这里有1000样品

-3.15, -3.15, -3.24, -3.34, -3.53, -3.63, -3.73, -3.82, -4.02, -4.02, -4.11, -4.21, -4.31, -4.50, -4.50, -4.50, -4.60, -4.70, -4.79, -4.89, -4.99, -5.08, -5.08, -5.18, -5.28, -5.37, -5.47, -5.57, -5.66, -5.66, -5.86, -5.95, -5.95, -6.05, -6.15, -6.15, -6.24, -6.34, -6.44, -6.44, -6.53, -6.53, -6.63, -6.73, -6.73, -6.82, -6.92, -6.92, -6.92, -7.02, -7.02, -7.12, -7.12, -7.21, -7.21, -7.31, -7.31, -7.31, -7.31, -7.31, -7.41, -7.41, -7.41, -7.50, -7.41, -7.50, -7.41, -7.50, -7.41, -7.41, -7.41, -7.31, -7.31, -7.21, -7.12, -6.92, -6.63, -6.15, -5.37, -4.21, -2.76, -1.60, -0.82, -0.44, -0.24, -0.15, -0.05, -0.05, 0.05, -0.05, 0.05, -0.05, -0.05, 0.05, -0.05, -0.05, -0.05, -0.05, 0.05, -0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, -0.05, 0.05, -0.05, -0.05, 0.05, 0.05, 0.05, 0.05, 0.05, -0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.15, 0.05, 0.15, 0.15, 0.15, 0.24, 0.15, 0.15, 0.15, 0.24, 0.15, 0.15, 0.15, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.44, 0.44, 0.44, 0.53, 0.53, 0.53, 0.63, 0.73, 0.73, 0.82, 0.82, 0.92, 1.02, 1.02, 1.11, 1.21, 1.21, 1.40, 1.40, 1.50, 1.69, 1.69, 1.79, 1.89, 2.08, 2.08, 2.28, 2.37, 2.37, 2.57, 2.66, 2.76, 2.95, 2.95, 3.05, 3.24, 3.44, 3.44, 3.53, 3.73, 3.82, 3.92, 4.02, 4.11, 4.21, 4.31, 4.40, 4.50, 4.50, 4.60, 4.70, 4.79, 4.89, 4.99, 4.99, 5.08, 5.18, 5.28, 5.37, 5.47, 5.57, 5.66, 5.76, 5.76, 5.95, 5.95, 6.05, 6.15, 6.15, 6.24, 6.34, 6.44, 6.44, 6.44, 6.63, 6.73, 6.73, 6.73, 6.82, 6.92, 6.92, 7.02, 7.02, 7.12, 7.12, 7.21, 7.21, 7.21, 7.31, 7.31, 7.31, 7.41, 7.41, 7.41, 7.50, 7.50, 7.50, 7.50, 7.50, 7.50, 7.50, 7.50, 7.41, 7.50, 7.50, 7.41, 7.41, 7.31, 7.21, 7.02, 6.63, 6.15, 5.37, 4.21, 2.76, 1.69, 0.82, 0.44, 0.15, 0.05, 0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.15, -0.15, -0.15, -0.05, -0.15, -0.15, -0.15, -0.05, -0.05, -0.05, -0.05, -0.15, -0.15, -0.15, -0.15, -0.15, -0.15, -0.15, -0.15, -0.15, -0.15, -0.15, -0.15, -0.15, -0.15, -0.15, -0.15, -0.15, -0.15, -0.24, -0.24, -0.15, -0.24, -0.15, -0.24, -0.34, -0.24, -0.24, -0.24, -0.24, -0.24, -0.24, -0.34, -0.34, -0.24, -0.24, -0.34, -0.34, -0.34, -0.34, -0.44, -0.44, -0.44, -0.44, -0.53, -0.53, -0.53, -0.63, -0.63, -0.63, -0.73, -0.73, -0.82, -0.82, -0.92, -0.92, -1.02, -1.11, -1.21, -1.21, -1.31, -1.40, -1.50, -1.60, -1.69, -1.79, -1.89, -1.98, -2.08, -2.18, -2.28, -2.37, -2.47, -2.66, -2.76, -2.76, -3.05, -3.05, -3.24, -3.24, -3.34, -3.53, -3.63, -3.73, -3.82, -3.92, -4.11, -4.11, -4.21, -4.31, -4.40, -4.50, -4.50, -4.60, -4.70, -4.79, -4.89, -4.99, -5.08, -5.18, -5.28, -5.37, -5.37, -5.47, -5.57, -5.66, -5.76, -5.76, -5.95, -6.05, -6.05, -6.15, -6.15, -6.24, -6.34, -6.44, -6.44, -6.53, -6.53, -6.63, -6.73, -6.82, -6.82, -6.82, -6.92, -6.92, -7.02, -7.02, -7.12, -7.12, -7.12, -7.31, -7.31, -7.31, -7.31, -7.31, -7.41, -7.41, -7.31, -7.41, -7.41, -7.41, -7.50, -7.50, -7.41, -7.41, -7.41, -7.41, -7.31, -7.31, -7.21, -7.12, -6.92, -6.63, -6.15, -5.37, -4.21, -2.86, -1.69, -0.92, -0.44, -0.24, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, 0.05, 0.05, 0.05, 0.05, -0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, -0.05, 0.05, 0.05, 0.05, -0.05, -0.05, 0.05, -0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.15, 0.05, 0.05, 0.05, 0.15, 0.05, 0.15, 0.05, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.24, 0.15, 0.15, 0.24, 0.24, 0.24, 0.24, 0.15, 0.24, 0.24, 0.24, 0.24, 0.34, 0.34, 0.34, 0.34, 0.44, 0.44, 0.44, 0.53, 0.53, 0.53, 0.53, 0.63, 0.63, 0.73, 0.73, 0.82, 0.82, 0.92, 1.02, 1.02, 1.11, 1.21, 1.31, 1.31, 1.40, 1.50, 1.60, 1.69, 1.89, 1.89, 1.98, 2.08, 2.18, 2.28, 2.47, 2.57, 2.66, 2.76, 2.86, 3.05, 3.15, 3.24, 3.34, 3.44, 3.53, 3.73, 3.82, 3.82, 4.02, 4.11, 4.21, 4.40, 4.40, 4.50, 4.50, 4.60, 4.60, 4.79, 4.89, 4.89, 4.99, 5.18, 5.18, 5.28, 5.37, 5.47, 5.57, 5.66, 5.76, 5.76, 5.86, 5.95, 6.05, 6.15, 6.15, 6.24, 6.34, 6.44, 6.53, 6.53, 6.63, 6.63, 6.73, 6.73, 6.82, 6.82, 6.92, 7.02, 7.02, 7.12, 7.12, 7.21, 7.21, 7.31, 7.31, 7.31, 7.31, 7.41, 7.50, 7.41, 7.41, 7.50, 7.50, 7.50, 7.50, 7.50, 7.50, 7.50, 7.50, 7.50, 7.41, 7.50, 7.41, 7.31, 7.21, 7.02, 6.73, 6.15, 5.47, 4.40, 2.86, 1.69, 0.92, 0.44, 0.15, 0.15, 0.05, 0.05, -0.05, -0.05, -0.05, -0.05, 0.05, 0.05, 0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.15, -0.05, -0.05, -0.05, -0.05, -0.05, -0.15, -0.05, -0.05, -0.05, -0.15, -0.05, -0.15, -0.15, -0.05, -0.15, -0.05, -0.05, -0.15, -0.05, -0.15, -0.15, -0.15, -0.15, -0.05, -0.24, -0.15, -0.15, -0.15, -0.15, -0.15, -0.15, -0.15, -0.24, -0.15, -0.15, -0.15, -0.15, -0.15, -0.15, -0.24, -0.15, -0.15, -0.24, -0.24, -0.24, -0.24, -0.24, -0.24, -0.24, -0.34, -0.34, -0.34, -0.24, -0.34, -0.34, -0.34, -0.44, -0.44, -0.44, -0.44, -0.53, -0.53, -0.53, -0.63, -0.63, -0.63, -0.73, -0.63, -0.73, -0.82, -0.92, -1.02, -1.02, -1.11, -1.11, -1.21, -1.31, -1.40, -1.50, -1.60, -1.69, -1.79, -1.79, -1.98, -2.08, -2.08, -2.37, -2.37, -2.57, -2.66, -2.76, -2.86, -2.95, -3.05, -3.24, -3.34, -3.44, -3.44, -3.53, -3.73, -3.82, -3.92, -4.02, -4.11, -4.11, -4.31, -4.50, -4.40, -4.60, -4.60, -4.70, -4.79, -4.89, -4.99, -4.99, -5.18, -5.18, -5.28, -5.37, -5.47, -5.57, -5.66, -5.76, -5.76, -5.86, -5.95, -6.05, -6.15, -6.24, -6.24, -6.34, -6.34, -6.44, -6.53, -6.53, -6.63, -6.73, -6.73, -6.82, -6.82, -6.92, -6.92, -7.02, -7.02, -7.12, -7.12, -7.12, -7.21, -7.31, -7.31, -7.31, -7.31, -7.41, -7.41, -7.41, -7.41, -7.41, -7.50, -7.41, -7.41, -7.41, -7.50, -7.41, -7.41, -7.41, -7.31, -7.21, -7.12, -6.92, -6.63, -6.15, -5.47, -4.40, -2.95, -1.69, -0.92, -0.53, -0.24, -0.15, -0.05, -0.05, -0.05, 0.05, -0.05, 0.05, 0.05, 0.05, -0.05, -0.05, -0.05, -0.05, -0.05, 0.05, -0.05, -0.05, -0.05, -0.05, -0.05, 0.05, 0.05, -0.05, 0.05, -0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, -0.05, 0.05, 0.05, 0.15, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.15, 0.05, 0.05, 0.05, 0.05, 0.05, 0.15, 0.15, 0.15, 0.05, 0.05, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.24, 0.15, 0.15, 0.15, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.34, 0.24, 0.34, 0.34, 0.34, 0.34, 0.34, 0.44, 0.44, 0.34, 0.44, 0.53, 0.53, 0.63, 0.63, 0.82, 0.73, 0.82, 0.73, 0.92, 1.02, 1.02, 1.11, 1.11, 1.21, 1.31, 1.40, 1.50, 1.60, 1.69, 1.79, 1.89, 1.98, 2.18, 2.28, 2.37, 2.47, 2.57, 2.66, 2.76, 2.95, 3.05
3个回答

首先,您需要精确定义循环起点的含义。您的参考究竟是什么决定了 t=0 以及究竟是什么决定了周期的开始

您的信号由基波和大量奇次谐波组成。基础是最强的。您可以轻松确定“基本的开始”,如下所示:

将信号与 50 Hz 的复指数相乘。对结果求和(这将是一个复数)。计算相位和相关的时间延迟。在您的情况下,这是 238.38 个样本,大致匹配波形中的最大值。

您也可以使用 FFT 执行此操作,但您需要确保感兴趣的频率(50 Hz、150 Hz、250 Hz 等)在 FFT 网格上。假设采样率为 20 kHz,您可以使用 800 个点的 FFT 长度,这为您提供 25 Hz 的频率分辨率,50Hz 将映射到 bin 2,150 Hz 映射到 bin 6,等等。

您还可以跟踪最大值和最小值,这比此波形的过零要容易得多。

[编辑:添加 Matlab 代码如何推导基本延迟] 乘以复指数与乘以余弦和正弦波基本相同。但是,这仅在您的采样时钟相对于 50 Hz 基频没有太大漂移并且您感兴趣的延迟是基频本身的延迟时才有效。高次谐波实际上具有不同的延迟。

% assume the signal is in variable x as a column vector
nx = length(x)
fs = 20000; % sample rate (guess on my part)
%
% create a complex exponentional at 50 Hz
cx = exp(j*2*pi*(0:nx-1)'*50/fs);
% scalar product
zx = sum(cx.*x);
% convert into a delay by calcualting pahse, wrapping and converting to 
% samples
za = angle(zx); if(za < 0), za = za + 2*pi; end
% phase to delay in samples
dx = fs * ( za/(2*pi)/50);
% plot original wave form delayed cosine
plot([x max(x)*cos(2*pi*50*((0:nx-1)' - dx)/fs)])

要以编程方式检测该信号的一个周期的开始和结束位置,最简单的方法是检测曲线梯度的符号何时翻转 - 这将为您提供信号的极值。

为此,只需获取当前样本与前一个样本之间的差异 - 当此值更改符号时,您已达到极值。

似乎有一个隐含的假设,即感兴趣的信号具有 50Hz 的基频。如果是这种情况,为什么不只收集 N*T(T 是采样时钟的周期)已知刚好超过感兴趣信号的周期(1/50Hz)的信号的 N 个连续样本?只要您捕获一个完整的周期,FFT 就不会关心您在哪里开始或停止您的周期。