<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="bbPress/1.0.2" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>k-Wave User Forum &#187; Topic: Time Reversal image reconstruction with kWaveArray elements</title>
		<link>http://www.k-wave.org/forum/topic/time-reversal-image-reconstruction-with-kwavearray-elements</link>
		<description>Support for the k-Wave MATLAB toolbox</description>
		<language>en-US</language>
		<pubDate>Wed, 13 May 2026 21:25:42 +0000</pubDate>
		<generator>http://bbpress.org/?v=1.0.2</generator>
		<textInput>
			<title><![CDATA[Search]]></title>
			<description><![CDATA[Search all topics from these forums.]]></description>
			<name>q</name>
			<link>http://www.k-wave.org/forum/search.php</link>
		</textInput>
		<atom:link href="http://www.k-wave.org/forum/rss/topic/time-reversal-image-reconstruction-with-kwavearray-elements" rel="self" type="application/rss+xml" />

		<item>
			<title>Oskar Sadowski on "Time Reversal image reconstruction with kWaveArray elements"</title>
			<link>http://www.k-wave.org/forum/topic/time-reversal-image-reconstruction-with-kwavearray-elements#post-9243</link>
			<pubDate>Tue, 27 Jan 2026 11:00:38 +0000</pubDate>
			<dc:creator>Oskar Sadowski</dc:creator>
			<guid isPermaLink="false">9243@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hello,&#60;br /&#62;
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. &#60;code&#62;addArcElement&#60;/code&#62; and &#60;code&#62;addCustomElement&#60;/code&#62;). During testing around, I noticed a unexpected behaviour, and would be grateful for some insights on the matter.&#60;/p&#62;
&#60;p&#62;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 &#60;code&#62;toneBurst&#60;/code&#62;, the exact signal doesn't matter) are assigned to all elements using &#60;code&#62;sensor.time_reversal_boundary_data&#60;/code&#62;&#60;/p&#62;
&#60;p&#62;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&#60;/p&#62;
&#60;p&#62;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 &#60;code&#62;source.p_mode = &#38;#39;dirichlet&#38;#39;&#60;/code&#62;&#60;/p&#62;
&#60;p&#62;Minimal example:&#60;/p&#62;
&#60;p&#62;clear; clearvars;&#60;/p&#62;
&#60;p&#62;% =========================================================================&#60;br /&#62;
% PARAMETERS&#60;br /&#62;
% =========================================================================&#60;/p&#62;
&#60;p&#62;numElements     =   7;&#60;/p&#62;
&#60;p&#62;radius          =   1E-2;&#60;br /&#62;
sizeArc         =   1E-3;&#60;br /&#62;
focus           =   [0,0];&#60;/p&#62;
&#60;p&#62;gridSize        =   [2.5E-2, 2.5E-2];&#60;br /&#62;
gridN           =   [512, 512];&#60;br /&#62;
gridStep        =   [gridSize(1)/gridN(1), gridSize(2)/gridN(2)];&#60;/p&#62;
&#60;p&#62;% =========================================================================&#60;br /&#62;
% ELEMENT DEFINITION&#60;br /&#62;
% =========================================================================&#60;/p&#62;
&#60;p&#62;karray = kWaveArray;&#60;/p&#62;
&#60;p&#62;for i=1:numElements&#60;/p&#62;
&#60;p&#62;    pos = [radius*cosd(i*360/numElements), ...&#60;br /&#62;
           radius*sind(i*360/numElements)];&#60;br /&#62;
    karray.addArcElement(pos, radius, sizeArc, focus);&#60;/p&#62;
&#60;p&#62;end&#60;/p&#62;
&#60;p&#62;% =========================================================================&#60;br /&#62;
% GRID &#38;amp; MEDIUM PROPERTIES&#60;br /&#62;
% =========================================================================&#60;/p&#62;
&#60;p&#62;medium.sound_speed  =   1520;&#60;br /&#62;
medium.density      =   1040;&#60;/p&#62;
&#60;p&#62;kgrid = kWaveGrid(gridN(1), gridStep(1), gridN(2), gridStep(2));&#60;br /&#62;
kgrid.makeTime(medium.sound_speed)&#60;/p&#62;
&#60;p&#62;% =========================================================================&#60;br /&#62;
% ASSIGN SOURCE &#38;amp; SENSOR&#60;br /&#62;
% =========================================================================&#60;/p&#62;
&#60;p&#62;signal = repmat(toneBurst(1/kgrid.dt, 100E4, 24).*15, numElements, 1);&#60;/p&#62;
&#60;p&#62;source.p0 = 0;&#60;/p&#62;
&#60;p&#62;sensor.mask = karray.getArrayBinaryMask(kgrid);&#60;br /&#62;
sensor.time_reversal_boundary_data = karray.getDistributedSourceSignal(kgrid, signal);&#60;/p&#62;
&#60;p&#62;% =========================================================================&#60;br /&#62;
% RUN SIMULATION&#60;br /&#62;
% =========================================================================&#60;/p&#62;
&#60;p&#62;simulation = kspaceFirstOrder2D(kgrid, medium, source, sensor, ...&#60;br /&#62;
                                'PMLInside', false, 'DataCast', 'gpuArray-single');&#60;/p&#62;
&#60;p&#62;figure;&#60;br /&#62;
imagesc(kgrid.y_vec, kgrid.x_vec, simulation)&#60;br /&#62;
axis image; colormap(&#34;gray&#34;)&#60;/p&#62;
&#60;p&#62;hold on;&#60;br /&#62;
karray.plotArray(false);
&#60;/p&#62;</description>
		</item>

	</channel>
</rss>
