的最优盲源分离MATLAB源程序如下:
- function [R,y]=cubica34a(x)
- verbose =0;%信息显示控制变量
- [N,P]=size(x);
- Q=eye(N);
- %中心化和白化
- if nargin==1
- fprintf('\n中心化和白化!\n\n');
- end
- x=x-mean(x,2)*ones(1,P);
- [V,D]=eig(x*x'/P);
- v=diag(real(diag(D).^(-0.5)))*V';
- y=v*x;
- if nargin==1
- fprintf('变换\n');
- end
- %开始变换迭代
- for t=1:(1+round(sqrt(N)))
- for i=1:N-1
- for j=i+1:N
- %计算累积量
- u=y([i j],:);
- sq=u.^2;
- sq1=sq(1,:);
- sq2=sq(2,:);
- u1=u(1,:)';
- u2=u(2,:)';
- C111=sq1*u1/P;
- C112=sq1*u2/P;
- C122=sq2*u1/P;
- C222=sq2*u2/P;
- C1111=sq1*sq1'/P-3;
- C1112=(sq1.*u1')*u2/P;
- C1122=sq1*sq2'/P-1;
- C1222=(sq2.*u2')*u1/P;
- C2222=sq2*sq2'/P-3;
- %系数
- c_34=(1/6)*(1/8)*(3*(C111^2+C222^2)-9*(C112^2+C122^2)-6*(C111*C122+C112*C222));
- c_44=(1/24)*(1/16)*(7*(C1111^2+C2222^2)-16*(C1112^2+C1222^2)-12*(C1111*C1122+C1122*C2222)-36*C1122^2-32*C1112*C1222-2*C1111*C2222);
- s_34=(1/6)*(1/4)*(6*(C111*C112-C122*C222));
- s_44=(1/24)*(1/32)*(56*(C1111*C1112-C1222*C2222)+48*(C1112*C1122-C1122*C1222)+8*(C1111*C1222-C1112*C2222));
- %计算变换角
- phi_max=(1/4)*atan2(s_34+s_44,c_34+c_44);
- %Givens变换矩阵Qij
- Qij=eye(N);
- c=cos(phi_max);
- s=sin(phi_max);
- Qij(i,j)=s;
- Qij(j,i)=-s;
- Qij(i,i)=c;
- Qij(j,j)=c;
- Q=Qij*Q;
- %变换估计信号y
- y([i j],:)=[c s;-s c]*u;
- end
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
最优盲源分离.rar
(856 Bytes, 下载次数: 41)
|