Advice needed for separating 3-channel signals I'm working on a personal project, where I'm trying to make a touch screen that uses force sensors as the basis of the technology. The rig I've made has have three transducers underneath a square platform, with the goal of identifying touch events on the platform (with both the force and location) via triangulation.

I've got the simple "single event" case working fine, but I'm having trouble when there are two overlapping touch events. This would be the basis of a multi-touch function.

Below is a reference graph to help me explain what I'm trying to achieve: 



We have three input signals (A, B &amp; C) shown in green, with their summed signal in black. These signals contain two touch events, which overlap. 

What I need to do is generate two "clean" 3-channel signals, each with only touch event inside.

The ideal output signals are shown with:
- the first "touch" event signals (A-1, B-1 &amp; C-1) coloured in blue
- the second "touch" event signals (A-2, B-2 &amp; C-2) coloured in red

I'm pretty sure this is possible, as I can at least identify when there are two overlapping signals; by using the algorithm below:


identifying the activity period between settles
scan over the activity period
measure the ratio between each signals gradient and the gradient of the sum each signal
If the ratio is off by more than a set threshold then there's more than one event


Does anyone have an idea on how to accomplish this or something similar?

Any advice or steers would be appreciated (especially in layman terms) as I'm self taught in this area.

Thanks a lot!
I understand that you receive A, B, and C and you want to separate it into A1, A2; B1, B2; C1, C2. 

From this, you can do the following: Model your expected signal A1 as some pulse shape (here, I assume its a tanh function, which is close to your example). Then, normally you can perform matched filtering on the received signal to find peaks at the position of your two pulses. However, since your pulses are non-finite (i.e. they remain constant non-zero), I decided to use their derivative as the signal of interest. Then, you can find something like this:

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');


Which gives you the following output:



From the two detected peaks you can derive both the amplitude and the time position of the both peaks. Note that, even though the first derivative of your input signal looks like pure noise, it contains all the information that is needed. This information is extracted by means of the cross-correlation between the expected and the received peak.