<?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; User Favorites: zhangguangjie</title>
		<link><a href='http://www.k-wave.org/forum/profile/zhangguangjie'>zhangguangjie</a></link>
		<description>Support for the k-Wave MATLAB toolbox</description>
		<language>en-US</language>
		<pubDate>Wed, 13 May 2026 01:11:11 +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/profile/" rel="self" type="application/rss+xml" />

		<item>
			<title>Bradley Treeby on "how to use 3D FFT Reconstruction for a real experimental data by Planar Sensor"</title>
			<link>http://www.k-wave.org/forum/topic/how-to-use-3d-fft-reconstruction-for-a-real-experimental-data-by-planar-sensor-1#post-7345</link>
			<pubDate>Wed, 01 Apr 2020 15:11:38 +0000</pubDate>
			<dc:creator>Bradley Treeby</dc:creator>
			<guid isPermaLink="false">7345@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi zhangguangjie,&#60;/p&#62;
&#60;p&#62;See the help file for &#60;a href=&#34;http://www.k-wave.org/documentation/kspacePlaneRecon.php&#34;&#62;&#60;/a&#62; (or type &#60;code&#62;help kspacePlaneRecon&#60;/code&#62; in MATLAB). You don't need to define a computational grid, just the spacing between your data.&#60;/p&#62;
&#60;p&#62;Brad.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>zhangguangjie on "how to use 3D FFT Reconstruction for a real experimental data by Planar Sensor"</title>
			<link>http://www.k-wave.org/forum/topic/how-to-use-3d-fft-reconstruction-for-a-real-experimental-data-by-planar-sensor-1#post-7332</link>
			<pubDate>Sun, 29 Mar 2020 16:07:14 +0000</pubDate>
			<dc:creator>zhangguangjie</dc:creator>
			<guid isPermaLink="false">7332@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Dear Brad&#60;br /&#62;
I have called the function directly before.But I don't know how define NX NY NZ(computational grid).Because I only know my experiment sensor' dt dy dz. In your example, the dt is automatically generated by kWaveGrid.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Bradley Treeby on "how to use 3D FFT Reconstruction for a real experimental data by Planar Sensor"</title>
			<link>http://www.k-wave.org/forum/topic/how-to-use-3d-fft-reconstruction-for-a-real-experimental-data-by-planar-sensor-1#post-7322</link>
			<pubDate>Thu, 26 Mar 2020 11:35:42 +0000</pubDate>
			<dc:creator>Bradley Treeby</dc:creator>
			<guid isPermaLink="false">7322@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi zhangguangjie, &#60;/p&#62;
&#60;p&#62;What is the problem exactly? Also, is there any reason you have copy and pasted the code from &#60;code&#62;kspacePlaneRecon&#60;/code&#62; rather than calling the function directly?&#60;/p&#62;
&#60;p&#62;Brad
&#60;/p&#62;</description>
		</item>
		<item>
			<title>zhangguangjie on "how to use 3D FFT Reconstruction for a real experimental data by Planar Sensor"</title>
			<link>http://www.k-wave.org/forum/topic/how-to-use-3d-fft-reconstruction-for-a-real-experimental-data-by-planar-sensor-1#post-7308</link>
			<pubDate>Fri, 20 Mar 2020 07:28:05 +0000</pubDate>
			<dc:creator>zhangguangjie</dc:creator>
			<guid isPermaLink="false">7308@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Dear sir&#60;br /&#62;
  I learnt the 3D FFT Reconstruction For A Planar Sensor Example and want to use the method to reconstructe my real experimental data.However I can not get right result.My code is as follows：&#60;/p&#62;
&#60;p&#62;clc&#60;br /&#62;
clear all&#60;br /&#62;
close all&#60;br /&#62;
% start timer&#60;br /&#62;
tic;&#60;br /&#62;
% nargin=42;&#60;br /&#62;
% define defaults&#60;br /&#62;
num_req_inputs = 5;&#60;br /&#62;
data_order = 'tyz';&#60;br /&#62;
interp_method = '*nearest';&#60;br /&#62;
plot_recon = 1;&#60;br /&#62;
positivity_cond = 1;&#60;br /&#62;
c = 1500; % The speed of sound&#60;br /&#62;
fs =25;  %MHz Sampling rate&#60;br /&#62;
dt=1/fs/1000000;&#60;br /&#62;
dy=0.00135;&#60;br /&#62;
dz=0.0003;&#60;/p&#62;
&#60;p&#62;% read data,data order is tyz&#60;br /&#62;
load('pa_data_all')&#60;br /&#62;
p=pa_data_all(:,:,:);&#60;br /&#62;
if strcmp(data_order, 'yzt')&#60;br /&#62;
    p = permute(p, [3 1 2]);&#60;br /&#62;
