(一)独立成分分析简介:
ICA是20世纪90年代提出的,起初是神经网络的研究中有一个重要的问题,独立成分分析是一个解决问题的新方法。Ica(独立成分分析法)又称盲源分离(Blind source separation, BSS),它假设观察到的随机信号x服从非高斯分布模型,其中s为未知源信号,其分量相互独立,A为一未知混合矩阵。ICA的目的是通过且仅通过观察x来估计混合矩阵A以及源信号s。大多数ICA的算法需要进行“数据预处理”(data preprocessing):先用PCA得到y,再把y的各个分量标准化(即让各分量除以自身的标准差)得到z。预处理后得到的z各个分量不相关且方差为1。
(二)典型应用场合:
考虑到源信号是相互独立的,由某些物体或源发出的一组混好信号,这些源可能包括:发出电信号的不同脑区;在一个房间说话的几个人,发出语音信号;发出雷达信号的移动电话,等等.进一步假设有几个传感器或接收器,这些传感器放置在不同的位置上,这样,每个传感器记录的是源信号带有不同权重的混合.经典的鸡尾酒会问题就符合这样的情况。
ICA的实现步骤大家可以参考其他相关文献,以后有时间补充。
(三)ICA实现代码(源码地址:https://www.github.com/LiangjunFeng)
#!/usr/bin/envpython3
# -*-coding:utf-8-*-
# Author :LiangjunFeng
# File : FastICA.py
# Date : 2017/10/15 6:25
# Version: 0.1
# Description:fastICA algorithm ,split voice signals
import wave
import os
import numpy asnp
import math
importmatplotlib.pyplot as plt
from numpyimport random
from sklearnimport preprocessing
import scipy
import scipy.ioas sio
defLoadSoundSet(path):
filename= os.listdir(path)
data = []
for i in range(len(filename)):
f = wave.open(path+filename[i],'rb')
params = f.getparams()
nchannels, sampwidth, framerate,nframes = params[:4]
strData = f.readframes(nframes)
waveData =np.fromstring(strData,dtype=np.int16)
waveData = waveData*1.0/(max(abs(waveData)))
data += waveData.tolist()
time =np.arange(0,nframes*len(filename))*(1.0 / framerate)
return time.tolist(),data
defLoadSound(path):
f = wave.open(path,'rb')
params = f.getparams()
nchannels, sampwidth, framerate, nframes =params[:4]
strData = f.readframes(nframes) #read the wav file
waveData =np.fromstring(strData,dtype=np.int