【医学信号处理与MATLAB(5)】独立成分分析法-ICA

article/2025/11/8 15:17:42

接着上一节PCA的内容,我们来谈一下ICA为何同样重要。

目录

    • 引入:鸡尾酒会问题
    • 独立成分分析法
    • 中心极限定理
      • 中心极限定理的MATLAB代码实现
    • 测量非高斯程度(Kurtosis峰度)
    • 独立成分分析法处理流程
    • 使用FASTICA找出独立成分
    • MATLAB代码实现

引入:鸡尾酒会问题

我们可以看到如下图所示的鸡尾酒会模型:在一场酒会上,有3个说话者(si)和三个麦克风(xi),麦克风距离说话者的远近不同,因此收音效果也不同,但实际都可看作是线性混合的,如图右边的式子所示。
将线性方程组用矩阵的方式表示,如图右下方,A为3乘3的混合矩阵。
如何根据麦克风里的内容分别推测出三个说话者的声音呢?这便是ICA需要处理的问题。
在这里插入图片描述

独立成分分析法

与PCA不同,目标不在降低资料变量的维度,而是尽可能从混合信号中找出更具有生理或物理意义的信号来源。

假设:

  • 信号源s都是各自独立的变量
  • 各个信号源变量的分布都是非高斯分布
    (会让复杂的证明稍微简单一点233)

限制:

  • 无法计算出信号源s的方差或者能量强度 (如:可求解混合比例,但不知麦克风与人的距离)
  • 无法解出信号源s的正负号

中心极限定理

中心极限定理(Central Limit Theorem):数个非高斯分布的独立变量,其混合信号的分布会趋向高斯分布

中心极限定理的MATLAB代码实现

clear,close all
clc%% initialize parameters
NumofVariable=20;
N = 10000;  %data points%generate rand data
X=[];
for i=1:NumofVariableX(i,:) = rand(1,1000)-0.5;    % uniform rand noise 
%     X(i,:) = sin(2*pi*i*[1:1000]/500);   % sine wave
end%% mix variables and plot histogram
mixX = mean(X,1);
mixX_kurt=kurtosis(mixX)-3;  % help kurtosis for details[count,bin]=hist(mixX,100);
figure,plot(bin, count/max(count))
title(['kurtosis (non-Gaussianity) = ' num2str(mixX_kurt)])

测量非高斯程度(Kurtosis峰度)

目的:我们想让变量尽量做到非高斯分布,因此需要一个值去测量非高斯程度。
在这里插入图片描述

  • Kurtosis = 0 → Gaussian
  • Kurtosis 0 → Super-Gaussian
  • Kurtosis 0 → Sub-Gaussian

下图中黑线=0为高斯分布/正态分布,改变式子中的值,图象也会发生变化。
在这里插入图片描述

独立成分分析法处理流程

  1. 均值化(Centering data remove mean)
  2. 白化(球形化) Whitening process(sphere data)
    Decorrelate variables
    Scale variables so that their variance = 1
  3. 优化算法使得每个源的非高斯性最大 Optimization algorithm to maximize non-Gaussianity of each source

均值化和PCA一样,就是我们会将数据减去它的均值。
白化通俗点解释就是,我们在PCA里面取得了主成分之后,可以发现主成分的方差其实相差还是很大的,这样也能够让我们取得一些我们需要的成分。但是在ICA中,我们想将主成分的方差变得一样(=1),比如将方差放大或者缩小等等使其达到一致。这便是球形化的概念

优化算法:在基础阶段,我们会使用FASTICA就足够了。

使用FASTICA找出独立成分

还是非常熟悉的图,我们在上一节PCA中也用到的:
在这里插入图片描述
只不过我们这次需要做的,是将左边的正弦信号和三角波信号给分离出来。

MATLAB代码实现

