phased.MultipathChannel

Распространите сигналы в многолучевом канале

Описание

The phased.MultipathChannel Система object™ передает сигнал через многолучевой канал. Чтобы запустить объект, вы должны предоставить характеристики для каждого пути: задержка времени, усиление, Допплеровский фактор, потери отражения и распределительные потери.

Для гидроакустических приложений можно использовать phased.IsoSpeedUnderwaterPaths Системный объект для генерации характеристик пути канала. Эти признаки также можно поставлять независимо.

Чтобы смоделировать распространение сигнала через многолучевой канал:

  1. Определите и настройте распространитель. Можно задать phased.MultipathChannel свойства во время конструкции или оставьте их на своих значениях по умолчанию. См. «Конструкция». Некоторые свойства, заданные во время конструкции, могут быть изменены позже. Эти свойства настраиваются.

  2. Чтобы вычислить распространенный сигнал, вызовите step метод phased.MultipathChannel. Выходные выходы step метод зависит от свойств phased.MultipathChannel Системный объект. Изменять настраиваемые свойства можно в любой момент.

Примечание

Вместо использования step метод для выполнения операции, заданной системным объектом, можно вызвать объект с аргументами, как если бы это была функция. Для примера, y = step(obj,x) и y = obj(x) выполнять эквивалентные операции.

Конструкция

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

propagator = phased.MultipathChannel(Name,Value) создает Системный объект распространения сигнала с каждым заданным свойством Name установить на заданную Value. Можно задать дополнительные аргументы в виде пар имен и значений в любом порядке как (Name1,Value1..., NameN,ValueN).

Свойства

расширить все

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

Пример: 10000

Типы данных: double

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

Пример: 3e3

Типы данных: double

Источник максимального значения задержки, заданный как 'Auto' или 'Property'. Когда вы устанавливаете это свойство на 'Auto'канал автоматически выделяет достаточно памяти, чтобы симулировать задержку распространения. Когда вы устанавливаете это свойство на 'Property', можно задать максимальную задержку при помощи MaximumDelay свойство. Сигналы, поступающие после максимальной задержки, игнорируются.

Максимальная задержка сигнала, заданная как положительная скалярная величина. Задержки, превышающие это значение, игнорируются. Модули указаны в секундах.

Зависимости

Чтобы включить это свойство, установите MaximumDelaySource свойство к 'Property'.

Типы данных: double

Метод интерполяции, используемый для реализации дробной задержки сигнала и доплеровского временного расширения и сжатия, заданный как 'Linear' или 'Oversample'. Когда для этого свойства задано значение 'Linear'входной сигнал линейно интерполируется непосредственно на однородную сетку для распространения сигнала. Когда для этого свойства задано значение 'Oversample'входной сигнал повторно дискретизируется до более высокой скорости перед линейной интерполяцией. Для широкополосных сигналов избыточная дискретизация сохраняет спектральную форму.

Типы данных: char

Методы

сбросСброс состояния системного объекта
шагРаспространите сигнал через многолучевой звуковой канал
Общий для всех системных объектов
release

Разрешить изменение значения свойства системного объекта

Примеры

свернуть все

Создайте пятипутевой подводный звуковой канал и вычислите матрицу пути распространения, коэффициент Доплера и потери поглощения. Предположим, что источник является стационарным, и приемник движется вдоль оси X к источнику со скоростью 20 км/ч. Примите одностороннее распространение по умолчанию.

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

numpaths = 5;
channel = phased.IsoSpeedUnderwaterPaths('ChannelDepth',200,'BottomLoss',10, ...
    'NumPathsSource','Property','NumPaths',numpaths);
tstep = 1;
srcpos = [0;0;-160];
rcvpos = [100;0;-50];
speed = -20*1000/3600;
srcvel = [0;0;0];
rcvvel = [speed;0;0];

Вычислите матрицу пути, Допплеровский коэффициент и потери.

[pathmat,dop,absloss] = channel(srcpos,rcvpos,srcvel,rcvvel,tstep);

Создайте 500 выборки сигнала 100 Гц. Предположим, что все пути имеют один и тот же сигнал. Передайте сигналы в приемник.

