I have a signal S, which needs to be split into two components Sx and Sy.

And I have a signal X, which is a reference signal corresponding to Sx.

I need to perform this split of S and check that resulting Sy is ~Y and Sx ~X (I can use X in the process of filtering\separation, but not Y).

This sounds like a typical denoising task, that can be accomplished with LMS\RLS filters, but in my case signals X and Y are correlated and their BW are overlapping.

They are also non-stationary:
- sometimes X amplitude can decrease to almost 0, then Sx is also 0 and Sy should be estimated as simply S.
- sometimes both X and Y are 0 for a short period of time.
- most of the time X and Y are approx sinusoidal signals with similar central frequencies, one might be slightly shifted w.r.t another.

I tried regular LMS\RLS approaches - assume Sx is noise -> S = Sy + noise, but due to crosscorrelaton between S,X and Y the algorithms best guess is S = Sy.

1) How would you try to solve this? 2) What if we can use Y as well, at least for the beginning? Would it make it simpler?

3) More specific question. Now I have S,X,Y amplitudes in arbitrary units (adc counts). Is it better to scale them? Otherwise, I assume, choice of Sx and Sy will be dependent on amplitude ratios of the signals, or not?


1 Answer 1


I followed the link from you more current version. I think your problem is better stated here.

1) I don't think you can solve it as stated. You will have a one unknown parameter family of solutions.

2) If you can use a portion of Y, and the coefficients remain the same, you can easily solve it.

$$ \vec S = a \vec X + b \vec Y $$

Dot this equation with $ \vec X $ and $ \vec Y $:

$$ ( \vec S \cdot \vec X ) = a ( \vec X \cdot \vec X ) + b ( \vec Y \cdot \vec X ) $$ $$ ( \vec S \cdot \vec Y ) = a ( \vec X \cdot \vec Y ) + b ( \vec Y \cdot \vec Y ) $$

This is a solvable system of two equations, two unknowns.

3) Rescaling will not affect the values of $a$ and $b$.

Hope this helps.



If you expect that $a$ and $b$ may be changing, then I think this problem is basically intractable. At least this approach would be.

These vector equations will apply to any subset of your signal. You will get the best values for $a$ in sections where you guess that $\vec Y$ is small, and the best values for $b \vec Y$ where $\vec X$ is small (as you already stated). Also, if you can determine sections where $ \vec X \cdot \vec Y = 0 $ (completely uncorrelated), you will also get good readings on $a$ and $b \vec Y$. In sections where they are highly correlated, you will get unreliable values for $a$ and $b \vec Y$.

If you have a rough idea of what $a$ is, you can find uncorrelated sections by looking for intervals where $ ( \vec S - a \vec X ) \cdot \vec X \approx 0 $, but this won't get you a better value for $a$ because that's what you started with.

There is no way to separate $b$ from $ b \vec Y $ unless you know something about $ \vec Y $.

Any kind of linear transform is going to look like this:

$$ T( \vec S ) = a T( \vec X ) + b T( \vec Y ) $$

I'm not sure if that could be helpful, I doubt it.

  • $\begingroup$ Thank you @Cedron for the answer. Can't we somehow give initial values to a and b and run adaptive filtering with some (custom) cost function to find best Y? Then, with the next batch of data we see how X has changed, make a guess, how Y (or a/b) might have changed... $\endgroup$
    – Andrey
    Mar 23, 2018 at 9:44
  • $\begingroup$ @Andrey, You're welcome. I've added a followup. $\endgroup$ Mar 23, 2018 at 12:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.