clear, close all
clc%% initialize parameters
path(path,'.\fastica_25');  % add FastICA pathsamplerate=500; % in Hz
N=1000; % data lengthfreq1=5; % in Hz
freq2=7; % in Hz
taxis=[1:N]/samplerate;ICNo=3;  % the specified number of independent components
PCNo=3;  % the preserved number of PCs %% generate test signals 
C1 = 0.75*sin(2*pi*freq1*taxis);        % 1st component: a sine wave
C2 = sawtooth(2*pi*freq2*taxis,0.5);    % 2nd component: a triangular wave% Combine data in different proportions
X(1,:) = 0.5*C1 + 0.5*C2 + 0.1*rand(1,N);
X(2,:) = 0.7*C1 + 0.2*C2 + 0.1*rand(1,N);
X(3,:) = 0.2*C1 + 0.7*C2 + 0.1*rand(1,N);
X(4,:) = -0.3*C1 - 0.6*C2 + 0.3*rand(1,N);
X(5,:) = 0.6*rand(1,N);    % Noise only% Center data by subtracting mean
X = X - mean(X,2)*ones(1,N);figure, 
for i=1:size(X,1)subplot(size(X,1),1,i)plot(taxis,X(i,:)),xlim([taxis(1) taxis(end)])
end%% Independent Components Analysis using FastICA
[icasig, A, W] = fastica(X,'numOfIC',ICNo,'displayMode','off','firstEig',1,'lastEig',PCNo); % fast ICA% [icasig, A, W] = fastica(X,'numOfIC',ICNo,'displayMode','off','interactivePCA','on'); % fast ICA
% fasticag(X)  % used the correct number of PCA can always produce good resultsfigure,
for i=1:size(icasig,1)subplot(size(icasig,1),1,i),plot(icasig(i,:))
endreturn
%% reconstruct signal  信号的重构(丢掉不需要的成分)
rejectICA=1;
% reconstruct the signal
A2=A;
icasig2=icasig;
A2(:,rejectICA)=[];
icasig2(rejectICA,:)=[];newX=(A2*icasig2);figure, 
for i=1:size(newX,1)subplot(size(newX,1),1,i)plot(taxis,newX(i,:)),xlim([taxis(1) taxis(end)])
end

关于ICA的原理,到时候重新再写一篇文章讲一下。


http://chatgpt.dhexx.cn/article/TAm8C0XC.shtml

相关文章

ICA独立成分分析去除EEG伪影

目录 介绍ICA假设方法组件投影实验数据样本移除眨眼和肌肉伪影一些严重污染的脑电数据 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 .QQ交流群1:903290195(已满,请加群2),群2:941473018 介绍 眼动&#x…

fMRI独立成分分析方法(ICA)工具GIFT

软件下载连接: Software - TReNDS (trendscenter.org)https://trendscenter.org/software/下载完成后,在MATLAB中添加其路径即可。 在MATLAB命令行输入gift。打开窗口页面: 1、点击setup ICA Analysis 新建一个gica文件夹,存储…

《大话脑成像》之:独立成分分析

少年,我看你骨骼精奇,是万中无一的武学奇才,维护世界和平就靠你了,我这有本武林秘籍《九阴真经之万军丛中听声辩位分筋错骨取敌将首级之盲源分离大法》,简称,《独立成分分析》,见与你有缘&#…

独立成分分析(Independent Component Analysis,ICA)模型介绍

独立成分分析ICA模型 1 历史背景2 ICA基本模型3 独立与不相关 \qquad 1 历史背景 \qquad 独立成分分析思想和方法最早源于上世纪八十年代几个法国学者的研究工作,尽管当时他们并没有命名其为ICA;在1986年举行的神经网络计算会议上,法国学者Heraull和Jutt…

【详细版】独立成分分析:算法和应用(一)

独立成分分析:算法和应用 翻译原文自己的理解 原文:Independent component analysis: algorithms and applications 作者:A. Hyvarinen, E. Oja 时间:2000年 注:详细版原文太长,分两篇来写;另外…

Python专栏 | MNE数据预处理方法——独立成分分析

关注微信公众号:脑机接口研习社 了解脑机接口最近进展 系列文章目录 Python专栏 | 脑电图和脑磁图(EEG/MEG)的数据分析方法之载入数据 Python专栏 | MNE脑电数据(EEG/MEG)可视化 文章目录 系列文章目录预处理(Preprocessing) 预处理&#x…

学习笔记 | 独立成分分析(ICA, FastICA)及应用

学习笔记 | 独立成分分析[ICA, FastICA]及应用 1 背景说明 2 算法原理 2.1 ICA简介 2.2 形式化表达 3 算法步骤与代码 4 算法改进:FastICA 5 ICA实例与应用 6 小结 概要: 这篇博客和博客学习笔记|主成分分析[PCA]及其若干应用属于一个系列&#xf…

