⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ica.m

📁 基于多元线性回归、偏最小二乘、神经网络、卡尔漫滤波、径向基网络、主成分分析等等的程序。可用于建模和预测。
💻 M
字号:

function [theta,lambda] = ica(X,alpha,N)

%   [theta,lambda] = ica(X,alpha,N)
%   [theta,lambda] = ica(X,alpha)
%   [theta,lambda] = ica(X)
%
% Closed-form Independent Component Analysis (ICA)
%
% Input parameters:
%  - X: Whitened input data block, mixture of signals (k x n)
%  - alpha: Kurtotic or non-kurtotic signals searched (optional)
%  - N: Number of latent vectors (default all)
% Return parameters:
%  - theta: Independent directions
%  - lambda: Corresponding eigenvalues
%
% Heikki Hyotyniemi Sep.13, 2000


[k,n] = size(X);
if norm(eye(n)-X'*X/k) > 10^-1, disp('First whiten data!'); return; end

if nargin < 3
   N = n;  
end
if nargin < 2
   alpha = 1;  % Normal kurtosis-based ICA
end

normX = sqrt(sum(X'.*X')');
unnormX = normX.^alpha;
XX = (unnormX*ones(1,n)).*X;

R = XX'*XX/k;
[THETA,LAMBDA] = eig(R);
[LAMBDA,order] = sort(abs(diag(LAMBDA)));
LAMBDA = flipud(LAMBDA);
THETA = THETA(:,flipud(order));

if nargin<3
   Zhat = X*THETA;
   clf;
   for i = 1:n
      subplot(n,1,i);
      plot(Zhat(:,i));
      ylabel(['\lambda = ',num2str(LAMBDA(i))]);
      if i == 1, title('Independent signals'); end
   end
end

[LL,order] = sort(abs(LAMBDA-n-2));
order = flipud(order);
theta = THETA(:,order(1:N));
lambda = LAMBDA(order(1:N));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -