Оцените область значений и Доплера Используя импульсное сжатие

Этот пример показывает эффекты импульсного сжатия, где переданный импульс модулируется и коррелируется с полученным сигналом. Радар и системы гидролокатора используют импульсное сжатие, чтобы улучшить отношение сигнал-шум (SNR) и разрешение области значений путем сокращения длительности эха. Этот пример также демонстрирует Доплера, обрабатывающего, где радиальная скорость цели определяется из эффекта Доплера, созданного целевым движением.

Определение области значений и скорости целей

Следующая радиолокационная система распространяет последовательность импульсов линейных форм волны частоты модулируется (FM) к движущейся цели и получает эхо. Путем применения согласованной фильтрации и Доплера, обрабатывающего к эху, радиолокационная система может эффективно обнаружить область значений и скорость цели.

Задайте требования для радиолокационной системы. Этот пример использует несущую частоту fc из 3 ГГц и частота дискретизации fs из 1 МГц.

fc = 3e9;
fs = 1e6;
c = physconst('LightSpeed');

Создайте системные объекты, чтобы смоделировать радиолокационную систему. Система является моностатической. Передатчик расположен в (0,0,0) и стационарный, в то время как цель расположена в (5000,5000,0) со скоростью (25,25,0) с эффективной площадью рассеивания (ЭПР) 1 квадратного метра.

antenna = phased.IsotropicAntennaElement('FrequencyRange',[1e8 10e9]);
transmitter = phased.Transmitter('Gain',20,'InUseOutputPort',true);
txloc = [0;0;0];
tgtloc = [5000;5000;0]; % Radial Dist ~= 7071 m
tgtvel = [25;25;0]; % Radial Speed ~= 35.4 m/s
target = phased.RadarTarget('Model','Nonfluctuating','MeanRCS',1,'OperatingFrequency',fc);
antennaplatform = phased.Platform('InitialPosition',txloc);
targetplatform = phased.Platform('InitialPosition',tgtloc,'Velocity',tgtvel);
radiator = phased.Radiator('PropagationSpeed',c,...
   'OperatingFrequency',fc,'Sensor',antenna);
channel = phased.FreeSpace('PropagationSpeed',c,...
   'OperatingFrequency',fc,'TwoWayPropagation',false);
collector = phased.Collector('PropagationSpeed',c,...
   'OperatingFrequency',fc,'Sensor',antenna);
receiver = phased.ReceiverPreamp('NoiseFigure',0,...
   'EnableInputPort',true,'SeedSource','Property','Seed',2e3);

Создайте линейную форму волны FM с шириной импульса 25 μs, импульсной частотой повторения 10 кГц и полосой пропускания развертки 100 кГц. Коэффициенты согласованного фильтра сгенерированы от этой формы волны.

waveform = phased.LinearFMWaveform('PulseWidth',10e-6,'PRF',10e3,'OutputFormat','Pulses','NumPulses',1,'SweepBandwidth',1e5);
wav = waveform();
c = physconst('LightSpeed');
maxrange = c/(2*waveform.PRF);
SNR = npwgnthresh(1e-6,1,'noncoherent');
lambda = c/fs;
tau = waveform.PulseWidth;
Ts = 290;
dbterm = db2pow(SNR - 2*transmitter.Gain);
Pt = (4*pi)^3*physconst('Boltzmann')*Ts/tau/target.MeanRCS/lambda^2*maxrange^4*dbterm;

filter = phased.MatchedFilter(...
   'Coefficients',getMatchedFilter(waveform),...
   'GainOutputPort',true);

Чтобы улучшить Доплеровское разрешение, система испускает 64 импульса, и эхо хранится в rxsig. Матрица данных хранит быстрые выборки времени (время в каждом импульсе) вдоль каждого столбца и медленных выборок времени (время между импульсами) вдоль каждой строки.

numPulses = 64;
rxsig = zeros(length(wav),numPulses);

for n = 1:numPulses
    [tgtloc,tgtvel] = targetplatform(1/waveform.PRF);
    [tgtrng,tgtang] = rangeangle(tgtloc,txloc);
    
    [txsig, txstatus] = transmitter(wav);
    txsig = radiator(txsig,tgtang);
    txsig = channel(txsig,txloc,tgtloc,[0;0;0],tgtvel);
    txsig = target(txsig);
    txsig = channel(txsig,tgtloc,txloc,tgtvel,[0;0;0]);
    txsig = collector(txsig,tgtang);
    rxsig(:,n) = receiver(txsig,~txstatus);
end

prf = waveform.PRF;
fs = waveform.SampleRate;
response = phased.RangeDopplerResponse('DopplerFFTLengthSource','Property','DopplerFFTLength',2048,'SampleRate',fs,'DopplerOutput','Speed','OperatingFrequency',fc,'PRFSource','Property','PRF',prf);
filt = getMatchedFilter(waveform);
[resp,rng_grid,dop_grid] = response(rxsig,filt);

plotResponse(response,rxsig,filt,'Unit','db')
ylim([0 12000])

Ответ показывает, что цель перемещается приблизительно в-40 м/с, и что цель переезжает от передатчика, поскольку скорость отрицательна.

Вычислите логические элементы области значений, соответствующие скорости перемещения сигнала. График первой медленной выборки времени показывает самые большие пиковые приблизительно 7 000 м, который соответствует графику диаграммы направленности скорости области значений.

fasttime = unigrid(0,1/fs,1/prf,'[)');
rangebins = (physconst('Lightspeed')*fasttime/2);

plot(rangebins,abs(rxsig(:,1)))

Определение области значений

Создайте порог, где вероятность ложного предупреждения меньше 1e-6. Используйте некогерентное интегрирование этих 64 импульсов, принимающих, что сигнал находится в белом Гауссовом шуме. Возьмите самый большой пик выше порога и отобразите предполагаемый целевой диапазон.

pfa = 1e-6;
NoiseBandwidth = 5e6/2;
npower = noisepow(NoiseBandwidth, receiver.NoiseFigure,receiver.ReferenceTemperature);
thresh = npwgnthresh(pfa,numPulses,'noncoherent');
thresh = npower*db2pow(thresh);
[pks,range_detect] = findpeaks(pulsint(rxsig,'noncoherent'),'MinPeakHeight',thresh,'SortStr','descend');
range_estimate = rangebins(range_detect(1));
fprintf("Range Estimate: %3.2f m", range_estimate);
Range Estimate: 7344.92 m

Определение скорости

Возьмите медленно-разовые выборки, соответствующие интервалу области значений, содержащему обнаруженную цель, и постройте оценку спектральной плотности мощности медленно-разовых выборок с помощью periodogram функция.

ts = rxsig(range_detect(1),:).';
periodogram(ts,[],256,prf,'centered')

Пиковая частота соответствует эффекту Доплера, разделенному на 2, который может быть преобразован в целевую скорость. Положительная скорость означает, что цель приближается к передатчику, в то время как отрицательная скорость указывает, что цель переезжает от передатчика.

[Pxx,F] = periodogram(ts,[],256,prf,'centered');

[Y,I] = max(Pxx);
lambda = physconst('Lightspeed')/fc;
tgtspeed = dop2speed(F(I)/2,lambda);
fprintf("Doppler Shift Estimate: %2.2f Hz",F(I)/2)
Doppler Shift Estimate: -351.56 Hz
fprintf("Speed Estimate: %2.2f m/s",tgtspeed)
Speed Estimate: -35.13 m/s