ICA独立成分分析去除脑电伪影

今天分享的这篇利用独立成分分析ICA去除EEG伪影是翻译自jung大神的一篇文章。 目录 1 介绍 2 方法 3 实验数据样本 1 介绍 眼动,眨眼,肌肉,心脏和线的噪音会严重污染脑电图活动,这在脑电解释和分析中会产生非常严重问题。研究…

独立成分分析(ICA)

1.概念 独立成分分析是从多元(多维)统计数据中寻找潜在因子或成分的一种方法.ICA与其它的方法重要的区别在于,它寻找满足统计独立和非高斯的成分。这里我们简要介绍ICA的基本概念、应用和估计原理。 1.1 多元数据的线性表示 统计数据处理及相关领域中的一…

独立成分分析ICA系列2:概念、应用和估计原理.

1.概念 独立成分分析是从多元(多维)统计数据中寻找潜在因子或成分的一种方法.ICA与其它的方法重要的区别在于,它寻找满足统计独立和非高斯的成分。这里我们简要介绍ICA的基本概念、应用和估计原理。 1.1 多元数据的线性表示 统计数据处理及相关领域中的一…

详解独立成分分析

最近在学习数据降维的一些方法(有关数据降维的其他内容请看这篇文章),虽然独立成分分析不算是严格意义上的降维方法,但是它和PCA有着千丝万缕的联系,所以打算专门写一篇文章来学习ICA的相关知识,看了挺多的关于ICA的博文&#xff…

独立成分分析

在已知语音信号方向的情况下,波束形成能明显改善语音质量,提高信噪比;然而在实际环境中,人可能是走动的,即使坐立不动,由于身体的扭曲使得语音到达阵列的方向也是变化的,此时波束形成效果受到限…

独立成分分析(Independent Component Analysis,ICA)原理及代码实现

过程监控中会用到很多中方法,如主成分分析(PCA)、慢特征分析(SFA)、概率MVA方法或独立成分分析(ICA)等为主流算法。 其中PCA主要多用于降维及特征提取,且只对正太分布(高…

清理vdbench后台进程

当我们打开一个终端,用nohup运行vdbench程序。断开连接后,你发现你写的配置文件有误,想关闭已有的vdbench进程。你重新连接上终端,咦,我的jobs命令怎么没有显示我的nohup任务呢?这是因为你的nohup任务的sh进…

Nas性能测试工具-vdbench

版本: vdbench50406 简介: vdbench是一个 I/O 工作负载生成器,用于验证数据完整性和度量直接附加和网络连接的存储的性能。它是一个免费的工具,容易使用,而且常常用于测试和基准测试。 配置参数: 大文…

Linux中vdbench的安装与使用

vdbench是一个 I/O 工作负载生成器,用于验证数据完整性和度量直接附加和网络连接的存储的性能。它是一个免费的工具,容易使用,而且常常用于测试和基准测试。 可以使用vdbench测试磁盘和文件系统的读写性能。 环境:Ubuntu 16.04 …

vdbench和fio测试磁盘性能的对比总结

vdbench和fio测试磁盘性能的对比总结 一、安装 1、安装vdbench,首先安装java:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 其次下载vdbench安装包并进行安装:http://pan.baidu.com/s/1b7XooY&am…

vdbench使用

简介 vdbench是一个 I/O 工作负载生成器,用于验证数据完整性和度量直接附加和网络连接的存储的性能。它是一个免费的工具,容易使用,而且常常用于测试和基准测试。 可以使用vdbench测试磁盘和文件系统的读写性能。 名词解释 vdbench中常用的…

vdbench测试SSD快速入门

介绍 vdbench是一个I/O工作负载生成器,通常用于验证数据完整性和度量直接附加(或网络连接)存储性能。它可以运行在windows、linux环境,可用于测试文件系统或块设备基准性能。我们下面主要以块设备为介绍对象。 下载及安装 下载…

vdbench多主机运行指导

测试工具之vdbench多主机运行 本文介绍vdbench在多机环境下的操作和配置,以及本人在配置过程中遇到的问题和解决方法。 文章目录 测试工具之vdbench多主机运行前言一、vdbench在linux环境下多机运行1.环境参数2.配置说明二、vdbench在windows环境下多机运行1.环境参数2.配置…