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