Моделирование распространения волны в Phased Array System Toolbox
08.11.2020
В общем случае ФАР и источник имеют движение.
Волны распространяются в подводной акустической среде, для упрощения принимаем сигнал источника - синусом.
Реализовал скрипт, в котором с шагом времени dt обновляю положение источника, обновляю параметры канала распространения, беру сэмпл сигнала и пропускаю через канал. Для каждого приемного элемента антенны сделан отдельный канал. Как использовать объект collector - не понял. Прошу подсказать.
clear;
% -------------------------------------------------------------------------
% Commons
% -------------------------------------------------------------------------
% Sound speed
c = 1500;
% Sampling frequency
Fs = 22050;
dt = 1/Fs;
% Operating frequency
Fop = 1e3;
% Signal
t = (0:dt:1);
target.signal = sin(2*pi*Fop*t);
% -------------------------------------------------------------------------
% Antenna
% -------------------------------------------------------------------------
% Motion
antenna.platform = phased.Platform( ...
'InitialPosition', [0 0 0]', ...
'MotionModel', 'Velocity', ...
'Velocity', [0 0 0]');
% Hydrophone
antenna.hydrophone = phased.IsotropicHydrophone( ...
'FrequencyRange', [1 Fop], ...
'VoltageSensitivity', -150); % dB re 1 muPa
% Array
antenna.array = phased.ULA( ...
'Element', antenna.hydrophone, ...
'NumElements', 4, ...
'ElementSpacing', c/Fop/2*10, ...
'ArrayAxis', 'x', ...
'Taper', 1);
% Array channel preamp
antenna.preamp = phased.ReceiverPreamp( ...
'Gain', 20, ... % dB
'NoiseFigure', 10 , ...
'SampleRate', Fs, ...
'SeedSource', 'Property', ...
'Seed', 2007);
% Model for collecting waves
antenna.collector = phased.Collector( ...
'Sensor', antenna.array, ...
'PropagationSpeed', c, ...
'OperatingFrequency', Fop, ...
'Wavefront', 'Unspecified');
% -------------------------------------------------------------------------
% Target
% -------------------------------------------------------------------------
% Motion
target.platform = phased.Platform(...
'InitialPosition', [0 100 0]', ...
'MotionModel', 'Velocity', ...
'Velocity', [0 0 0]');
% Equivalent signal source
target.projector = phased.IsotropicProjector( ...
'FrequencyRange', [0 Fop], ...
'VoltageResponse', 90); % dB re 1 muPa
% Radiator
target.radiator = cell(1, antenna.array.NumElements);
for i = 1:antenna.array.NumElements
target.radiator{i} = phased.Radiator( ...
'Sensor', target.projector, ...
'PropagationSpeed', c, ...
'OperatingFrequency', Fop, ...
'SensorGainMeasure', 'dB');
end
% -------------------------------------------------------------------------
% Environment
% -------------------------------------------------------------------------
% Path
env.iso_paths{i} = cell(1, antenna.array.NumElements);
for i = 1:antenna.array.NumElements
env.iso_paths{i} = phased.IsoSpeedUnderwaterPaths( ...
'ChannelDepth', 1e3, ...
'PropagationSpeed', c, ...
'NumPathsSource', 'Property', ...
'NumPaths', 10, ...
'CoherenceTime', 0, ...
'BottomLoss', 6, ... % dB re 1 muPa
'LossFrequencies', (1:100)*1e3);
end
% Channel
env.channel = cell(1, antenna.array.NumElements);
for i = 1:antenna.array.NumElements
env.channel{i} = phased.MultipathChannel( ...
'OperatingFrequency', Fop, ...
'SampleRate', Fs, ...
'MaximumDelaySource', 'Auto', ...
'InterpolationMethod', 'Linear');
end
% -------------------------------------------------------------------------
% Modelling
% -------------------------------------------------------------------------
antenna.signal = zeros(antenna.array.NumElements, numel(target.signal));
for i = 1:numel(target.signal)
% Update Positions
[antenna.pos, antenna.vel] = step(antenna.platform, dt);
[target.pos, target.vel] = step(target.platform, dt);
% Calculate position of each element
antenna_array_pos = antenna.array.getElementPosition() + antenna.pos;
% Loop over array elements
% rcvang = zeros(2, antenna.array.NumElements);
% rsig = zeros(1, antenna.array.NumElements);
for j = 1:antenna.array.NumElements
% Calculate paths
[paths, dop, aloss, rcvang(:,j), srcang] = step( ...
env.iso_paths{j}, target.pos, antenna_array_pos(:,j), ...
target.vel, antenna.vel, dt);
% Tx signal
tsig = step(target.radiator{j}, target.signal(i)', srcang);
% Rx signal
rsig(:,j) = step(env.channel{j}, tsig, paths(:,j), dop, aloss);
end
% How to collect waves?
% Rx signal collected
%rsig = step(antenna.collector, rsig, rcvang);
%rsig = step(antenna.preamp, rsig);
antenna.signal(:,i) = rsig;
end
Ответы