【语音分离】基于matlab FASTICA语音分离【含Matlab源码 1023期】
2021/6/18 22:30:03
本文主要是介绍【语音分离】基于matlab FASTICA语音分离【含Matlab源码 1023期】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、简介
1 基础概念
FastICA算法,又称不动点(Fixed-Point)算法,是由芬兰赫尔辛基大学Hyvärinen等人提出来的。是一种快速寻优迭代算法,与普通的神经网络算法不同的是这种算法采用了批处理的方式,即在每一步迭代中有大量的样本数据参与运算。但是从分布式并行处理的观点看该算法仍可称之为是一种神经网络算法。
FastICA算法有基于峭度、基于似然最大、基于负熵最大等形式,这里,我们介绍基于负熵最大的FastICA算法(可以有效地把不动点迭代所带来的优良算法特性与负熵所带来的更好统计特性结合起来)。它以负熵最大作为一个搜寻方向,可以实现顺序地提取独立源,充分体现了投影追踪(Projection Pursuit)这种传统线性变换的思想。此外,该算法采用了定点迭代的优化算法,使得收敛更加快速、稳健。
因为FastICA算法以负熵最大作为一个搜寻方向,因此先讨论一下负熵判决准则。由信息论理论可知:在所有等方差的随机变量中,高斯变量的熵最大,因而我们可以利用熵来度量非高斯性,常用熵的修正形式,即负熵。根据中心极限定理,若一随机变量由许多相互独立的随机变量之和组成,只要具有有限的均值和方差,则不论其为何种分布,随机变量较更接近高斯分布。换言之,较的非高斯性更强。因此,在分离过程中,可通过对分离结果的非高斯性度量来表示分离结果间的相互独立性,当非高斯性度量达到最大时,则表明已完成对各独立分量的分离[1]。
2 负熵的定义:
3 算法原理
4 算法步骤
二、源代码
clc clear all %% --------------------------------- Set Parameters N = 1; %The number of observed mixtures Ns = 2; %The number of independent sources Ls = 1000; %Sample size, i.e.: number of observations finalTime = 40*pi; %Final sample time (s) initialTime = 0; %Initial sample time (s) %% --------------------------------- Generating Data for SSA-ICA Amix = rand(N,Ns); %Amix is a random N x Ns mixing matrix timeVector = initialTime:(finalTime-initialTime)/(Ls-1):finalTime; %Vector of time coordinates source1 = sin(1.1*timeVector); %Independent source component 1, sin(a * t) source2 = cos(0.25*timeVector); %Independent source component 2, cos(b * t) S = [source1;source2]; %Source Matrix figure plot(timeVector,source1) %Plotting the N independent sources vs. time xlabel('time (s)') ylabel('Signal Amplitude') legend('source 1') figure plot(timeVector,source2) %Plotting the N independent sources vs. time xlabel('time (s)') ylabel('Signal Amplitude') legend('source 2') Yobs = Amix*S; %Matrix consisting of M samples of N observed mixtures figure plot(timeVector,Yobs) %Plotting the observed signal vs. time xlabel('time (s)') ylabel('Signal Amplitude') legend('observed signal') function [Sest] = Fast_ICA(Xobs,C) %% Preprocessing, Centering SX = size(Xobs); N = SX(1); M = SX(2); X = Xobs'; %X is the transpose of the matrix of M samples of N mixtures, used in subsequent calculations Xmean = mean(X); %Xmean is the mean vector of the matrix X for i = 1:N X(:,i) = X(:,i) - Xmean(i); %The matrix X is centered by subtracting each of the N mixtures by their corresponding sample averages end %% Preprocessing, Whitening ExxT = cov(X); %The covariance matrix of X is computed and stored in ExxT [E,D] = eig(ExxT); %Eigenvalue decomposition is applied on the covariance matrix of X, ExxT Z = E*1/sqrt(D)*E'*X'; %The matrix X is whitened to Z %% FastICA algorithm W = 0.5*ones(C,N); %Initializing W, a matrix consisting of columns corresponding with the inverse of the (transformed) mixing Amix iterations = 100; %The amount of iterations used in the fastICA algorithm for p = 1:C wp = ones(N,1)*0.5; wp = wp / sqrt(wp'*wp); for i = 1:iterations G = tanh(wp'*Z); Gder = 1-tanh(wp'*Z).^2; wp = 1/M*Z*G' - 1/M*Gder*ones(M,1)*wp; dumsum = zeros(C,1); for j = 1:p-1 dumsum = dumsum + wp'*W(:,j)*W(:,j); end wp = wp - dumsum; wp = wp / sqrt(wp'*wp); end W(:,p) = wp; end %% Output Results W = W/sqrt(2); %The factor sqrt(2) is an emirical constant added to make the predictions fit the data properly. The source of the factor has yet to be determined. Sest = W'*Z; end
三、运行结果
四、备注
版本:2014a
完整代码或代写加1564658423
这篇关于【语音分离】基于matlab FASTICA语音分离【含Matlab源码 1023期】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-29易优CMS安装常见问题汇总-icode9专业技术文章分享
- 2024-06-28易优新手必读安装教程-icode9专业技术文章分享
- 2024-06-28忘记eyoucms后台密码怎么办?-icode9专业技术文章分享
- 2024-06-26终极指南:Scrum中如何设置需求优先级
- 2024-06-26AI大模型企业应用实战(25)-为Langchain Agent添加记忆功能
- 2024-06-26小白家庭 nas 搭建方案-icode9专业技术文章分享
- 2024-06-23AI大模型企业应用实战(14)-langchain的Embedding
- 2024-06-23AI大模型企业应用实战(15)-langchain核心组件
- 2024-06-23AI大模型企业应用实战(16)-langchain核心组件
- 2024-06-23AI 大模型企业应用实战(06)-初识LangChain