📄 ecorrm.m
字号:
function Rout = ecorrm(inData, method, rangeIx, cpiIx, in5, in6, in7, dimensions)%ECORRM Estimates the antenna signal correlation matrix or modifies the estimate.%%--------%Synopsis:% Rout = ecorrm(inData, method, rangeIx, cpiIx, ...)%%Description:% Estimates the antenna signal correlation matrix or modifies the estimate.% If the input parameter "inData" is of data type RxRadarSigT, then% samples used for the estimation are taken from all pulses at a certain% range bin (specified by "rangeIx") and CPI (specified by "cpiIx").% If the input parameter "inData" is of data type RxCorrMatT the input% parameters "rangeIx" and "cpiIx" are not used.%% The base of all estimates of the correlation matrix is a maximum% likelihood (ML) estimate and this is what is% returned if nothing else is requested. The ML-estimate can be modified% in different ways, see the "method" input parameter. The estimation% and modification can be done in one call or two, where the first% calculate the ML-estimate and the second does the modification.% If the input is already a correlation matrix and "method" = [], then% nothing is done but returning the input as output.%% Modifications to the help text of this function should also be done% to the function "modcorrmkernel".%%Output and Input:% Rout (RxCorrMatT): The estimated antenna signal correlation matrix% or a modification of the estimate. This output parameter always% contains only one correlation matrix.% inData (RxRadarSigT or RxCorrMatT): The input antenna signal or a% correlation matrix of it.% method [D](StringT): Type of correlation matrix estimation. See below for% sections about each method.% = 'ml': ML-estimate (default). See below.% = 'forback': Forward-backward averaging. See below.% = 'spatsmooth': Spatial smoothing. See below.% = 'diagload': Diagonal loading. See below.% = 'diagloadeig': Diagonal loading relative noise eigenvalues. See below.% = 'equeig': Equal Noise Eigenvalues. See below.% = 'normeig': Norming relative the noise eigenvalues. See below.% rangeIx [D](IntScalarT): Specify the range bin to use in the radar% signal when estimating the correlation matrix. Default range bin is 1.% This input parameter is only applicable when the input parameter% "inData" is of data type RxRadarSigT.% cpiIx [D](IntScalarT): Like "rangeIx" but for CPI. Default CPI is 1.% dimensions [D] (IndexT): The used index in the data (a RxRadarSigT % variable), e.g = [ 3] for a space correlation matrix and = [1 3] for% a space-time (slow-time) correlation matrix. Not implemented.%%--------%Maximum Likelihood%Synopsis:% Rout = ecorrm(inData)% Rout = ecorrm(inData, 'ml')% Rout = ecorrm(inData, 'ml', rangeIx, cpiIx)%%Description:% Calculates the maximum likelihood correlation matrix estimate of the% received signals from different channels.%%Algoritm:% R = 1/L * X*X', where R is the correlation matrix,% L is the number of snapshots,% X is the data matrix with different channels as different% rows and different snapshots as different columns.%%--------%Forward-Backward Averaging%Synopsis:% Rout = ecorrm(inData, 'forback')% Rout = ecorrm(inData, 'forback', rangeIx, cpiIx)%%Description:% This method requires an ULA. When used on the 'expAnt' antenna type% this probably means that the calibration and near field compensations% must be performed on the signals (with "sigcomp2") and not on the% steering matrix (with "setcal1"). This method can only handle two% coherent signals. For more information about this method, see [2] p. 75-76.%%Algoritm:% Rfb = 0.5*(R+J*conj(R)*J);% where J is a (L x L) exchange matrix, whose components are zero except for% ones in the anti-diagonal, R is the ML-estimate, and Rfb is the modified% estimate.%%--------%Spatial Smoothing%Synopsis:% Rout = ecorrm(inData, 'spatsmooth', [], [], noElemSub)% Rout = ecorrm(inData, 'spatsmooth', [], [], noElemSub, channelIx)% Rout = ecorrm(inData, 'spatsmooth', rangeIx, cpiIx, noElemSub, channelIx)%%Output and Input:% noElemSub (IntScalarT): Number of elements in the subarrays.% channelIx [D](IndexT): Specifies which channels of the original steering% vector to use. The number of channels to use must be equal to% "noElemSub". If all channels are equal, which is a requirement for% this method, it does not matter which channels are chosen.% Default value is (1:noElemSub).%%Description:% In this method the array antenna is split into a number of overlapping% subarrays whose correlation matrices are averaged. The number K of% subarrays used is K = N - noElemSub +1, where N is the total number% of channels (elements) in the array. For each additional subarray the% method can handle one extra coherent source signal. A drawback with this % method is that the size of the antenna decreases, since the subarrays% are smaller than the original array.%% This method requires a regular array antenna with a translational% invariant property, e.g. an ULA. When used on the 'expAnt' antenna type% this probably means that the calibration and near field compensations% must be performed on the signals (with "sigcomp2") and not on the% steering matrix (with "setcal1").%% For more information about this method, see [2] p. 75-76.%%Algoritm:% Rss = zeros(noElemSub,noElemSub);% for n=1:noSubArray% Rss = Rss + R(n:n+noElemSub-1, n:n+noElemSub-1);% end% Rout = (1/noSubArray)*Rss;% where noSubArray is the number of subarrays.%%--------%Diagonal Loading%Synopsis:% Rout = ecorrm(inData, 'diagload', [], [], loadVal)% Rout = ecorrm(inData, 'diagload', rangeIx, cpiIx, loadVal)%%Output and Input:% loadVal (RealScalarT):%%Description:% An amount, which is determined by the input parameter "loadVal", of% the identity matrix is added to the correlation matrix. Diagonal loading% reduces the fluctuation of the small eigenvalues of the correlation% matrix [5,3,4]. A suitable size of "loadVal" is in the order of the noise% variance [5].%%Algoritm:%%--------%Diagonal Loading relative noise eigenvalues%Synopsis:% Rout = ecorrm(inData, 'diagloadeig', [], [], relLoadVal)% Rout = ecorrm(inData, 'diagloadeig', [], [], relLoadVal, noSrc)% Rout = ecorrm(inData, 'diagloadeig', rangeIx, cpiIx, relLoadVal)% Rout = ecorrm(inData, 'diagloadeig', rangeIx, cpiIx, relLoadVal, noSrc)%%Output and Input:% relLoadVal (RealScalarT): Load relative the noise eigenvalues (noise power).% noSrc [D](IntScalarT): Number of signal sources. This means that there% are ((number-of-channels) - noSrc) noise eigenvalues. If this value% is too low, the estimated noise power will be somewhat too low. If% this value is too high, the estimated noise power will be too high% (maybe much too high). Default value is = 1, which means that only the% smallest eigenvalue is used.%%Description:% An amount, which is determined by the input parameter "relLoadVal"% multiplied with the noise power, of the identity matrix is added to the % correlation matrix. Diagonal loading reduces the fluctuation of the small % eigenvalues of the correlation matrix [5,3,4]. A suitable size of % "loadVal" is in the order of the noise variance (power) [5]. The noise% power is calculated as the mean value of the smallest eigenvalues of the % spatial correlation matrix%%Algoritm:%%--------%Equal Noise Eigenvalues.%Synopsis:% Rout = ecorrm(inData, 'equeig')% Rout = ecorrm(inData, 'equeig', [], [], [], noSrc)% Rout = ecorrm(inData, 'equeig', rangeIx, cpiIx)% Rout = ecorrm(inData, 'equeig', rangeIx, cpiIx, [], noSrc)%%Output and Input:% noSrc [D](IntScalarT): Number of signal sources. This means that there% are ((number-of-channels) - noSrc) noise eigenvalues. If this value% is too low, the estimated noise power will be somewhat too low. If% this value is too high, the estimated noise power will be too high% (maybe much too high). Default value is = 1, which means that only the% smallest eigenvalue is used.%%Description:% All noise eigenvalues, as determined by "noSrc", are set equal to the% noise power. The noise power is calculated as the mean value of the% smallest eigenvalues of the spatial correlation matrix.%%Algoritm:%%--------%Norming relative the noise eigenvalues.%Synopsis:% Rout = ecorrm(inData, 'normeig')% Rout = ecorrm(inData, 'normeig', [], [], [], noSrc)% Rout = ecorrm(inData, 'normeig', rangeIx, cpiIx)% Rout = ecorrm(inData, 'normeig', rangeIx, cpiIx, [], noSrc)%%Output and Input:% relLoadVal (RealScalarT):% noSrc [D](IntScalarT): Number of signal sources. This means that there% are ((number-of-channels) - noSrc) noise eigenvalues. If this value% is too low, the estimated noise power will be somewhat too low. If% this value is too high, the estimated noise power will be too high% (maybe much too high). Default value is = 1, which means that only the% smallest eigenvalue is used.%%Description:% All eigenvalues (both signal and noise) are set equal to the noise power.% The noise power is calculated as the mean value of the smallest eigenvalues % of the spatial correlation matrix.%%Algoritm:%%--------%Notations:% Data type names are shown in parentheses and they start with a capital% letter and end with a capital T. Data type definitions can be found in [1]% or by "help dbtdata".% [D] = This parameter can be omitted and then a default value is used.% When the [D]-input parameter is not the last used in the call, it must be% given the value [], i.e. an empty matrix.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -