Потеря пути к свободному пространству

Поддержка моделирования распространения в свободном пространстве

Среды распространения имеют значительные эффекты на амплитуду, фазу и форму распространения пространственно-временных wavefields. В некоторых случаях можно хотеть моделировать систему, которая распространяет узкополосные сигналы через свободное пространство. Если так, можно использовать Систему phased.FreeSpace object™, чтобы смоделировать зависимую областью значений задержку, сдвиг фазы, эффект Доплера и эффекты усиления.

Рассмотрите этот объект как канал распространения "точка-точка". Путем установки свойств объектов можно настроить определенные характеристики среды и распространения сигналов через нее, включая:

  • Скорость распространения и уровень выборки сигнала вы распространяете

  • Несущая частота сигнала

  • Ли объектные модели одностороннее или двухстороннее распространение

Каждый раз, когда вы вызываете step на объекте phased.FreeSpace, вы задаете не только сигнал распространить, но также и местоположение и скорость источника сигнала и места назначения.

Можно использовать fspl, чтобы определить потерю пути к свободному пространству, в децибелах, для данного расстояния и длины волны.

Потеря Пути к Свободному пространству в дБ

Примите, что передатчик расположен в (1000,250,10) в глобальной системе координат. Примите, что цель расположена в (3000,750,20). Передатчик действует на уровне 1 ГГц. Определите потерю пути к свободному пространству в децибелах для узкополосного распространения сигнала к и от цели.

[tgtrng,~] = rangeangle([3000; 750; 20],[1000; 250; 10]);

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

tgtrng = 2*tgtrng;

Определите длину волны для 1 ГГц.

lambda = physconst('LightSpeed')/1e9;

Решите за потерю с помощью fspl.

L = fspl(tgtrng,lambda)
L = 104.7524

Потеря пути к свободному пространству в децибелах составляет приблизительно 105 дБ.

Также можно вычислить потерю непосредственно от

Loss = pow2db((4*pi*tgtrng/lambda)^2)
Loss = 104.7524

Распространите линейную форму волны импульса FM, чтобы предназначаться и Назад

Создайте линейную форму волны импульса FM длительности на 50 мс с пропускной способностью 100 кГц. Смоделируйте зависимую областью значений и амплитудную потерю с временной задержкой, понесенную во время двухстороннего распространения. Импульс распространяет между передатчиком, расположенным в (1000,250,10) и целью, расположенной в (3000,750,20). Сигналы распространяют со скоростью света.

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

waveform = phased.LinearFMWaveform('SweepBandwidth',1e5,...
    'PulseWidth',5e-5,'OutputFormat','Pulses',...
    'NumPulses',1,'SampleRate',1e6,'PRF',1e4);
signal = waveform();
channel = phased.FreeSpace('SampleRate',1e6,...
    'TwoWayPropagation',true,'OperatingFrequency',1e9);
y = channel(signal,[1000; 250; 10],[3000; 750; 20],[0;0;0],[0;0;0]);

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

t = unigrid(0,1/waveform.SampleRate,1/waveform.PRF,'[)');
subplot(2,1,1)
plot(t.*1e6,abs(signal))
title('Magnitude of Transmitted Pulse')
xlabel('Time (microseconds)')
ylabel('Magnitude')
subplot(2,1,2)
plot(t.*1e6,abs(y))
title('Magnitude of Received Pulse')
xlabel('Time (microseconds)')
ylabel('Magnitude')

Задержка полученного импульса является приблизительно 14 μs, ожидаемым значением для расстояния 4,123 км.

Одностороннее и двухстороннее распространение

Свойство TwoWayPropagation Системы phased.FreeSpace object™ позволяет вам моделировать или одну - или двухстороннее распространение. Следующий пример демонстрирует, как использовать это свойство для одного линейного импульса FM, распространяющего к цели и назад. Датчик является одной изотропной антенной излучения, действующей на уровне 1 ГГц, расположенного в (1000,250,10). Цель расположена в (3000,750,20) и имеет неколебание RCS 1 квадратного метра.

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

Следующий код создает необходимые Системные объекты и вычисляет область значений и угол от антенны до цели.

waveform = phased.LinearFMWaveform('SweepBandwidth',1e5,...
    'PulseWidth',5e-5,'OutputFormat','Pulses',...
    'NumPulses',1,'SampleRate',1e6);
