exponenta event banner

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

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

Определение дальности и скорости целей

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

Уточните требования к радиолокационной системе. В этом примере используется несущая частота 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);

Создайте линейный ЧМ-сигнал с шириной импульса 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