phased.MultipathChannel

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

Описание

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)')

Создайте подводный звуковой канал с семью путями и отобразите матрицу пути к распространению. Примите, что источник является стационарным и что получатель проходит ось 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)')

Создайте подводный звуковой канал и постройте объединенный полученный сигнал. Автоматически найдите количество путей. Примите, что источник является стационарным и что получатель проходит ось 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)')

Сравните длительность распространенного сигнала от стационарного гидролокатора до того из движущегося гидролокатора. Движущийся гидролокатор имеет радиальную скорость на расстоянии в 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')

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

Ссылки

[1] Urick, R.J. Принципы подводного звукового, 3-го выпуска. Нью-Йорк: Peninsula Publishing, 1996.

[2] Шерман, C.S. и преобразователи J.Butler и массивы для подводного звука. Нью-Йорк: Спрингер, 2007.

[3] Аллен, Дж.Б. и Д. Беркели, “Метод изображений для того, чтобы эффективно симулировать акустику небольшой комнаты”, Дж. Акуст. Soc. Vol 65, № 4. Апрель 1979.

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

Введенный в R2017a