antenna = phased.IsotropicAntennaElement('FrequencyRange',[500e6 1.5e9]);
transmitter = phased.Transmitter('PeakPower',1e3,'Gain',20);
radiator = phased.Radiator('Sensor',antenna,'OperatingFrequency',1e9);
channel = phased.FreeSpace('SampleRate',1e6,...
    'TwoWayPropagation',true,'OperatingFrequency',1e9);
target = phased.RadarTarget('MeanRCS',1,'Model','Nonfluctuating');
collector = phased.Collector('Sensor',antenna,'OperatingFrequency',1e9);
sensorpos = [3000;750;20];
tgtpos = [1000;250;10];
[tgtrng,tgtang] = rangeangle(sensorpos,tgtpos);

Поскольку свойство TwoWayPropagation установлено в true, вы вычисляете общее распространение только однажды.

Вычислите излученный сигнал.

pulse = waveform();
pulse = transmitter(pulse);
pulse = radiator(pulse,tgtang);

Распространите импульс к цели и назад.

pulse = channel(pulse,sensorpos,tgtpos,[0;0;0],[0;0;0]);
pulse = target(pulse);
sig = collector(pulse,tgtang);

Также можно разбить двухстороннее распространение в два отдельных односторонних пути к распространению. Вы делаете так путем установки свойства TwoWayPropagation на false.

channel1 = phased.FreeSpace('SampleRate',1e9,...
    'TwoWayPropagation',false,'OperatingFrequency',1e6);

Излучите импульс.

pulse = waveform();
pulse = transmitter(pulse);
pulse = radiator(pulse,tgtang);

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

pulse = channel1(pulse,sensorpos,tgtpos,[0;0;0],[0;0;0]);
pulse = target(pulse);

Распространите отраженный импульс от цели до антенны.

pulse = channel(pulse,tgtpos,sensorpos,[0;0;0],[0;0;0]);
sig = collector(pulse,tgtang);

Распространите сигнал от стационарного радара до движущейся цели

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

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

Задайте частоту дискретизации сигнала, скорость распространения и несущую частоту. Задайте сигнал как синусоиду частоты 150 Гц. Установите частоту дискретизации на 1 кГц и несущую частоту к 300 МГц. Скорость распространения является скоростью света.

fs = 1.0e3;
c = physconst('Lightspeed');
fc = 300e3;
f = 150.0;
N = 1024;
t = (0:N-1)'/fs;
x = exp(1i*2*pi*f*t);

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

v = 1000.0;
dop = speed2dop(v,c/fc)
dop = 1.0007

От формулы односторонний эффект Доплера составляет 1 Гц.

Создайте Систему phased.FreeSpace object™ и используйте ее, чтобы распространить сигнал от радара до цели. Примите, что радар в (0, 0, 0), и цель в (100, 0, 0).

channel = phased.FreeSpace('SampleRate',fs,...
   'PropagationSpeed',c,'OperatingFrequency',fc);
origin_pos = [0;0;0];
dest_pos = [100;0;0];
origin_vel = [0;0;0];
dest_vel = [-v;0;0];
y = channel(x,origin_pos,dest_pos,origin_vel,dest_vel);

Постройте спектр переданного сигнала. Пик на уровне 150 Гц отражает частоту сигнала.

window = 64;
ovlp = 32;
[Pxx,F] = pwelch(x,window,ovlp,N,fs);
plot(F,10*log10(Pxx))
xlabel('Frequency (Hz)')
ylabel('Power/Frequency (dB/Hz)')
title('Transmitted Signal')

Постройте спектр распространенного сигнала. Пик на уровне 250 Гц отражает частоту сигнала плюс эффект Доплера 100 Гц.

window = 64;
ovlp = 32;
[Pyy,F] = pwelch(y,window,ovlp,N,fs);
plot(F,10*log10(Pyy))
grid
xlabel('Frequency (Hz)')
ylabel('Power/Frequency (dB/Hz)')
title('Propagated Signal')

Эффект Доплера является слишком небольшим, чтобы видеть. Наложите эти два спектра в области 150 Гц.

figure
idx = find(F>=130 & F<=170);
plot(F(idx),10*log10(Pxx(idx)),'b')
grid
hold on
plot(F(idx),10*log10(Pyy(idx)),'r')
hold off
xlabel('Frequency (Hz)')
ylabel('Power/Frequency (dB/Hz)')
title('Transmitted and Propagated Signals')
legend('Transmitted','Propagated')

Пиковый сдвиг, кажется, составляет приблизительно 1 Гц.