# Blind source separation for asynchronously observed mixture channels

Given your practical and theoretical expertise: Does ICA work reliably when applied to a multidimensional mixture (observation) $$X = (X^1, \cdots, X^d)$$ if the different channels $$X^i$$ of the observation aren't recorded synchronously?

I.e., if there are time-delays between the different channels of the observation, so that instead of $$(X^1_{t_j^1}, \cdots, X^d_{t^d_j}) \quad \text{ with } \quad t^1_j=\ldots=t^d_j \quad \forall\, j$$

one observes

$$(X^1_{t^1_j}, \cdots, X^d_{t^d_j}) \quad \text{ with } \quad t^k_j\neq t^l_j \quad (k\neq l) \quad \text{for most } j.$$

Note that in contrast to this question and here, we assume as usual that every channel observation $$X^i_t$$ is obtained without delays in its constituent (independent) sources $$S^1, \ldots, S^d$$, i.e. that $$X^i_t = a_{11} S^i_t + \ldots + a_{1d} S^i_t$$ for some $$a_{11}, \ldots, a_{1d}\in\mathbb{R}$$ at any time $$t$$.

• It depends on whether the asynchronicity violates any of ICA's assumptions, such as the source signals are IID non-Gaussian. Delaying a whole channel obviously won't change the distribution of anything, but will shifted versions be viewed as independent? One way to fix such a problem (if it is a problem) would be to find the delays between the channels via cross correlation, and compensate for them before doing ICA. May 11, 2022 at 4:08
• Thanks for your comment, @Gillespie! May 11, 2022 at 19:55
• Sure, let us know if you learn anything more. It would be easy to simulate and test, so maybe eventually I'll get around to that. May 12, 2022 at 1:45
• I will, thanks -- and sure it would be exciting to hear about any empirical findings that you might come across! May 12, 2022 at 10:14

Based on a few quick experiments, ICA fails when the channels are delayed relative to each other. It's fairly easy to test in MATLAB (or no doubt other software packages) with FastICA (or Robust ICA, which handles complex data). Here's a quick example with no time offsets between the channels:

[sig, mixedsig] = demosig();

N = size(sig, 1);       %Number of source signals
M = size(mixedsig, 1);  %Number of channels

%Find mixing matrix as a right sided inverse
A0 = mixedsig/sig;

%Do ICA
[icasig, A, W] = fastica(mixedsig);

%Plot the original signals, and the ICA seperation
figure; icaplot('classic', sig);        title('Original Signals')
figure; icaplot('classic', mixedsig);   title('Mixed Signals')
figure; icaplot('classic', icasig);     title('Fast ICA')


As you can see, ICA did a pretty good job separating the signals (to within a sign). But if we add a delay between the channels as you suggested, this is what we get:

%Now delay the channels and try again
dels = randi(100, 4, 1);
mixedsig2 = zeros(size(mixedsig, 1), size(mixedsig, 2) + max(dels));
for k = 1:4
mixedsig2(k, dels(k)+1:dels(k) + size(mixedsig, 2)) = mixedsig(k,:);
end

[icasig2, A2, W2] = fastica(mixedsig2);
figure; icaplot('classic', icasig2);     title('Fast ICA: Shifted Channels')


So ICA appears to break down when you shift the channels. I also tried circularly shifting the data, and got the same results.