%% High-Resolution Frequency-Wavenumber Spectrum Analysis % J. Capon, “High-Resolution Frequency-Wavenumber Spectrum Analysis,” _Proceedings % of the IEEE_, vol. 57, no. 8, pp. 1408–1418, Aug. 1969, doi: <https://doi.org/10.1109/PROC.1969.7278 % 10.1109/PROC.1969.7278>. % % H. L. Van Trees, _Optimum Array Processing: Part IV of Detection, Estimation, % and Modulation Theory_. New York, NY: Wiley, 2002.
clear close all %% Parameters
rng(253) % Array Parameters
% elements in array elemNum = 12;
% spacing wrt wavelength elemSpac = 0.5;
% element locations elemLoc = 0:elemSpac:(elemNum-1)*elemSpac; % Signal Parameters
% signal number sigNum = 6;
% direction of arrival sigAng = rand(1,sigNum)*180;
% signal to noise ratio snr = [30,70];
% sample number sampleNum = 1000;
% parameter match check if (length(snr) ~= sigNum) | (length(sigAng) ~= sigNum) disp('WARN: Signal number and parameter number NOT match.') end %% Impinging Waves/Signals % Transmitted Signals
% wave generation, here are some sets of uncorrelated white noise txWave = randn(sigNum,sampleNum);
% transmit power control based on given snr iflength(snr) == 1 txWave = db2mag(snr)*txWave; elseiflength(snr) >= sigNum iflength(snr) > sigNum disp('WARN: Extra SNRs are ignored.') end fori = 1:sigNum txWave(i,:) = db2mag(snr(i))*txWave(i,:); end elseiflength(snr) < sigNum disp('WARN: The last SNR is used for the rest of the signals.') fori = 1:sigNum ifi <= length(snr) txWave(i,:) = db2mag(snr(i))*txWave(i,:); else txWave(i,:) = db2mag(snr(end))*txWave(i,:); end end end % Array Manifold Matrix % For each signal, the array manifold vector is % % $$\mathbf{a}\left(\theta \right)=\exp \left(-j\frac{2\pi \mathbf{d}}{\lambda % \;}\cos \theta \;\right)$$ % % in which the element locations are % % $$\mathbf{d}={\left\lbrack 0,\frac{\lambda }{2},\cdots ,\left(N-1\right)\frac{\lambda % }{2}\right\rbrack }^{\mathrm{T}}$$
iflength(sigAng) > sigNum disp('WARN: Extra angles are ignored.') elseiflength(sigAng) < sigNum disp('ERROR: Angle number is less than signal number.') return end
% impinging signal rxSig = sigMF*txWave; rxIpn = randn(elemNum,sampleNum); end % Received Wave
rxWave = rxSig + randn(elemNum,sampleNum); %% Array Processing % The MVDR problem is to minimize output interference-plus-noise power under % distortionless contraint of target signal % % $$\begin{array}{l}\underset{\mathbf{w}}{\mathrm{minimize}\;\;} \;{\mathbf{w}}^{\mathrm{H}} % {\mathbf{R}}_{\mathrm{i}+\mathrm{n}} \mathbf{w}\\\mathrm{subecto}\;\mathrm{to}\;\;{\mathbf{w}}^{\mathrm{H}} % \mathbf{a}=1\end{array}$$ % % The problem can be solve using the Lagrange multiplier method, and the solution % is % % $$\mathbf{w}=\alpha {\mathbf{R}}_{\mathrm{i}+\mathrm{n}}^{-1} \mathbf{a}$$ % % where $\alpha \;$is the normalization factor that ensures the power of array % input and output desired signal remains unchanged % % $$\alpha =\frac{1}{{\mathbf{a}}^{\mathrm{H}} {\mathbf{R}}_{\mathrm{i}+\mathrm{n}} % \mathbf{a}}$$
% spectrum & signal location indicator plot(scanGrid,specNorm) hold on fori = 1:sigNum ifi == 1 plot([sigAng(i),sigAng(i)],[max(specNorm),min(specNorm)],'-.r'); else plot([sigAng(i),sigAng(i)],[max(specNorm),min(specNorm)],'-.g'); end end hold off
%% High-Resolution Frequency-Wavenumber Spectrum Analysis % J. Capon, “High-Resolution Frequency-Wavenumber Spectrum Analysis,” _Proceedings % of the IEEE_, vol. 57, no. 8, pp. 1408–1418, Aug. 1969, doi: <https://doi.org/10.1109/PROC.1969.7278 % 10.1109/PROC.1969.7278>. % % H. L. Van Trees, _Optimum Array Processing: Part IV of Detection, Estimation, % and Modulation Theory_. New York, NY: Wiley, 2002.
for elemNumIdx = 1:length(elemNumArr) for intAngIdx = 1:length(intAngArr)
%% Array Parameters
% elements in array elemNum = elemNumArr(elemNumIdx);
% spacing wrt wavelength elemSpac = 0.5;
% element locations elemLoc = 0:elemSpac:(elemNum-1)*elemSpac;
% Signal Parameters
% signal number sigNum = 2;
% direction of arrival desAng = 90; sigAng = [desAng,desAng+intAngArr(intAngIdx)];
% signal to noise ratio snr = [0,70];
% sample number sampleNum = 1024;
%% Impinging Waves/Signal
% wave generation, here are some sets of uncorrelated white noise txWave = randn(sigNum,sampleNum);
% transmit power control based on given snr iflength(snr) == 1 txWave = db2mag(snr)*txWave; elseiflength(snr) >= sigNum iflength(snr) > sigNum disp('WARN: Extra SNRs are ignored.') end fori = 1:sigNum txWave(i,:) = db2mag(snr(i))*txWave(i,:); end elseiflength(snr) < sigNum disp('WARN: The last SNR is used for the rest of the signals.') fori = 1:sigNum ifi <= length(snr) txWave(i,:) = db2mag(snr(i))*txWave(i,:); else txWave(i,:) = db2mag(snr(end))*txWave(i,:); end end end
%% Array Manifold Matrix iflength(sigAng) > sigNum disp('WARN: Extra angles are ignored.') elseiflength(sigAng) < sigNum disp('ERROR: Angle number is less than signal number.') return end
plot(intAngArr,smoothdata(sinrOut(elemNumIdx,:)),DisplayName=['$N=', ... num2str(elemNumArr(elemNumIdx)),'$']) hold on
end
%% figures plot([min(intAngArr),max(intAngArr)],[-3,-3],HandleVisibility="off") hold off
title('MVDR Output SINR v.s. Angular Difference') xlabel('Angular Difference between Desired and Interference Signal (°)') ylabel('Normalized Output SINR (dB)') ylim([-5max(smoothdata(sinrOut,2),[],'all')+1])
legend(Interpreter="latex",Location="southeast");
grid on
理想误码率
失配情况
分辨率
误码率
Reference
J. Capon, “High-Resolution Frequency-Wavenumber Spectrum Analysis,” Proceedings of the IEEE, vol. 57, no. 8, pp. 1408–1418, Aug. 1969, doi: 10.1109/PROC.1969.7278.
H. L. Van Trees, Optimum Array Processing: Part IV of Detection, Estimation, and Modulation Theory. New York, NY: Wiley, 2002.