您现在的位置:首页 >> 数值仿真 >> 内容

基于FastICA算法的混合信号解混合信号恢复仿真

时间:2023/1/22 22:02:48 点击:

  核心提示:A278,包括程序操作录像...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/Y56XmZ1x

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览




3.算法概述

         FastICA算法,又称不动点(Fixed-Point)算法,是由芬兰赫尔辛基大学Hyvärinen等人提出来的。是一种快速寻优迭代算法,与普通的神经网络算法不同的是这种算法采用了批处理的方式,即在每一步迭代中有大量的样本数据参与运算。但是从分布式并行处理的观点看该算法仍可称之为是一种神经网络算法。

        FastICA算法有基于峭度、基于似然最大、基于负熵最大等形式,这里,我们介绍基于负熵最大的FastICA算法(可以有效地把不动点迭代所带来的优良算法特性与负熵所带来的更好统计特性结合起来)。它以负熵最大作为一个搜寻方向,可以实现顺序地提取独立源,充分体现了投影追踪(Projection Pursuit)这种传统线性变换的思想。此外,该算法采用了定点迭代的优化算法,使得收敛更加快速、稳健。

4.部分源码

...........................................................................     

average= mean(X')';  %均值

for i=1:M

    X(i,:)=X(i,:)-average(i)*ones(1,T); 

end

%---------白化/球化------

Cx = cov(X',1);    %计算协方差矩阵Cx

[eigvector,eigvalue] = eig(Cx); %计算Cx的特征值和特征向量

W=eigvalue^(-1/2)*eigvector';   %白化矩阵

Z=W*X;   %正交矩阵

 

%----------迭代-------

Maxcount=10000;        %最大迭代次数

Critical=0.00001;   %判断是否收敛

m=M;                %需要估计的分量的个数

W=rand(m);

for n=1:m  

    WP=W(:,n);  %初始权矢量(任意)

    count=0;

    LastWP=zeros(m,1);

    W(:,n)=W(:,n)/norm(W(:,n));

    while abs(WP-LastWP)&abs(WP+LastWP)>Critical

        count=count+1;   %迭代次数

        LastWP=WP;      %上次迭代的值

       % WP=1/T*Z*((LastWP'*Z).^3)'-3*LastWP;

        for i=1:m     

WP(i)=mean(Z(i,:).*(tanh((LastWP)'*Z)))-(mean(1-(tanh((LastWP))'*Z).^2)).*LastWP(i);

        end

        WPP=zeros(m,1);

        for j=1:n-1

            WPP=WPP+(WP'*W(:,j))*W(:,j);

        end

        WP=WP-WPP;

        WP=WP/(norm(WP));

        

        if count==Maxcount

            fprintf('未找到相应的信号'); 

            return; 

        end

    end

    W(:,n)=WP;

end

Z=W'*Z;

end

A278

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关文章
  • 没有相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168