Измерьте уровни яркости Используя осциллограф интенсивности

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

Чтобы исследовать данные, нажмите кнопку Cursor Measurement на Панели инструментов. Вы видите два курсора, каждый из которых представлен парами креста нитей. Чтобы отличить курсоры, одна пара состоит из сплошных линий, и вторая пара состоит из пунктирных линий и помечена с 1 или 2.

Курсор 1 имеет твердый крест нитей и накладывает пересечение двух сигнальных линий. Курсор 2 подчеркнул штриховой линией крест нитей и накладывает область без сигналов. Панель Cursor Measurements показывает координаты курсоров вовремя, и область значений (пометил X), и интенсивность в этих положениях. Cursor 1 расположен в области значений 2 775 метров и время 3,6 секунд. Интенсивность сигнала в этой точке является 1.989e-6 ваттами. Cursor 2 расположен в области значений 3 725 метров и время 2,9 секунд. Интенсивность сигнала в этой точке является 3.327e-7 ваттами. Можно переместить курсоры в любые положения интереса и получить значения интенсивности.

RTI и отображения DTI в полной радарной симуляции

Используйте phased.IntensityScope Системный объект? отобразить обнаружение выход полной симуляции радиолокационной системы. Радарный сценарий содержит стационарный одноэлементный моностатический радар и три движущихся цели.

Примечание: Этот пример запускается только в R2016b или позже. Если вы используете более ранний релиз, заменяете каждый вызов функции с эквивалентным step синтаксис. Например, замените myObject(x) с step(myObject,x).

Установите радарные рабочие параметры

Установите вероятность обнаружения, вероятность ложного предупреждения, максимальной области значений, разрешения области значений, рабочей частоты, усиления передатчика, и предназначайтесь для радарного поперечного сечения.

pd = 0.9;
pfa = 1e-6;
max_range = 5000;
range_res = 50;
fc = 10e9;
tx_gain = 20;
tgt_rcs = 1;

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

c = physconst('LightSpeed');
lambda = c/fc;

Вычислите ширину полосы пропускания импульса из разрешения области значений. Установите частоту дискретизации, fs, к дважды ширине полосы пропускания импульса. Шумовая пропускная способность также установлена в ширину полосы пропускания импульса. Радар интегрирует много импульсов, установленных num_pulse_int. Длительность каждого импульса является инверсией ширины полосы пропускания импульса.

pulse_bw = c/(2*range_res);
pulse_length = 1/pulse_bw;
fs = 2*pulse_bw;
noise_bw = pulse_bw;
num_pulse_int = 10;

Установите импульсную частоту повторения совпадать с максимальной областью значений радара.

prf = c/(2*max_range);

Вычислите степень передачи

Используйте уравнение Albersheim, чтобы вычислить ОСШ, требуемый встретить желаемой вероятности обнаружения и вероятности ложного предупреждения. Затем используйте основное уравнение радиолокации, чтобы вычислить степень, должен был достигнуть необходимого ОСШ.

snr_min = albersheim(pd, pfa, num_pulse_int);
peak_power = radareqpow(lambda,max_range,snr_min,pulse_length,...
    'RCS',tgt_rcs,'Gain',tx_gain);

Создание системных объектов для модели

Выберите прямоугольную форму волны.

waveform = phased.RectangularWaveform('PulseWidth',pulse_length,...
    'PRF',prf,'SampleRate',fs);

Установите характеристики усилителя приемника.

amplifier = phased.ReceiverPreamp('Gain',20,'NoiseFigure',0,...
    'SampleRate',fs,'EnableInputPort',true,'SeedSource','Property',...
    'Seed',2007);
transmitter = phased.Transmitter('Gain',tx_gain,'PeakPower',peak_power,...
    'InUseOutputPort',true);

Задайте радарную антенну как одну изотропную антенну.

antenna = phased.IsotropicAntennaElement('FrequencyRange',[5e9 15e9]);

Создайте моностатическую радарную платформу.

radarplatform = phased.Platform('InitialPosition',[0; 0; 0],...
    'Velocity',[0; 0; 0]);

Настройте эти три целевых платформы с помощью объекта единой системы.

targetplatforms = phased.Platform(...
    'InitialPosition',[2000.66 3532.63 3845.04; 0 0 0; 0 0 0], ...
    'Velocity',[150 -150 0; 0 0 0; 0 0 0]);

Создайте Системные объекты коллектора и теплоотвод.

radiator = phased.Radiator('Sensor',antenna,'OperatingFrequency',fc);
collector = phased.Collector('Sensor',antenna,'OperatingFrequency',fc);

Настройте три целевых свойства RCS.

targets = phased.RadarTarget('MeanRCS',[1.6 2.2 1.05],'OperatingFrequency',fc);

