Оценка области значений и допплера с использованием импульсного сжатия

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

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

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

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

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

Создайте системные объекты для моделирования радиолокационной системы. Система моностатическая. Передатчик расположен на (0,0,0) и является стационарным, в то время как цель расположена на (5000,5000,0) со скоростью (25,25,0) с радиолокационным поперечным сечением (RCS) 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 мкс, частотой повторения импульса 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 м/с, и что цель удаляется от передатчика, так как скорость отрицательная.

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

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