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