⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 easi_demo.m

📁 cardoso 的ICA编码
💻 M
字号:
% A simple demo program for EASI :% an adaptive blind source separation algorithm% Ref :%   @inproceedings{PFSEusipco,%   title = "Adaptive source separation without prewhitening",%   author = "Beate Laheld and Jean-Fran\c{c}ois Cardoso",%   booktitle = "{Proc. EUSIPCO'94}",%   pages = "183--186",%   address = {Edinburgh},%   month = sep,%   year = "1994" }% For any information, comments, etc... contact cardoso@sig.enst.fr%--------------------------------------------------------------------%% Aug. 22, 97: corrected a bug where a comment was not commented out...clearblah=['Each experiment consists in :                                       ';' - Randomly choosing a mixing matrix and an intitial separator      ';' - Running 200 steps of EASI with QAM4 signals                      ';' - Displaying the coefficients of the global system separator*mixing';'    These should converge to 0 or 1                                 ';];disp(blah);% -----------------------------------------------------------------------nsou  = 3;	% number of sourcesncap  = 4;	% number of sensors (not smaller than nsou !)T	= 200;	% number of sampleslambda  = 0.02;	% adaptation stepidsou	= eye(nsou)		;suivi	= zeros(nsou*nsou,T)	; % a buffer while 1, fprintf('Another experiment\n');A= randn(ncap,nsou)+i*randn(ncap,nsou);	% random mixing matrixB= randn(nsou,ncap)+i*randn(nsou,ncap); % random initial separating matrixfor t=1:T % next line generates a vector of 'nsou' independent normalized QAM4 signals s	= (2*fix(2*rand(nsou,1))-1+i* (2*fix(2*rand(nsou,1))-1)) /sqrt(2); x	= A*s		; 	% the `observed'  mixture y	= B*x		;	% the output%-----------------  here is the algorithm   ---------- y2	= y*y'			; g	= diag(y2).*y		;% Other nonlinearities to be tried............% g	=   y .* diag(0.1*y2).*diag(y2)	;% g	=   y .* sqrt(diag(y2))		;% g	=   y .*  log(diag(y2))		;% g	= - y .*     (diag(y2)<0.9)	;% g	=   y ./  log(diag(y2))		;% g	= - y ./ sqrt(diag(y2))		;% g	= - y ./      diag(y2)		;%---- gy	= g * y'		; G	= (y2 - idsou)/(1+lambda*trace(y2)) + (gy - gy')/(1+lambda*abs(g'*y)) ; B	= B - lambda*G*B	; % updating the separating matrix%-----------------  here ends the algorithm ---------- tot	= B*A		;  % the global mixing-unmixing system  suivi(:,t)= tot(:)	;  % keep for further displayend;%--- display the modulus of the coefficients of the global system	clg;	plot( [0 T], [0 0]);plot( [0 T], [ 1 1 ]);	xlabel('Iteration number');	ylabel('Modulus of mixture coefficients');	hold on;	for ip=1:nsou*nsou	 plot(abs(suivi(ip,1:T)));	end;	hold off;	axis([0 T 0 2]);drawnow;end;	% next experiment

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -