?? informax.m
字號:
clear all
b1=wavread('1.wav');
b2=wavread('2.wav');
b1=b1(1:80000,:);
b2=b2(1:80000,:);
b=[b1';b2'];
sources=b;
[N,P]=size(sources); %P為采樣點數,N為信號個數
permute=randperm(P); %產生一個置換矩陣
s=sources(:,permute);a=rand(N);
% a=[1 2;1 1]; %混合矩陣,或a=rand(N)
x=a*s; %置換的輸入信號混合
mixes=a*sources; %無置換的混合信號
%如果直接加載混合信號mixes=readsounds(['minx2';'mix1'])
%------預白化數據-----------------------
mx=mean(mixes');c=cov(mixes');
x=x-mx'*ones(1,P); %去均值
wz=2*inv(sqrtm(c)); %計算解相關矩陣
x=wz*x;
%--------各個初始值的選擇-----------------
w=[1 1;1 2]; %解混矩陣初始化也可為w=eye(N)或 w=rand(M,N)
M=size(w,2); %一般情況M=N
sweep=0;
Id=eye(M);
%-------------下面為4種情況的學習過程----------------------------
L=0.01;B=30; %2個信號
%L=0.001;B=30;sep %大于2個信號
%L=0.0001;B=30;sep %大于100個信號
%L=0.005;B=30;forI=1:10000,sep ;end;
sweep=sweep+1;t=1;
noblocks=fix(P/B);
BI=B*Id;
for t=t:B:t-1+noblocks*B
u=w*x(:,t:t+B-1);
w=w+L*(BI+(1-2*(1./(1+exp(-u))))*u')*w;
end
w=w*wz;
y=w*x;y1=y(1,:);y2=y(2,:);subplot(2,1,1);plot(y1);subplot(2,1,2);plot(y2);figure(2)
x1=x(1,:);x2=x(2,:);subplot(2,1,1);plot(x1);subplot(2,1,2);plot(x2);figure(3)
mixes1=mixes(1,:);mixes2=mixes(2,:);subplot(2,1,1);plot(mixes1);subplot(2,1,2);plot(mixes2);figure(4)
y=w*mixes;y1=y(1,:);y2=y(2,:);subplot(2,1,1);plot(y1);subplot(2,1,2);plot(y2);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -