Use eigh instead of eig

The mean of Hermitian matrices is also Hermitian
This commit is contained in:
Christos Falas 2025-01-30 11:27:41 +00:00 committed by cfalas
parent 42ac105240
commit 785021b557

View File

@ -113,11 +113,12 @@ class AoA:
def evaluate(self, theta: torch.Tensor, tof: torch.Tensor) -> torch.Tensor: def evaluate(self, theta: torch.Tensor, tof: torch.Tensor) -> torch.Tensor:
R = torch.mean(self.historical_autocorr, dim=0) R = torch.mean(self.historical_autocorr, dim=0)
assert (R == torch.conj(R).T).all()
# The smallest eigenvectors span the noise subspace, # The smallest eigenvectors span the noise subspace,
# and the largest span the signal subspace. # and the largest span the signal subspace.
logger.debug(f"Calculating eigenvectors of R: {R.shape}") logger.debug(f"Calculating eigenvectors of R: {R.shape}")
eigvals, eigvecs = torch.linalg.eig(R) eigvals, eigvecs = torch.linalg.eigh(R)
assert isinstance(eigvals, torch.Tensor) assert isinstance(eigvals, torch.Tensor)
assert isinstance(eigvecs, torch.Tensor) assert isinstance(eigvecs, torch.Tensor)
logger.info(f"Eigenvalues: {eigvals}") logger.info(f"Eigenvalues: {eigvals}")