<?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: Attenuation compensation in the back projection algorithm</title>
		<link>http://www.k-wave.org/forum/topic/attenuation-compensation-in-the-back-projection-algorithm</link>
		<description>Support for the k-Wave MATLAB toolbox</description>
		<language>en-US</language>
		<pubDate>Tue, 12 May 2026 23:07:20 +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/attenuation-compensation-in-the-back-projection-algorithm" rel="self" type="application/rss+xml" />

		<item>
			<title>zengqw2021 on "Attenuation compensation in the back projection algorithm"</title>
			<link>http://www.k-wave.org/forum/topic/attenuation-compensation-in-the-back-projection-algorithm#post-8896</link>
			<pubDate>Thu, 17 Aug 2023 02:52:35 +0000</pubDate>
			<dc:creator>zengqw2021</dc:creator>
			<guid isPermaLink="false">8896@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Dear anyone,&#60;br /&#62;
     My sensor has a center frequency and finite bandwidth. So, should we need to add the center frequency and bandwidth of the transducer in the forward simulation as follows:&#60;/p&#62;
&#60;p&#62;sensor.frequency_response = [2e6 70] % center frequency and percentage bandwidth&#60;br /&#62;
% run the simulation to get the PA signal&#60;br /&#62;
sensor_data = kspaceFirstOrder2D(kgrid, medium, source, sensor, input_args{:});
&#60;/p&#62;</description>
		</item>
		<item>
			<title>zengqw2021 on "Attenuation compensation in the back projection algorithm"</title>
			<link>http://www.k-wave.org/forum/topic/attenuation-compensation-in-the-back-projection-algorithm#post-8855</link>
			<pubDate>Fri, 30 Jun 2023 15:45:56 +0000</pubDate>
			<dc:creator>zengqw2021</dc:creator>
			<guid isPermaLink="false">8855@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Dear Bradley Treeby,&#60;br /&#62;
     As you said, I'm trying to replicate the ultrasonic signal reception process with sensors of finite bandwidth. So, should I consider the center frequency and bandwidth of the transducer in the forward simulation rather than in the back projection reconstruction？If so, how could I set the transducer frequency and bandwidth?&#60;br /&#62;
     I found a possibly relevant attribute in the kspaceFirstOrder2D function named&#34;sensor.frequency_response&#34;, which says 'two element array specifying the center frequency and percentage bandwidth of a frequency domain Gaussian filter applied to the sensor_data'. Therefore, I think I can simulate the process of receiving ultrasonic signal by ultrasonic transducer with specific center frequency and bandwidth as follows：&#60;/p&#62;
&#60;p&#62;  。。。&#60;br /&#62;
     sensor.frequency_response = [2e6 70]   % center frequency and percentage bandwidth&#60;br /&#62;
     % run the simulation to get the PA signal&#60;br /&#62;
     sensor_data = kspaceFirstOrder2D(kgrid, medium, source, sensor, input_args{:});&#60;/p&#62;
&#60;p&#62;     In addition, If I take into account the center frequency and bandwidth of the transducer in the forward simulation, do I also need to take into account the back projection process?
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Bradley Treeby on "Attenuation compensation in the back projection algorithm"</title>
			<link>http://www.k-wave.org/forum/topic/attenuation-compensation-in-the-back-projection-algorithm#post-8803</link>
			<pubDate>Wed, 07 Jun 2023 19:17:01 +0000</pubDate>
			<dc:creator>Bradley Treeby</dc:creator>
			<guid isPermaLink="false">8803@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;It depends entirely on what processes you’re trying to replicate. For example, if your sensor has a finite bandwidth, you might want to include it in your simulation.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>zengqw2021 on "Attenuation compensation in the back projection algorithm"</title>
			<link>http://www.k-wave.org/forum/topic/attenuation-compensation-in-the-back-projection-algorithm#post-8799</link>
			<pubDate>Wed, 07 Jun 2023 08:52:35 +0000</pubDate>
			<dc:creator>zengqw2021</dc:creator>
			<guid isPermaLink="false">8799@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Dear,&#60;br /&#62;
