Matlab 带误报的过零检测

Matlab 带误报的过零检测,matlab,signal-processing,Matlab,Signal Processing,我有这个信号,如图所示,我检测到了几个过零点。但其中有些是假阳性。实际上,真正的零交点是33.15、33.31和33.49美国。您知道如何避免检测到误报,或者至少如何消除误报吗?您可以首先根据局部最大值或最小值的突出程度对信号区域进行选通: prom_threshold = 50; % adjust this value based on the amplitude of your signal. [~,prom] = islocalmax(signal); ind = find(prom &g

我有这个信号,如图所示,我检测到了几个过零点。但其中有些是假阳性。实际上,真正的零交点是33.15、33.31和33.49美国。您知道如何避免检测到误报,或者至少如何消除误报吗?

您可以首先根据局部最大值或最小值的突出程度对信号区域进行选通:

prom_threshold = 50; % adjust this value based on the amplitude of your signal.
[~,prom] = islocalmax(signal);
ind = find(prom > prom_threshold);
if numel(ind) < 2
    error('Signal not found');
end
gated_signal = signal(ind(1):ind(end));

% Do your zero crossing algorithm.

prom_阈值=50;%根据信号的振幅调整此值。
[~,prom]=islocalmax(信号);
ind=查找(prom>prom_阈值);
如果numel(ind)<2
错误(“未找到信号”);
结束
门控信号=信号(ind(1):ind(end));
%做你的过零算法。

阅读和阅读。

我没有定义它们,我先验地知道它们是错误的时间点。其他点在我看来就像交叉点。不过,在“网格打开”的情况下更容易看到。如果零交叉的定义取决于首先达到某个振幅,则可以构建“isLarge=abs(信号)>limit”的逻辑,然后在获得的交叉上循环,如果在下一次交叉前逻辑没有超过,则将其删除。如有(IsLarge(idxLastValidCross:idxNextPotentialCross)),则取下_;等等。是否可以使用平均值等方法平滑信号,然后获得零点两侧的外部值。如果它们的差异大于阈值,那么你可以考虑过零点。我是通过计算LoalMalimun来做的,但是它太费力了,一点也不直观。我有一个问题要问你,如果我把这个区域放在突出位置上,那就意味着我需要调整时间窗口的大小,对吗?因为为了执行过零算法,我需要两个信号,第二个是与振幅信号大小相同的时间信号。如何在时间向量中考虑这些索引?Best@CirugiaoM很高兴你明白了。为了完整起见,下面是我要做的。我会先做过零算法,并使用
ind(1)
ind(end)
作为有效性检查:那些
x
值超出
ind(1)
ind(end)
范围的过零点为假阳性。