【信号处理】单通道盲源分离(SSA-ICA)算法

盲源分离简单的来讲就是在不明确系统的传输特性的前提下,从系统的源信号估计出观测信号的传输信道。

假设n个未知的源信号,各传感器接收到m个混合的观测信号,为混入的加性噪声,混合系统A为未知的混合矩阵。经过分离系统W后分离出近似与源信号的估计向,盲源分离的数学模型可以表达为:

要想分离出源信号S(t)的估计向量Y(t)主要是要求分解离矩阵W,Y(t)的分离系统过程表达式如下:

盲信号分离的原理框图如图所示,由于混合系统A和源信号S(t)都是未知的,所以对于分离出的估计向量Y(t)可能在幅度大小和排列次序存在不确定性,但是信号的信息存在于信号的波形中,所以并不影响对信号的分离。


%----------------------------------------------------------------
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')

完整代码或者代写添加QQ1575304183

往期回顾>>>>>>

【信号处理】基于HMM的睡眠状态检测matlab源码

【信号处理】基于小波变换的音频水印嵌入提取matlab源码

【信号处理】基于遗传算法的VST混响matlab源码

【信号处理】脉搏信号之脉率存档matlab源码含GUI

猜你喜欢

转载自blog.csdn.net/qq_34763204/article/details/113797436