end&#60;/p&#62;
&#60;p&#62;% mirror the time domain data about t = 0 to allow the cosine transform in&#60;br /&#62;
% the t direction to be computed using an FFT&#60;br /&#62;
p = [flipdim(p, 1); p(2:end, :, :)];&#60;/p&#62;
&#60;p&#62;% extract the size of mirrored input data&#60;br /&#62;
[Nt, Ny, Nz] = size(p);&#60;/p&#62;
&#60;p&#62;% update command line status&#60;br /&#62;
disp('Running k-Wave planar reconstruction...');&#60;br /&#62;
disp(['  grid size: ' num2str((Nt+1)/2) ' by ' num2str(Ny) ' by ' num2str(Nz) ' grid points']);&#60;br /&#62;
disp(['  interpolation mode: ' interp_method]);&#60;/p&#62;
&#60;p&#62;% create a computational grid that is evenly spaced in w, ky, and kz, where&#60;br /&#62;
% Nx = Nt and dx = dt*c&#60;br /&#62;
kgrid = makeGrid(Nt, dt*c, Ny, dy, Nz, dz);&#60;/p&#62;
&#60;p&#62;% from the grid for kx, create a computational grid for w using the&#60;br /&#62;
% relation dx = dt*c; this represents the initial sampling of p(w, ky, kz)&#60;br /&#62;
w = c*kgrid.kx;&#60;/p&#62;
&#60;p&#62;% remap the computational grid for kx onto w using the dispersion&#60;br /&#62;
% relation w/c = (kx^2 + ky^2 + kz^2)^1/2. This gives an w grid that is&#60;br /&#62;
% evenly spaced in kx. This is used for the interpolation from p(w, ky, kz)&#60;br /&#62;
% to p(kx, ky, kz). Only real w is taken to force kx (and thus x) to be&#60;br /&#62;
% symmetrical about 0 after the interpolation.&#60;br /&#62;
w_new = (c*kgrid.k);&#60;/p&#62;
&#60;p&#62;% calculate the scaling factor using the value of kx, where&#60;br /&#62;
% kx = sqrt( (w/c).^2 - kgrid.ky.^2 - kgrid.kz.^2 ) and then manually&#60;br /&#62;
% replacing the DC value with its limit (otherwise NaN results)&#60;br /&#62;
sf = c^2*sqrt( (w/c).^2 - kgrid.ky.^2 - kgrid.kz.^2)./(2*w);&#60;br /&#62;
sf(w == 0 &#38;amp; kgrid.ky == 0 &#38;amp; kgrid.kz == 0) = c/2;&#60;/p&#62;
&#60;p&#62;% compute the FFT of the input data p(t, y, z) to yield p(w, ky, kz) and&#60;br /&#62;
% scale&#60;br /&#62;
p = sf.*fftshift(fftn(fftshift(p)));&#60;/p&#62;
&#60;p&#62;% remove unused variables&#60;br /&#62;
% clear sf;&#60;/p&#62;
&#60;p&#62;% exclude the inhomogeneous part of the wave&#60;br /&#62;
p(abs(w) &#38;lt; (c*sqrt(kgrid.ky.^2 + kgrid.kz.^2))) = 0;&#60;/p&#62;
&#60;p&#62;% compute the interpolation from p(w, ky, kz) to p(kx, ky, kz); for a&#60;br /&#62;
% matrix indexed as [M, N, P], the axis variables must be given in the&#60;br /&#62;
% order N, M, P&#60;br /&#62;
p = interp3(kgrid.ky, w, kgrid.kz, p, kgrid.ky, w_new, kgrid.kz, interp_method);&#60;/p&#62;
&#60;p&#62;% remove unused variables&#60;br /&#62;
% clear kgrid w;&#60;/p&#62;
&#60;p&#62;% set values outside the interpolation range to zero&#60;br /&#62;
p(isnan(p)) = 0;&#60;/p&#62;
&#60;p&#62;% compute the inverse FFT of p(kx, ky, kz) to yield p(x, y, z)&#60;br /&#62;
p = real(ifftshift(ifftn(ifftshift(p))));&#60;/p&#62;
&#60;p&#62;% remove the left part of the mirrored data which corresponds to the&#60;br /&#62;
% negative part of the mirrored time data&#60;br /&#62;
p = p( (Nt + 1)/2:Nt, :, :);&#60;/p&#62;
&#60;p&#62;% correct the scaling - the forward FFT is computed with a spacing of dt&#60;br /&#62;
% and the reverse requires a spacing of dz = dt*c, the reconstruction&#60;br /&#62;
% assumes that p0 is symmetrical about z, and only half the plane collects&#60;br /&#62;
% data (first approximation to correcting the limited view problem) (p_zxy)&#60;br /&#62;
p = 2*2*p./c;&#60;/p&#62;
&#60;p&#62;% enfore positivity condition (p_zxy)&#60;br /&#62;
if positivity_cond&#60;br /&#62;
    disp('  applying positivity condition...');&#60;br /&#62;
    p(p &#38;lt; 0) = 0;&#60;br /&#62;
end&#60;/p&#62;
&#60;p&#62;% update command line status&#60;br /&#62;
disp(['  computation completed in ' scaleTime(toc)]);&#60;/p&#62;
&#60;p&#62;% plot the reconstruction&#60;br /&#62;
if plot_recon&#60;/p&#62;
&#60;p&#62;    % allocate axis dimensions&#60;br /&#62;
    x_axis = [0 (Nt/2)*dt*c];&#60;br /&#62;
    y_axis = [0 Ny*dy];&#60;br /&#62;
    z_axis = [0 Nz*dz];&#60;/p&#62;
&#60;p&#62;    % select suitable axis scaling factor&#60;br /&#62;
    [x_sc, scale, prefix] = scaleSI(max([(Nt/2)*dt*c, Ny*dy, Nz*dz])); &#60;/p&#62;
&#60;p&#62;    % select suitable plot scaling factor&#60;br /&#62;
    plot_scale = max(p(:));&#60;/p&#62;
&#60;p&#62;    % create the figures&#60;br /&#62;
    figure;&#60;br /&#62;
    subplot(2, 2, 1), imagesc(y_axis*scale, x_axis*scale, squeeze(p(:, :, round(end/2))), [-plot_scale, plot_scale]);&#60;br /&#62;
    axis image;&#60;br /&#62;
    title('x-y plane');&#60;br /&#62;
    subplot(2, 2, 2), imagesc(z_axis*scale, x_axis*scale, squeeze(p(:, round(end/2), :)), [-plot_scale, plot_scale]);&#60;br /&#62;
    axis image;&#60;br /&#62;
    xlabel(['(All axes in ' prefix 'm)']);&#60;br /&#62;
    title('x-z plane');&#60;br /&#62;
    subplot(2, 2, 3), imagesc(z_axis*scale, y_axis*scale, squeeze(p(round(end/2), :, :)), [-plot_scale, plot_scale]);&#60;br /&#62;
    axis image;&#60;br /&#62;
    title('y-z plane');&#60;br /&#62;
    colormap(getColorMap);&#60;br /&#62;
end&#60;/p&#62;
&#60;p&#62;Thank you Sir.&#60;br /&#62;
Sincerely
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Bradley Treeby on "Provision for acoustic wave generation from absorption profile of a 3d tissue."</title>
			<link>http://www.k-wave.org/forum/topic/provision-for-acoustic-wave-generation-from-absorption-profile-of-a-3d-tissue#post-6614</link>
			<pubDate>Mon, 29 Oct 2018 11:23:10 +0000</pubDate>
			<dc:creator>Bradley Treeby</dc:creator>
			<guid isPermaLink="false">6614@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi Prabhakar,&#60;/p&#62;
&#60;p&#62;If your laser pulse is short enough to assume that stress confinement holds, you can directly assign the absorbed energy distribution from your Monte-Carlo simulation to &#60;code&#62;source.p0&#60;/code&#62;. Note, you will need to multiply by the Gruneisen parameter if you care about absolute values of pressure (e.g., see &#60;a href=&#34;https://doi.org/10.1121/1.1920227&#34;&#62;here&#60;/a&#62;).&#60;/p&#62;
&#60;p&#62;Brad
&#60;/p&#62;</description>
		</item>
		<item>
			<title>prabhakar.amarana on "Provision for acoustic wave generation from absorption profile of a 3d tissue."</title>
			<link>http://www.k-wave.org/forum/topic/provision-for-acoustic-wave-generation-from-absorption-profile-of-a-3d-tissue#post-6605</link>
			<pubDate>Thu, 25 Oct 2018 09:45:09 +0000</pubDate>
			<dc:creator>prabhakar.amarana</dc:creator>
			<guid isPermaLink="false">6605@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Dear Sir,&#60;br /&#62;
I am working on breast cancer detection through simulation of photoacoustic imaging.&#60;br /&#62;
Before k-wave simulation, I have done the simulation of light propagation inside the breast tissue model through 3d Monte-Carlo simulation. 3d absorption profile obtained from this simulation was used as a source in the k-wave simulation. Acoustic wave propagation through the medium and its detection using planar array were achieved with k-wave. But I wanted to know whether it is correct to place the absorption profile as a source in the k-wave simulation?&#60;br /&#62;
I am also eager to find any mechanism or provision to generate acoustic wave from the absorption profile in the k-wave toolbox so that this generated acoustic wave will become a source in the k-wave simulation.
&#60;/p&#62;</description>
		</item>

	</channel>
</rss>
