主要内容

提取混合信号

此示例显示了如何使用r解散混合音频信号。您可以使用r在包括预处理步骤时,执行独立分量分析(ICA)。ICA模型是

$$ x = \ mu +作为。$$

这里,$ x $是A.$ p $.-1-1载体的混合信号,$ \ mu $是A.$ p $.-By-1偏移值矢量,$ a $是A.$ p $.-经过-$ q $混合矩阵,和$ s $是A.$ q $-1原始信号的1向量。首先假设$ a $是一个方形矩阵。如果你知道的话$ \ mu $$ a $,您可以恢复原始信号$ s $来自数据$ x $

$$ s = a ^ { -  1}(x  -  \ mu)。$$

使用r功能,即使在不知道混合矩阵,也可以执行此恢复$ a $或者意思$ \ mu $。给出了一组几个观察$ x(1)$$ x(2)$,......,r提取原始信号$ s(1)$$ s(2)$,......

加载数据

加载一组六个音频文件,使用MATLAB®送货。将每个文件修剪到10,000个样本。

files = {'chirp.mat''Gong.mat''handel.mat''笑声..'splat.mat''train.mat'};s =零(10000,6);为了i = 1:6 test = load(文件{i});y = test.y(1:10000,1);s(:,i)= y;结尾

混合信号

通过使用随机混合矩阵将信号混合在一起并添加随机偏移。

RNG.默认重复性的%mixdata = s * Randn(6)+ Randn(1,6);

要收听原始声音,请执行此代码:

对于i = 1:6 disp(i);声音(S(:,i));暂停;结尾

要收听混合声音,请执行此代码:

对于i = 1:6 disp(i);声音(mixdata(:,i));暂停;结尾

绘制信号。

数字为了i = 1:6子图(2,6,i)绘图(s(:,i))标题(['声音 ',num2str(i)])子图(2,6,i + 6)绘图(Mixdata(:,i))标题(['混合 ',num2str(i)])结尾

原始信号结构明显。混合信号结构较少。

预浪混合信号

要有效地分离信号,“通过使用”信号“信号pr此示例结束时出现的函数。这个功能转换mixdata.因此它具有零均值和身份协方差。

这个想法是下面的。如果$ s $是具有统计独立组件的零平均源,然后

$$ e(s)= 0 $$

$$ e(ss ^ t)= i。$$

然后是卑鄙和协方差$ x $

$$ e(x)= \ mu $$

$$ {\ rm cov}(x)= aa ^ t = c。$$

假设你知道$ \ mu $$ C $。在实践中,您可以从列的样本和协方差估计这些数量$ x $。你可以解决$ s $按照$ x $经过

$$ s = a ^ { -  1}(x-\ mu)=(a ^ ta)^ { -  1} a ^ t(x-\ mu)。$$

后一程等式甚至持续$ a $不是方形可逆的矩阵。

假设$ U $是A.$ p $.-经过-$ q $正半纤维矩阵的左特征向量矩阵$ C $, 和$ \ sigma $是个$ q $-经过-$ q $特征值的矩阵。然后

$$ c = u \ sigma u ^ t $$

$$ u ^ tu = i。$$

然后

$$ aa ^ t = u \ sigma u ^ t。$$

有许多混合矩阵$ a $满足最后一个等式。如果$ w $是A.$ q $-经过-$ q $正常的矩阵,然后

$$ w ^ tw = w w ^ t =我$$

$$ a = u \ sigma ^ {1/2} w。$$

替换为方程式$ s $

$$ s = w ^ t \ tilde {x},\ \ rm {where} $$

$$ \ tilde {x} = \ sigma ^ { -  1/2} u ^ t(x-\ mu)。$$

$ \ tilde {x} $是持久的数据。r计算未知矩阵$ w $在假设的情况下$ s $尽可能独立。

mixdata = prewhiten(mixdata);

分开所有信号

超高斯源具有接近零的尖峰,例如声音1的直方图。

图表直方图(S(:,1))

在询问六个功能时执行重建ICA。表明每个来源是超级高斯。

q = 6;mdl = rica(mixdata,q,'nongaussianityindicator',(6,1));

提取功能。如果解密程序成功,则该功能与原始信号成比例。

解密=转换(MDL,MIXDATA);

将解密的信号与原始信号进行比较

绘制原始和解密的信号。

数字为了i = 1:6子图(2,6,i)绘图(s(:,i))标题(['声音 ',num2str(i)])子图(2,6,i + 6)plot(解密(:,i))标题(['unmix',num2str(i)])结尾

解密信号的顺序与原始顺序不同。重新排序列,以便未混合信号与相应的原始信号匹配。缩放未混合信号以具有与相应的原始信号相同的规范。(r无法识别原始信号的比例,因为任何刻度都可以导致相同的信号混合。)

解密=解密(:,[2,5,4,6,3,1]);为了i = 1:6解密(:,i)=解密(:,i)/常规(解密(:,i))*常规(s(:,i));结尾

绘制原始和解密的信号。

数字为了i = 1:6子图(2,6,i)绘图(s(:,i))ylim([ -  1,1])标题(['声音 ',num2str(i)])子图(2,6,i + 6)plot(解密(:,i))ylim([ -  1,1])标题(['unmix',num2str(i)])结尾

解密信号看起来类似于原始信号。要收听解密声音,请执行此代码。

对于i = 1:6 disp(i);声音(解密(:,i));暂停;结尾

这是代码pr功能。

功能z = prewhiten(x)对于N观察和P预测器,%x = n-by-p矩阵%z = n-by-p预振矩阵%1. X的大小。[n,p] = size(x);断言(n> = p);%2. X的协方差的SVD。我们也可以使用SVD(x)继续但n%可能很大,所以我们牺牲了一些准确性的速度。[u,sig] = svd(cov(x));sig = diag(sig);sig = sig(:)';%3.找出SIG的值是非零的。tol = eps(类(x));idx =(sig> max(sig)* tol);断言(〜所有(idx == 0));%4.获取SIG和U的相应列的非零元素。sig = sig(idx);u = u(:,idx);%5.计算预良数据。mu =均值(x,1);z = bsxfun(@ minus,x,mu);z = bsxfun(@ times,z * u,1。/ sqrt(sig));结尾

也可以看看

|||

相关例子

更多关于