In simple terms, blind source separation is to estimate the transmission channel of the observed signal from the source signal of the system without knowing the transmission characteristics of the system.

Assume that n unknown source signals, m mixed observation signals received by each sensor are mixed additive noise, and the mixed system A is the unknown mixing matrix. After separating the system W, the approximate and estimated directions of the source signal are separated. The mathematical model of blind source separation can be expressed as follows:

In order to separate the estimated vector Y(t) of the source signal S(t), it is mainly required to decompose the matrix W. The separation process of Y(t) is expressed as follows:

The principle block diagram of blind signal separation is shown in the figure. Since both hybrid system A and source signal S(t) are unknown, there may be uncertainty in magnitude and sequence of separated estimation vector Y(t). However, signal information exists in signal waveform, so signal separation is not affected.

%----------------------------------------------------------------

clc

clear all

%% --------------------------------- Set Parameters

N = 1; %The number of observed mixtures

Ns = 2; %The number of independent sources

Ls = 1000; %Sample size, i.e.: number of observations

finalTime = 40*pi; %Final sample time (s)

initialTime = 0; %Initial sample time (s)


%% --------------------------------- Generating Data for SSA-ICA

Amix = rand(N,Ns); %Amix is a random N x Ns mixing matrix

timeVector = initialTime:(finalTime-initialTime)/(Ls-1):finalTime; %Vector of time coordinates

source1 = sin(1.1*timeVector); %Independent source component 1, sin(a * t)

source2 = cos(0.25*timeVector); %Independent source component 2, cos(b * t)

S = [source1;source2]; %Source Matrix


figure

plot(timeVector,source1) %Plotting the N independent sources vs. time

xlabel('time (s)')

ylabel('Signal Amplitude')

legend('source 1')


figure

plot(timeVector,source2) %Plotting the N independent sources vs. time

xlabel('time (s)')

ylabel('Signal Amplitude')

legend('source 2')


Yobs = Amix*S; %Matrix consisting of M samples of N observed mixtures


figure

plot(timeVector,Yobs) %Plotting the observed signal vs. time

xlabel('time (s)')

ylabel('Signal Amplitude')

legend('observed signal')


%% --------------------------------- Call SSA-ICA algorithm

M = 200;

Sest = SSA_ICA(Yobs,Ns,M);


%% --------------------------------- Show results

figure

plot(timeVector, Sest(1,:))

xlabel('time (s)')

ylabel('Signal Amplitude')

legend('Source Estimation 1')


figure

plot(timeVector, Sest(2,:))

xlabel('time (s)')

ylabel('Signal Amplitude')

legend('Source Estimation 2')
Copy the code