Создайте Системный объект, чтобы смоделировать двухстороннее распространение свободного пространства.

channels= phased.FreeSpace('SampleRate',fs,'TwoWayPropagation',true,...
    'OperatingFrequency',fc);

Задайте согласованный фильтр.

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

Создайте интервалы области значений и Доплера

Настройте быстро-разовую сетку. Быстрое время является временем выборки отраженного импульса относительно импульсного времени передачи. Интервалы области значений являются областями значений, соответствующими каждому интервалу быстрой сетки времени.

fast_time = unigrid(0,1/fs,1/prf,'[)');
range_bins = c*fast_time/2;

Чтобы компенсировать потерю области значений, создайте время, варьируясь Системный объект усиления?.

gain = phased.TimeVaryingGain('RangeLoss',2*fspl(range_bins,lambda),...
    'ReferenceLoss',2*fspl(max_range,lambda));

Настройте Доплеровские интервалы. Доплеровские интервалы определяются импульсной частотой повторения. Создайте Системный объект БПФ для Доплера, обрабатывающего.

DopplerFFTbins = 32;
DopplerRes = prf/DopplerFFTbins;
fft = dsp.FFT('FFTLengthSource','Property',...
    'FFTLength',DopplerFFTbins);

Создайте куб данных

Настройте уменьшаемый куб данных. Обычно, куб данных имеет быстро-разовые и медленно-разовые размерности и количество датчиков. Поскольку куб данных имеет только один датчик, это двумерно.

rx_pulses = zeros(numel(fast_time),num_pulse_int);

Создайте системные объекты IntensityScope

Создайте два IntensityScope Системные объекты, один для доплеровской разовой интенсивности и другого для разовой интенсивности области значений.

dtiscope = phased.IntensityScope('Name','Doppler-Time Display',...
    'XLabel','Velocity (m/sec)', ...
    'XResolution',dop2speed(DopplerRes,c/fc)/2, ...
    'XOffset',dop2speed(-prf/2,c/fc)/2,...
    'TimeResolution',0.05,'TimeSpan',5,'IntensityUnits','Mag');
rtiscope = phased.IntensityScope('Name','Range-Time Display',...
    'XLabel','Range (m)', ...
    'XResolution',c/(2*fs), ...
    'TimeResolution',0.05,'TimeSpan',5,'IntensityUnits','Mag');

Запустите цикл симуляции по нескольким радарным передачам

Передайте 2 000 импульсов. Когерентно группы процесса из 10 импульсов за один раз.

Для каждого импульса:

  1. Обновите радарное положение и скорость radarplatform

  2. Обновите целевые положения и скорости targetplatforms

  3. Создайте импульсы одной волны, обучаются, чтобы быть переданным transmitter

  4. Вычислите области значений и углы целей относительно радара

  5. Излучите сигналы к целям radiator

  6. Распространите импульсы к цели и спине channels

  7. Отразите сигналы от целевого targets

  8. Получите sCollector сигнала

  9. Усильте полученный amplifier сигнала

  10. Сформируйте куб данных

Для каждого набора 10 импульсов в кубе данных:

  1. Фильтр соответствия каждая строка (быстро-разовая размерность) куба данных.

  2. Вычислите эффекты Доплера для каждой строки (медленно-разовая размерность) куба данных.

pri = 1/prf;
nsteps = 200;
for k = 1:nsteps
    for m = 1:num_pulse_int
        [ant_pos,ant_vel] = radarplatform(pri);
        [tgt_pos,tgt_vel] = targetplatforms(pri);
        sig = waveform();
        [s,tx_status] = transmitter(sig);
        [~,tgt_ang] = rangeangle(tgt_pos,ant_pos);
        tsig = radiator(s,tgt_ang);
        tsig = channels(tsig,ant_pos,tgt_pos,ant_vel,tgt_vel);
        rsig = targets(tsig);
        rsig = collector(rsig,tgt_ang);
        rx_pulses(:,m) = amplifier(rsig,~(tx_status>0));
    end

    rx_pulses = filter(rx_pulses);
    MFdelay = size(MFcoef,1) - 1;
    rx_pulses = buffer(rx_pulses((MFdelay + 1):end), size(rx_pulses,1));
    rx_pulses = gain(rx_pulses);
    range = pulsint(rx_pulses,'noncoherent');
    rtiscope(range);
    dshift = fft(rx_pulses.');
    dshift = fftshift(abs(dshift),1);
    dtiscope(mean(dshift,2));
    radarplatform(.05);
    targetplatforms(.05);
end

Все цели лежат на оси X. Две цели проходят ось X, и каждый является стационарным. Поскольку радар в начале координат, можно считать целевую скорость непосредственно из разового Доплером Окна экрана. Значения соглашаются с заданными скоростями-150, 150, и 0 м/секунда.