Why does this code give error?
2 ビュー (過去 30 日間)
古いコメントを表示
clear;clc
%%
fc = 3e8;% Carrier frequency
Nb = 1000;% Number of snapshots
c = 3e8;
wavelength = c/fc;% The wavelength of the received signal
d = 0.5*wavelength;
theta = [5 40];
M = length(theta);% Number of signals
N = 10;% Number of antennas
% Wavenumber
beta = 2*pi/wavelength;
% Signal amplitude
A = 1;
% SNR (dB)
snr = 5;
% Variance of noise
sigma=sqrt((A^2)/(2*10^(snr/10)));
% Source signal
D = randi(M,Nb,1);
S =A*(2*D - 1);
% The electrical phase shift from element to element along the array
phi=beta*d*cos(theta*pi/180);
% Matrix of steering vectors
for i=1:M
for k=1:N;
VecteurDirectionnel(k,i)= exp(j*(k-1)*phi(i));
end
end
% White Gaussien noise
B = (sigma^2)*(randn(N,Nb)+j*randn(N,Nb))/sqrt(2);
% Array output:signal plus noise
X = VecteurDirectionnel*S+B;
% Estimation of the spatial correlation matrix of the observed signal
Rxx = X*X'/Nb;
% Eigen decomposition
[Vi,Li] = eig(Rxx);
[L,I] = sort(diag(Li),'descend');
V = Vi(:,I);
Vs = V(:,1:M);
Vs1=Vs(1:N-1,:);
Vs2=Vs(2:N,:);
% Direction Of Arrival
% Least square
xsi=linsolve(Vs(1:N-1,:),Vs(2:N,:));
% DOA estimation
doa=acosd((angle(eig(xsi))/(2*pi*d)))
0 件のコメント
採用された回答
Matt J
2024 年 4 月 16 日
編集済み: Matt J
2024 年 4 月 16 日
As you can see, VecteurDirectionnel and S are the wrong sizes for matrix multiplication,
whos VecteurDirectionnel S
% Array output:signal plus noise
X = VecteurDirectionnel*S+B;
6 件のコメント
Matt J
2024 年 4 月 19 日
Well S is Nb x 1 because D is Nb x 1, from this line,
D = randi(M,Nb,1);
Perhaps you meant to have,
D = randi([low, hi] , [M,Nb]);
but we have no way of knowing what you intended the low and hi limits to be.
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!