• 大小: 3KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2023-08-01
  • 语言: Matlab
  • 标签: fastica  

资源简介

matlab编写的对原信号进行独立成分分离FastICA算法实现 ,输入信号需自行修改。

资源截图

代码片段和文件信息

%导入数据,并输出原始数据
%--------对输入的两通道信号进行盲源分离---------
%---导入数据,并输出原始数据---
close all;
clc;
clear;
N=1000;
k=1:N;
%s1=load (‘e:\EMG-co-1-ECG‘);
%s2=load (‘e:\ECG-co‘);
zq=load(‘E:\11q‘);
sq=load(‘E:\11s‘);
t1=1:1:1000;
%s1=sin(2*pi*0.05*t1);
si=sin(2*pi*0.05*t1);
%s1=sq(801:1800)+0.5*si;
s1=sq(801:1800);
%s1=s1-mean(s1‘)
s2=si;


x=[s1;s2];      %观察的信号组
[rowcol] = size(x);
%---对数据进行白化,使之为0均值,单位协方差---
x = x - (mean(x‘))‘*ones(1col);
[v d]= eig(cov(x‘1));
Aw= v*inv(sqrtm(d));
x= Aw‘*x;
%--------用 FastICA 算法实现对源信进行分离---------
epsilon=0.0001;
W=rand(row);
for p=1:row
    W(:p)=W(:p)/norm(W(:p));
    exit=0;
    count=0;
    iter=1;
    while exit==0;
          count=count+1;
          temp=W(:p);         %记录上次迭代的值         
              W(:p)=1/(N-1)*x*((temp‘*x).^3)‘-3*temp;
          ssum=zeros(row1);
          for counter=1:p-1
              ssum=ssum+(W(:p)‘*W(:counter))*W(:counter);   
          end
          W(:p)=W(:p)-ssum;  %正交化
          W(:p)=W(:p)/norm(W(:p));
          if(abs((dot(W(:p)temp)))<1+epsilon)&(abs((dot(W(:p)temp)))>1-epsilon)   %判断是否收敛
                        exit=1;
          end
          iter=iter+1;
   end
end

u2= W*x;
y1=u2(1:);
y2=u2(2:);

figure(1);
subplot(

评论

共有 条评论