www.pudn.com > bss_eval.zip > bss_proj.m


function [PY_x coeff]=bss_proj(x,Y) 
 
% compute the orthogonal projection of x on the subspace spanned by the row(s) of Y. 
% 
% Usage: PY_x         = proj(x,Y) 
%        [PY_x coeff] = proj(x,Y) 
% 
% Input: 
%   - x: row vector of length T, 
%   - Y: vector or matrix of length T. 
% 
% Ouput: 
%   - PY_x: row vector of length T containing the orthogonal projection of 
%   x onto the range of the rows of Y. 
%   - coeff : column vector with as many rows as Y containing the 
%   coefficients such that PY_x = coeff.'*Y 
% 
% Developers:  - Cedric Fevotte (cf269@cam.ac.uk) - Emmanuel Vincent 
% (vincent@ircam.fr) - Remi Gribonval (remi.gribonval@irisa.fr) 
 
% Gram matrix of Y 
G=Y*Y'; 
 
%same as coeff=inv(conj(G))*conj(Y*x'); 
coeff=conj(G)\conj(Y*x'); 
%if the Gram matrix G is not invertible then coeff=pinv(conj(G))*conj(Y*x') 
%should work, but in general it is much slower than the default code 
 
PY_x=  coeff.'*Y; 
 
% Same as PY_x= x*pinv(Y)*Y;