I have two sensors that have a cross talk between them. I would like to cancel the cross talk. For this I recorded two tracks, where sensor no.1 (called x1) has some input, and sensor no.2 (called x2) is zero.

I was told to make the following operations:

Since your cross talk is small:

1) Simply measure the transfer function $H_{ba}(\omega)$ directly.

2) Subtract it out as follows:

2.1) Measure the transfer function from signal A to sensor B when signal B is 0.

2.2) Create a filter from this transfer function (FIR or IIR, depending on it's shape).

2.3) Now you can measure and subtract a filtered version from sensor signal A from sensor signal B:

$y_b'(t) = y_b(t)-h_{ab}(t)*y_a(t)$. Where $h_{ab}(t)$ is the impulse response of your cross talk filter and $*$ the convolution operator.

Here is a Matlab code that I wrote for this purpose, but its performance is really bad. If someone has a suggestion what I did wrong, or can suggest a new code I will be grateful. If I may say, a friend helped me to implement this, and I think that we did not implement the filter part, but maybe I am wrong.

% The files designated to measure the transfer function.
% x1 has some input. x2 is is zero, and affected by the x1.

x1 = wavread(file1); 
x2 = wavread(file2);

%The transfer function. 

Hab = fft(x2)./fft(x1);


% Some new tracks, where x3 is recorded from sensor no.1 and x4 from sensor no.2.
% All the files have the same length.

x3 = wavread(file3); 
x4 = wavread(file4);


% Subtracted signal 

x4 = x4 - c(1:length(x4));

The following code did not subtract the cross talk on x4. Here are some images explaining the problem. For some frequencies the above code actually did a good job and subtracted the cross talk, and for some it did the opposite and increased the energy. plot(abs(fft(x4))):

Good - Frequency energy subtracted: Good outcome, the energy of the frequency in this point was subtracted

Bad - Frequency energy increased (!): Bad outcome, the energy increased instead of being subtracted

Thank you!

  • 4
    $\begingroup$ See this question to understand why $$Hab = fft(x2)./fft(x1); hab=ifft(Hab);$$ is a bad idea. $\endgroup$ Commented Dec 16, 2011 at 17:24
  • $\begingroup$ @DilipSarwate Thanks for the comment. I would like to hear your idea how to change it. $\endgroup$ Commented Dec 16, 2011 at 18:13
  • $\begingroup$ By reading the link more deeply I understand that the above solution is incorrect... If someone can help me to implement the right filter I will be so thankful. $\endgroup$ Commented Dec 16, 2011 at 20:43
  • $\begingroup$ It would be best if you could modify the sensors themselves to eliminate crosstalk. If not, something like ICA might help? dsp.stackexchange.com/q/812/29 $\endgroup$
    – endolith
    Commented Dec 16, 2011 at 22:42
  • $\begingroup$ I have already tried ICA and it doesn't work for me.. $\endgroup$ Commented Dec 17, 2011 at 10:26

1 Answer 1


Try using other Blind source separation(BSS) algorithms,even Kernel BSS could be applied to remove if it is nonlinearly mixed.


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.