Hello,
I'm still somewhat new to kWave and am trying to work out Time Reversal image reconstruction for a segmented ring array, created using kWaveArray (i.e. addArcElement and addCustomElement). During testing around, I noticed a unexpected behaviour, and would be grateful for some insights on the matter.
I've put together a simple minimal example issued below to explain my problem. The geometry is simply a couple arc shaped elements equally distributed in a circular pattern, all with the same parameters and focus on (0,0). Identical signals (here just toneBurst, the exact signal doesn't matter) are assigned to all elements using sensor.time_reversal_boundary_data
I would expect each elements to send out the same signal, as they are identical and the geometry is symmetrical. However, the simulation process shows that the signal intensity differs quite heavily between different elements, with (as far as I can tell) the ones closer to the cartesian axes having a higher intensity assigned than the ones off-axis. The number of elements does not affect this behavior
While I'm sure there is a proper explanation for this, that I'm just missing, I can not make sense of this behavior currently, and would be grateful for any advise on how to get the proper results. I should note that a identical result can be achieved when constructing the sensor as a source and setting source.p_mode = 'dirichlet'
Minimal example:
clear; clearvars;
% =========================================================================
% PARAMETERS
% =========================================================================
numElements = 7;
radius = 1E-2;
sizeArc = 1E-3;
focus = [0,0];
gridSize = [2.5E-2, 2.5E-2];
gridN = [512, 512];
gridStep = [gridSize(1)/gridN(1), gridSize(2)/gridN(2)];
% =========================================================================
% ELEMENT DEFINITION
% =========================================================================
karray = kWaveArray;
for i=1:numElements
pos = [radius*cosd(i*360/numElements), ...
radius*sind(i*360/numElements)];
karray.addArcElement(pos, radius, sizeArc, focus);
end
% =========================================================================
% GRID & MEDIUM PROPERTIES
% =========================================================================
medium.sound_speed = 1520;
medium.density = 1040;
kgrid = kWaveGrid(gridN(1), gridStep(1), gridN(2), gridStep(2));
kgrid.makeTime(medium.sound_speed)
% =========================================================================
% ASSIGN SOURCE & SENSOR
% =========================================================================
signal = repmat(toneBurst(1/kgrid.dt, 100E4, 24).*15, numElements, 1);
source.p0 = 0;
sensor.mask = karray.getArrayBinaryMask(kgrid);
sensor.time_reversal_boundary_data = karray.getDistributedSourceSignal(kgrid, signal);
% =========================================================================
% RUN SIMULATION
% =========================================================================
simulation = kspaceFirstOrder2D(kgrid, medium, source, sensor, ...
'PMLInside', false, 'DataCast', 'gpuArray-single');
figure;
imagesc(kgrid.y_vec, kgrid.x_vec, simulation)
axis image; colormap("gray")
hold on;
karray.plotArray(false);