I found some differences between compensating for acoustic attenuation before or after filtering.&#60;br /&#62;
So, which way should I choose.&#60;/p&#62;
&#60;p&#62;*************************************************************&#60;/p&#62;
&#60;p&#62;Comp_data = attenComp(pa_data, Ts, speed, alpha_0, y0);&#60;/p&#62;
&#60;p&#62;% filter the sensor data using a Gaussian filter&#60;br /&#62;
center_freq = fc;          % [Hz]&#60;br /&#62;
bandwidth   = 70;          % [%]&#60;br /&#62;
sensor_data_gaussian1 = gaussianFilter(pa_data, freqs, center_freq, bandwidth);&#60;br /&#62;
sensor_data_gaussian2 = gaussianFilter(Comp_data, freqs, center_freq, bandwidth);&#60;/p&#62;
&#60;p&#62;% add noise to the recorded sensor data&#60;br /&#62;
signal_to_noise_ratio = 40;	% [dB]&#60;br /&#62;
sensor_data1  = addNoise(sensor_data_gaussian1, signal_to_noise_ratio, 'peak');&#60;br /&#62;
sensor_data2  = addNoise(sensor_data_gaussian2, signal_to_noise_ratio, 'peak');&#60;/p&#62;
&#60;p&#62;%----Attenuation compensation after filtering&#60;br /&#62;
Comp_data2 = attenComp(sensor_data1, Ts, speed, alpha_0, y0);
&#60;/p&#62;</description>
		</item>
		<item>
			<title>zengqw2021 on "Attenuation compensation in the back projection algorithm"</title>
			<link>http://www.k-wave.org/forum/topic/attenuation-compensation-in-the-back-projection-algorithm#post-8798</link>
			<pubDate>Wed, 07 Jun 2023 08:52:33 +0000</pubDate>
			<dc:creator>zengqw2021</dc:creator>
			<guid isPermaLink="false">8798@http://www.k-wave.org/forum/</guid>
			<description>&#60;br /&#62;</description>
		</item>
		<item>
			<title>zengqw2021 on "Attenuation compensation in the back projection algorithm"</title>
			<link>http://www.k-wave.org/forum/topic/attenuation-compensation-in-the-back-projection-algorithm#post-8777</link>
			<pubDate>Mon, 29 May 2023 17:07:35 +0000</pubDate>
			<dc:creator>zengqw2021</dc:creator>
			<guid isPermaLink="false">8777@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Dear Bradley Treeby,&#60;br /&#62;
The back-projection I coded up is listed as follows:&#60;/p&#62;
&#60;p&#62;function Rec_img = UBP_2D(kgrid,medium,sensor,sensor_data)&#60;/p&#62;
&#60;p&#62;% INPUTS:&#60;br /&#62;
%        kgrid,&#60;br /&#62;
%                kgrid.Nx、kgrid.Ny,kgrid.dx、kgrid.dy,kgrid.x,kgrid.y&#60;br /&#62;
%                kgrid.t_array,kgrid.dt&#60;br /&#62;
%        medium,&#60;br /&#62;
%                medium.speed&#60;br /&#62;
%        sensor,&#60;br /&#62;
%                sensor.mask&#60;br /&#62;
%                sensor.scan_radius&#60;br /&#62;
%        sensor_data，&#60;br /&#62;
%                Nd×Nt，&#60;br /&#62;
%&#60;br /&#62;
% Xu M, Wang LV. Universal back-projection algorithm&#60;br /&#62;
%-----------doi:10.1103/PhysRevE.71.016706--------------&#60;/p&#62;
&#60;p&#62;NumElem       = sensor.Nd             ;  %&#60;br /&#62;
sensor_radius = sensor.scan_radius    ;  % &#60;/p&#62;
&#60;p&#62;Nx = kgrid.Nx;&#60;br /&#62;
Ny = kgrid.Ny;&#60;/p&#62;
&#60;p&#62;% dx = kgrid.dx;&#60;br /&#62;
% dy = kgrid.dy;&#60;/p&#62;
&#60;p&#62;SpeedofSound = medium.sound_speed; % [m/s]&#60;/p&#62;
&#60;p&#62;t  = kgrid.t_array;&#60;br /&#62;
dt = kgrid.dt;&#60;/p&#62;
&#60;p&#62;sensor_location_x = sensor.mask(1,:); % 2*len [x1,y1;x2,y2.....]&#60;br /&#62;
sensor_location_y = sensor. Mask(2,:);&#60;/p&#62;
&#60;p&#62;p0_recon1 = zeros(Nx,Ny);&#60;br /&#62;
p0_recon_location_x = kgrid.x;&#60;br /&#62;
p0_recon_location_y = kgrid.y;&#60;/p&#62;
&#60;p&#62;% arc = 2 * pi * sensor_radius / NumElem;&#60;/p&#62;
&#60;p&#62;arc = sensor.trans_diameter/sensor.scan_radius;&#60;/p&#62;
&#60;p&#62;sum_w_omega = 0;&#60;br /&#62;
for i = 1:NumElem&#60;br /&#62;
    distance_x = p0_recon_location_x - sensor_location_x(i);&#60;br /&#62;
    distance_y = p0_recon_location_y - sensor_location_y(i);&#60;br /&#62;
    distance_xy = sqrt(distance_y.^2 + distance_x.^2);&#60;/p&#62;
