• Регистрация
Attskij Sotona
Attskij Sotona0.00
н/д
  • Написать
  • Подписаться

Моделирование распространения волны в Phased Array System Toolbox

В общем случае ФАР и источник имеют движение.

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

Реализовал скрипт, в котором с шагом времени 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

Теги

    08.11.2020

    Ответы