分离 3 通道信号所需的建议

信息处理 分解 多通道
2022-02-11 10:32:58

我正在做一个个人项目,我正在尝试制作一个使用力传感器作为技术基础的触摸屏。我制作的装备在方形平台下方有三个传感器,目的是通过三角测量识别平台上的触摸事件(包括力和位置)。

我有一个简单的“单一事件”案例工作正常,但是当有两个重叠的触摸事件时我遇到了麻烦。这将是多点触控功能的基础。

下面是一个参考图,可以帮助我解释我想要实现的目标:

在此处输入图像描述

我们有三个输入信号(A、B 和 C)以绿色显示,它们的总和信号以黑色显示。这些信号包含两个重叠的触摸事件。

我需要做的是生成两个“干净”的 3 通道信号,每个信号内部只有触摸事件。

理想的输出信号如下所示: - 第一个“触摸”事件信号(A-1、B-1 和 C-1)以蓝色显示 - 第二个“触摸”事件信号(A-2、B-2 和 C -2) 红色

我很确定这是可能的,因为我至少可以确定何时有两个重叠信号;通过使用以下算法:

  1. 确定结算之间的活动期
  2. 扫描活动期间
  3. 测量每个信号梯度与每个信号梯度之和的比值
  4. 如果比率偏离超过设定的阈值,则存在多个事件

有没有人知道如何完成这个或类似的事情?

任何建议或指导将不胜感激(尤其是外行术语),因为我在这方面是自学成才的。

非常感谢!

1个回答

我了解您收到 A、B 和 C,您想将其分成 A1、A2;B1, B2; C1,C2。

由此,您可以执行以下操作:将您的预期信号 A1 建模为某种脉冲形状(在这里,我假设它是一个 tanh 函数,与您的示例很接近)。然后,通常您可以对接收到的信号进行匹配滤波,以在两个脉冲的位置找到峰值。但是,由于您的脉冲是非有限的(即它们保持恒定非零),我决定使用它们的导数作为感兴趣的信号。然后,您可以找到如下内容:

n = -10:0.01:40;

noise = 0.5;

ntest = -5:0.01:5;
testpulse = tanh(ntest);
testpulse_diff = diff(testpulse);

% Amplitude of first pulse
A1 = -4;
start1 = 0;
% Amplitude of second pulse
A2 = 11;
start2 = 3;
% The input signal (sum + some noise)
sumOfBoth = A1*tanh(n-start1) + A2*tanh(n-start2) + sqrt(noise)*randn(1, length(n));

subplot(2,2,1);
plot(n, sumOfBoth)
title('sum signal');

subplot(2,2,2);
plot(testpulse_diff);
title('Diff of required pulse');

subplot(2,2,3);
plot(diff(sumOfBoth));
title('1st derivative of input');

subplot(2,2,4);
metric = xcorr(diff(sumOfBoth), testpulse_diff);
plot(metric);
hold on;
[peaks,locs] = findpeaks(abs(metric),'MinPeakHeight',0.01,'MinPeakDistance',100);

plot(locs, metric(locs), 'or');
hold off;

title('Metric with the detected peaks that correspond to the two signals');

这为您提供以下输出:

程序输出

从两个检测到的峰值,您可以得出两个峰值的幅度和时间位置。请注意,即使输入信号的一阶导数看起来像纯噪声,它也包含所有需要的信息。该信息是通过预期峰值和接收峰值之间的互相关来提取的。