Matlab 检测信号数据中的主要事件?
如果我有一个如下的信号,我将如何找到两个“重大事件”的开始和结束(事件开始处用绿色箭头表示,结束处用红色箭头表示) 我已经尝试过了,但似乎无论我如何处理Matlab 检测信号数据中的主要事件?,matlab,filtering,signal-processing,standard-deviation,trend,Matlab,Filtering,Signal Processing,Standard Deviation,Trend,如果我有一个如下的信号,我将如何找到两个“重大事件”的开始和结束(事件开始处用绿色箭头表示,结束处用红色箭头表示) 我已经尝试过了,但似乎无论我如何处理滞后、阈值和影响变量,它要么对图的开头、中间和结尾的微小变化(没有重大事件)做出反应,要么根本没有反应 我不能简单地确定信号是否高于一个固定的阈值,因为信号的强度可能会变化,因此我需要一些方法来检测信号何时偏离“背景噪声”。此外,信号有时可能呈整体趋势,如下图所示 我已经在对信号应用一个简单的低通和高通滤波器。我想要的是下图中的橙色信号(我
滞后
、阈值
和影响
变量,它要么对图的开头、中间和结尾的微小变化(没有重大事件)做出反应,要么根本没有反应
我不能简单地确定信号是否高于一个固定的阈值,因为信号的强度可能会变化,因此我需要一些方法来检测信号何时偏离“背景噪声”。此外,信号有时可能呈整体趋势,如下图所示
我已经在对信号应用一个简单的低通和高通滤波器。我想要的是下图中的橙色信号(我手动绘制它只是为了说明)
你可以尝试一些东西。这两种选择在某种程度上取决于知道预期的异常事件的类型 假设您知道事件的长度通常为100个样本。 创建此信号并检查峰值
indicator = filtfilt(ones(1, 100) ./ 100, 1, abs(signal));
这看起来有点像你的橙色信号
其次,您可以尝试检查信号中的样本到样本的变化
indicator = abs(diff(signal));
如果你真的想全力以赴,试试一维卷积神经网络。这需要标记的训练数据 你可以试试看。这两种选择在某种程度上取决于知道预期的异常事件的类型 假设您知道事件的长度通常为100个样本。 创建此信号并检查峰值
indicator = filtfilt(ones(1, 100) ./ 100, 1, abs(signal));
这看起来有点像你的橙色信号
其次,您可以尝试检查信号中的样本到样本的变化
indicator = abs(diff(signal));
如果你真的想全力以赴,试试一维卷积神经网络。这需要标记的训练数据 我建议使用中值滤波器进行背景提取,然后寻找零交叉点。如果你能提供一个样本数据,也许是一个txt文件,我可以提供帮助。至于将这些事件从背景信息中分离出来,你可能需要查看具有高样本熵的信号部分。我建议使用中值滤波器进行背景提取,然后寻找零交叉点。如果你能提供一个样本数据,也许是一个txt文件,我可以提供帮助。至于将这些事件从背景信息中分离出来,你可能需要查看具有高样本熵的信号部分。