&#60;p&#62;    distance_xy_time =  distance_xy./SpeedofSound;&#60;/p&#62;
&#60;p&#62;    distance_xy_index = floor(distance_xy_time ./dt);&#60;br /&#62;
    distance_xy_index(distance_xy_index&#38;lt;1) = 1;&#60;/p&#62;
&#60;p&#62;    unit_normal_vector = -[sensor_location_x(i),sensor_location_y(i)]./ norm([sensor_location_x(i),sensor_location_y(i)]);&#60;br /&#62;
    unit_dp_vector_x = distance_x./distance_xy;&#60;br /&#62;
    unit_dp_vector_y = distance_y./distance_xy;&#60;br /&#62;
    w_omega = arc ./  distance_xy.^2 .* (unit_dp_vector_x .* sensor_location_x(i) + ...&#60;br /&#62;
        unit_dp_vector_y .* sensor_location_y(i)) ./ -norm([sensor_location_x(i),sensor_location_y(i)]);&#60;/p&#62;
&#60;p&#62;    p_i = sensor_data(i,:);&#60;/p&#62;
&#60;p&#62;    %% b(r,t) = 2*p(r,t) - 2*t*dp(r,t)/d(t)&#60;br /&#62;
    bp_i = 2*p_i - 2*t .* diff([0,p_i])./dt;&#60;/p&#62;
&#60;p&#62;    p0_i = w_omega .* bp_i(distance_xy_index);&#60;/p&#62;
&#60;p&#62;    sum_w_omega = sum_w_omega + w_omega;&#60;/p&#62;
&#60;p&#62;    p0_recon1 = p0_recon1 + p0_i;&#60;br /&#62;
%     break&#60;br /&#62;
end&#60;br /&#62;
p0_recon12 = p0_recon1 ./sum_w_omega;&#60;/p&#62;
&#60;p&#62;Rec_img = p0_recon12;
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Bradley Treeby on "Attenuation compensation in the back projection algorithm"</title>
			<link>http://www.k-wave.org/forum/topic/attenuation-compensation-in-the-back-projection-algorithm#post-8773</link>
			<pubDate>Tue, 23 May 2023 06:27:09 +0000</pubDate>
			<dc:creator>Bradley Treeby</dc:creator>
			<guid isPermaLink="false">8773@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Have you looked at &#60;a href=&#34;http://www.k-wave.org/documentation/attenComp.php&#34;&#62;&#60;code&#62;attencomp&#60;/code&#62;&#60;/a&#62;? I'm not sure which back-projection you've coded up, but might be worth checking if there is a scaling factor also.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>zengqw2021 on "Attenuation compensation in the back projection algorithm"</title>
			<link>http://www.k-wave.org/forum/topic/attenuation-compensation-in-the-back-projection-algorithm#post-8772</link>
			<pubDate>Mon, 22 May 2023 13:50:53 +0000</pubDate>
			<dc:creator>zengqw2021</dc:creator>
			<guid isPermaLink="false">8772@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Dear all,&#60;br /&#62;
     In the forward simulation, I have set the medium properties as follows and an initial pressure distribution is created. The received ultrasound signal is used to reconstruct the image by the back projection algorithm. However, I found that the reconstructed sound pressure was much smaller than the initial value. Can I make some attenuation compensation to make up for this difference？I hope someone can give me some help.&#60;br /&#62;
     Best.&#60;/p&#62;
&#60;p&#62;% define the properties of the propagation medium&#60;br /&#62;
medium.density     = 1.29   ; % [kg/m^3]&#60;br /&#62;
medium.sound_speed = 330 ;  % [m/s]&#60;br /&#62;
medium.alpha_coeff = 1.59;  % [dB/(MHz^y cm)]&#60;br /&#62;
medium.alpha_power = 2.0;&#60;/p&#62;
&#60;p&#62;%%=============================================&#60;br /&#62;
% create initial pressure distribution&#60;br /&#62;
Cv          = 0.72 ;       % Specific heat coefficient of constant volume&#60;br /&#62;
Heat_beta   = 1/273.15;    % the coefficient of the thermal expansion[1/K]&#60;/p&#62;
&#60;p&#62;%----Construct a Gaussian pressure source&#60;br /&#62;
[X,Y] = meshgrid(kgrid.x_vec,kgrid.y_vec);&#60;/p&#62;
&#60;p&#62;disc_H1      = 30;                      % [kJ/m3]&#60;br /&#62;
disc_x_pos1  = 0;                      % actual length [m]&#60;br /&#62;
disc_y_pos1  = 0;  	                   % actual length [m]&#60;br /&#62;
FWHM         = 120e-6;                  %&#60;br /&#62;
disc_radius1 = FWHM*sqrt(log(2))/2;    % actual length [m]&#60;br /&#62;
Gaus_1 = exp(-((X-disc_x_pos1).^2+(Y-disc_y_pos1).^2)/disc_radius1^2);&#60;br /&#62;
disc_1 = disc_H1*Heat_beta*medium.sound_speed^2/Cv*Gaus_1;
&#60;/p&#62;</description>
		</item>

	</channel>
</rss>