fs = 1e3;
nsamp = 500;
propagator = phased.MultipathChannel('OperatingFrequency',10e3,'SampleRate',fs);
t = [0:(nsamp-1)]'/fs;
sig0 = sin(2*pi*100*t);
sig = repmat(sig0,1,numpaths);
propsig = propagator(sig,pathmat,dop,absloss);

Постройте график действительной части когерентной суммы распространенных сигналов.

plot(t*1000,real(sum(propsig,2)))
xlabel('Time (millisec)')

Figure contains an axes. The axes contains an object of type line.

Создайте подводный звуковой канал с семью путями и отобразите матрицу пути распространения. Предположим, что источник является стационарным и что приемник движется вдоль оси X к источнику со скоростью 20 км/ч. Предположим двухстороннее распространение.

speed = -20*1000/3600;
numpaths = 7;
csound = 1515.0;
channel = phased.IsoSpeedUnderwaterPaths('ChannelDepth',200, ...
    'PropagationSpeed',csound,'BottomLoss',10,'NumPathsSource','Property', ...
    'NumPaths',numpaths,'TwoWayPropagation',true);
tstep = 1;
srcpos = [0;0;-160];
tgtpos = [500;0;-50];
srcvel = [0;0;0];
tgtvel = [speed;0;0];

Получите матрицу пути, Допплеровский коэффициент, потери и целевое отражение и углы передачи.

[pathmat,dop,aloss,tgtangs,srcangs] = channel(srcpos,tgtpos,srcvel,tgtvel,tstep);

Создайте сигнал 100 Гц с 500 выборками. Предположим, что все пути имеют один и тот же сигнал, но с различными амплитудами. Затем передайте сигналы на цель и назад. Можно использовать информацию об угле для вычисления любой угловой зависимости исходной и целевой характеристик. Каждый канал может иметь разную амплитуду. Этот пример использует простую модель косинуса.

fs = 1e3;
nsamp = 500;
propagator = phased.MultipathChannel('OperatingFrequency',10e3,'SampleRate',fs);
t = [0:(nsamp-1)]'/fs;
ampsrc = cosd(srcangs(2,:));
amptgt = cosd(tgtangs(2,:));
sig0 = sin(2*pi*100*t);
sig = repmat(sig0,1,numpaths);
amptotal = ampsrc.^2.*amptgt;
sig = bsxfun(@times,amptotal,sig);

Из-за конечной задержки распространения первый вызов распространителя не возвращает сигнал. Функции propagator дважды для получения возвращенного сигнала.

propsig = propagator(sig,pathmat,dop,aloss);
propsig = propagator(sig,pathmat,dop,aloss);

Постройте график действительной части когерентной суммы распространенных сигналов. Вычислите время туда и обратно.

rng = rangeangle(srcpos,tgtpos);
tr = rng/csound;
plot((t+tr)*1000,real(sum(propsig,2)))
xlabel('Time (millisec)')

Figure contains an axes. The axes contains an object of type line.

Создайте подводный звуковой канал и постройте график объединенного принимаемого сигнала. Автоматический поиск количества путей. Предположим, что источник является стационарным и что приемник движется вдоль оси X к источнику со скоростью 20 км/ч. Примите одностороннее распространение по умолчанию.

speed = -20*1000/3600;
channel = phased.IsoSpeedUnderwaterPaths('ChannelDepth',200,'BottomLoss',5, ...
    'NumPathsSource','Auto','CoherenceTime',5);
tstep = 1;
srcpos = [0;0;-160];
rcvpos = [500;0;-50];
srcvel = [0;0;0];
rcvvel = [speed;0;0];

Вычислите матрицу пути, Допплеровский коэффициент и потери. Распространитель выходов 51 путь выхода но некоторые пути могут содержать Nan значения.

[pathmat,dop,absloss,rcvangs,srcangs] = channel(srcpos,rcvpos,srcvel,rcvvel,tstep);

Создайте сигнал 100 Гц с 500 выборками. Предположим, что все пути имеют один и тот же сигнал. Использование phased.MultipathChannel Системный объект для распространения сигналов на приемник. phased.MultipathChannel принимает как вход все пути, созданные phased.IsoSpeedUnderwaterPaths но игнорирует пути, которые имеют NaN значения.

