В ситуациях, где бортовая радиолокационная система должна подавить помеху, возвращается и интерференция передатчика помех, системе нужен более сложный алгоритм, чем импульсный компенсатор DPCA может обеспечить. Одна опция является алгоритмом демонстрационной матричной инверсии (SMI). SMI является оптимальным алгоритмом STAP и часто используется в качестве базовой линии для сравнения с другими алгоритмами.
Алгоритм SMI является в вычислительном отношении дорогим и принимает стационарную среду через многие импульсы. Если необходимо подавить помеху, возвращается и интерференция передатчика помех с меньшим количеством вычисления, или в быстро изменяющей среде, рассмотрите использование импульсного компенсатора ADPCA вместо этого.
Объект phased.STAPSMIBeamformer
реализует алгоритм SMI. В частности, объект позволяет вам задать:
Количество учебных ячеек. Алгоритм использует учебные ячейки, чтобы оценить интерференцию. В целом большее число учебных ячеек приводит к лучшей оценке интерференции.
Количество защитных ячеек близко к целевым ячейкам. Алгоритм распознает, что защитные ячейки, чтобы предотвратить цель возвращаются из загрязнения оценки интерференции.
Этот сценарий идентичен тому, представленному в Адаптивном Импульсном Компенсаторе DPCA, Чтобы Отклонить Помеху и Интерференцию. Можно запустить код для обоих примеров, чтобы сравнить импульсный компенсатор ADPCA с формирователем луча SMI. Детали в качестве примера и код повторяются для удобства.
Чтобы повторить сценарий для удобства, бортовая радарная платформа является ULA с шестью элементами, действующим на уровне 4 ГГц. Элементы массива расположены с интервалами в половине длины волны несущей частоты на 4 ГГц. Радар испускает десять меандров два μs в длительности с PRF 5 кГц. Платформа проходит ось массивов со скоростью, равной половине продукта интервала элемента и PRF. Цель имеет неколебание RCS 1 квадратного метра и перемещается с постоянным вектором скорости (15,15,0). Стационарный широкополосный заградительный передатчик помех расположен в (3.5e3,1e3,0). Передатчик помех имеет эффективную излучаемую мощность 1 кВт.
Примечание: Этот пример запускается только в R2016b или позже. Если вы используете более ранний релиз, заменяете каждый вызов функции с эквивалентным синтаксисом step
. Например, замените myObject(x)
на step(myObject,x)
.
PRF = 5e3; fc = 4e9; fs = 1e6; c = physconst('LightSpeed'); antenna = phased.IsotropicAntennaElement... ('FrequencyRange',[8e8 5e9],'BackBaffled',true); lambda = c/fc; array = phased.ULA(6,'Element',antenna,'ElementSpacing',lambda/2); waveform = phased.RectangularWaveform('PulseWidth', 2e-6,... 'PRF',PRF,'SampleRate',fs,'NumPulses',1); radiator = phased.Radiator('Sensor',array,... 'PropagationSpeed',c,... 'OperatingFrequency',fc); collector = phased.Collector('Sensor',array,... 'PropagationSpeed',c,... 'OperatingFrequency',fc); vy = (array.ElementSpacing * PRF)/2; transmitterplatform = phased.Platform('InitialPosition',[0;0;3e3],... 'Velocity',[0;vy;0]); clutter = phased.ConstantGammaClutter('Sensor',array,... 'PropagationSpeed',radiator.PropagationSpeed,... 'OperatingFrequency',radiator.OperatingFrequency,... 'SampleRate',fs,... 'TransmitSignalInputPort',true,... 'PRF',PRF,... 'Gamma',surfacegamma('woods',radiator.OperatingFrequency),... 'EarthModel','Flat',... 'BroadsideDepressionAngle',0,... 'MaximumRange',radiator.PropagationSpeed/(2*PRF),... 'PlatformHeight',transmitterplatform.InitialPosition(3),... 'PlatformSpeed',norm(transmitterplatform.Velocity),... 'PlatformDirection',[90;0]); target = phased.RadarTarget('MeanRCS',1,... 'Model','Nonfluctuating','OperatingFrequency',fc); targetplatform = phased.Platform('InitialPosition',[5e3; 5e3; 0],... 'Velocity',[15;15;0]); jammer = phased.BarrageJammer('ERP',1e3,'SamplesPerFrame',200); jammerplatform = phased.Platform(... 'InitialPosition',[3.5e3; 1e3; 0],'Velocity',[0;0;0]); channel = phased.FreeSpace('OperatingFrequency',fc,... 'TwoWayPropagation',false,'SampleRate',fs); receiverpreamp = phased.ReceiverPreamp('NoiseFigure',0,... 'EnableInputPort',true,'SampleRate',fs,'Gain',40); transmitter = phased.Transmitter('PeakPower',1e4,... 'InUseOutputPort',true,'Gain',40);
Распространите эти десять меандров к и от цели и соберите ответы в массиве. Вычислите эхо помехи с помощью постоянной гамма модели с гамма значением, соответствующим лесистому ландшафту. Кроме того, распространите создающий затор сигнал от местоположения передатчика помех до бортового ULA.
NumPulses = 10; wav = waveform(); M = fs/PRF; N = array.NumElements; rxsig = zeros(M,N,NumPulses); csig = zeros(M,N,NumPulses); jsig = zeros(M,N,NumPulses); fasttime = unigrid(0,1/fs,1/PRF,'[)'); rangebins = (c*fasttime)/2; clutter.SeedSource = 'Property'; clutter.Seed = 40543; jammer.SeedSource = 'Property'; jammer.Seed = 96703; receiverpreamp.SeedSource = 'Property'; receiverpreamp.Seed = 56113; jamloc = jammerplatform.InitialPosition; for n = 1:NumPulses [txloc,txvel] = transmitterplatform(1/PRF); % move transmitter [tgtloc,tgtvel] = targetplatform(1/PRF); % move target [~,tgtang] = rangeangle(tgtloc,txloc); % get angle to target [txsig,txstatus] = transmitter(wav); % transmit pulse csig(:,:,n) = clutter(txsig(abs(txsig)>0)); % collect clutter txsig = radiator(txsig,tgtang); % radiate pulse txsig = channel(txsig,txloc,tgtloc,... txvel,tgtvel); % propagate pulse to target txsig = target(txsig); % reflect off target txsig = channel(txsig,tgtloc,txloc,... tgtvel,txvel); % propagate to array rxsig(:,:,n) = collector(txsig,tgtang); % collect pulse jamsig = jammer(); % generate jammer signal [~,jamang] = rangeangle(jamloc,txloc); % angle from jammer to transmitter jamsig = channel(jamsig,jamloc,txloc,... [0;0;0],txvel); % propagate jammer signal jsig(:,:,n) = collector(jamsig,jamang); % collect jammer signal rxsig(:,:,n) = receiverpreamp(... rxsig(:,:,n) + csig(:,:,n) + jsig(:,:,n),... ~txstatus); % receive pulse plus clutter return plus jammer signal end
Определите область значений цели, логический элемент области значений и двухсторонний эффект Доплера.
sp = radialspeed(tgtloc, targetplatform.Velocity, ... txloc, transmitterplatform.Velocity); tgtdoppler = 2*speed2dop(sp,lambda); tgtLocation = global2localcoord(tgtloc,'rs',txloc); tgtazang = tgtLocation(1); tgtelang = tgtLocation(2); tgtrng = tgtLocation(3); tgtcell = val2ind(tgtrng,c/(2 * fs));
Создайте объект формирователя луча SMI. Используйте 100 учебных ячеек, 50 на каждой стороне логического элемента целевого диапазона. Используйте четыре защитных ячейки, два логических элемента области значений перед целевой ячейкой и два логических элемента области значений вне целевой ячейки. Получите ответ формирователя луча и веса.
tgtang = [tgtazang; tgtelang]; beamformer = phased.STAPSMIBeamformer('SensorArray',array,... 'PRF',PRF,'PropagationSpeed',c,... 'OperatingFrequency',fc,... 'Direction',tgtang,'Doppler',tgtdoppler,... 'WeightsOutputPort',true,... 'NumGuardCells',4,'NumTrainingCells',100); [y,weights] = beamformer(rxsig,tgtcell);
Постройте полученный массив вывод после beamforming.
plot([tgtrng,tgtrng],[0 5e-6],'-.',rangebins,abs(y)) axis tight title('SMI Beamformer Output') xlabel('Range (meters)') ylabel('Magnitude')
Постройте ответ углового Доплера с beamforming весами.
response = phased.AngleDopplerResponse('SensorArray',array,... 'OperatingFrequency',4e9,'PRF',PRF,... 'PropagationSpeed',physconst('LightSpeed')); plotResponse(response,weights) title('Angle-Doppler Response with SMI Beamforming Weights')