fs = 1e3;
nsamp = 500;
propagator = phased.MultipathChannel('OperatingFrequency',10e3,'SampleRate',fs);
t = [0:(nsamp-1)]'/fs;
sig0 = sin(2*pi*100*t);
numpaths = size(pathmat,2);
sig = repmat(sig0,1,numpaths);
propsig = propagator(sig,pathmat,dop,absloss);

Постройте график действительной части когерентной суммы распространенных сигналов.

plot(t*1000,real(sum(propsig,2)))
xlabel('Time (millisec)')

Figure contains an axes. The axes contains an object of type line.

Сравните длительность распространенного сигнала от стационарного гидролокатора с длительностью движущегося гидролокатора. Движущийся гидролокатор имеет радиальную скорость 25 м/с от цели. В каждом случае распространите сигнал по одному пути. Предположим одностороннее распространение.

Задайте гидроакустические системные параметры: максимальную однозначную область значений, необходимое разрешение области значений, рабочую частоту и скорость распространения.

maxrange = 5000.0;
rngres = 10.0;
fc = 20.0e3;
csound = 1520.0;

Используйте прямоугольную форму волны для переданного сигнала.

prf = csound/(2*maxrange);
pulseWidth = 8*rngres/csound;
pulseBW = 1/pulseWidth;
fs = 80*pulseBW;
waveform = phased.RectangularWaveform('PulseWidth',pulseWidth,'PRF',prf, ...
    'SampleRate',fs);

Задайте гидроакустические положения.

sonarplatform1 = phased.Platform('InitialPosition',[0;0;-60],'Velocity',[0;0;0]);
sonarplatform2 = phased.Platform('InitialPosition',[0;0;-60],'Velocity',[0;-25;0]);

Задайте целевое положение.

targetplatform = phased.Platform('InitialPosition',[0;500;-60],'Velocity',[0;0;0]);

Задайте подводный путь и объекты канала распространения.

paths = phased.IsoSpeedUnderwaterPaths('ChannelDepth',100, ...
    'CoherenceTime',0,'NumPathsSource','Property','NumPaths',1, ...
    'PropagationSpeed',csound);
propagator = phased.MultipathChannel('SampleRate',fs,'OperatingFrequency',fc);

Создайте переданную форму волны.

wav = waveform();
nsamp = size(wav,1);
rxpulses = zeros(nsamp,2);
t = (0:nsamp-1)/fs;

Передайте сигнал и затем получите эхо-сигнал на стационарном гидроакустическом аппарате.

[pathmat,dop,aloss,~,~] = paths(sonarplatform1.InitialPosition, ...
    targetplatform.InitialPosition,sonarplatform1.InitialVelocity, ...
    targetplatform.InitialVelocity,1/prf);
rxpulses(:,1) = propagator(wav,pathmat,dop,aloss);

Передайте и получите на движущемся гидроакустическом аппарате.

[pathmat,dop,aloss,~,~] = paths(sonarplatform2.InitialPosition, ...
    targetplatform.InitialPosition,sonarplatform2.Velocity, ...
    targetplatform.Velocity,1/prf);
rxpulses(:,2) = propagator(wav,pathmat,dop,aloss);

Постройте график полученных импульсов.

plot(abs(rxpulses))
xlim([490 650])
ylim([0 1.65e-3])
legend('Stationary sonar','Moving sonar')
xlabel('Received Sample Time (sec)')
ylabel('Integrated Received Pulses')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Stationary sonar, Moving sonar.

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

Ссылки

[1] Урик, Р. Дж. Принципы подводного звука, 3-е издание. New York: Peninsula Publishing, 1996.

[2] Sherman, C.S. and J.Butler Transducers and Arrays for Underwater Sound. Нью-Йорк: Спрингер, 2007.

[3] Allen, J.B. and D. Berkely, «Image method for effectually simulating small-room acoustics», J. Acoust. Soc. Am, Vol 65, № 4. Апрель 1979 года.

Расширенные возможности

.
Введенный в R2017a