Hello, I'm sangwoon Jeong
I'm studying on an acoustic wave generated by a proton beam.
The influence of material deviation is evaluated.
If the average speed of sound and the average density of a material are the same, we are confirming that the arrival time of sound waves is different between a homogeneous material and a heterogeneous material.
Is there anything else I should consider?
Sometimes for example,
Extract the mean value and standard deviation of Hounsfiled units (HU) in the bone area and lung area from the CT image.
A homogeneous material with an average value and,
Produces an inhomogeneous material with the same mean but with a standard deviation.
At this time, the average speed of sound and density are the same.
Set the acoustic and detector at the same location of the two materials and use kspaceFirstOrder2D to check and compare the arrival times.
As a result, it appears differently in the lung area, and it differs from the homogeneous material in the heterogeneous material that combines lung and bone or lung and tissue.
this is my code.
clc;
clear ;
close all ;
%% PML
input_args = {'DataCast','gpuArray-single'};
%% K-grid input phantom image
% creat the compuational grid
kgrid.Nx = 300;
kgrid.Ny = 300;
dx = 1e-3; % 1 mm
dy = 1e-3; % 1 mm
kgrid = makeGrid(kgrid.Nx,dx,kgrid.Ny,dy);
%% only one
bone_matrix = randi([1800 1900],300, 300);
bone_true = ones(300,300)*mean2(bone_matrix);
lung_matrix = randi([162 305],300, 300);
lung_true = ones(300,300)*mean2(lung_matrix);
normal_matrix = randi([980 1105],300, 300);
normal_true = ones(300,300)*mean2(normal_matrix);
%% select bone, lung, normal tissue
using_image = bone_true;
%%
figure, imshow(using_image,[]);
[density, sound_speed] = hounsfield2density(double(using_image));
medium.sound_speed = sound_speed;
medium.density = density;
mean2(sound_speed)
%% Create the time array
dt = 10e-9; % 10ns % [s] e-3 = ms / e-6 = 1us / e-9 = 1ns
% Nt = 20000;
t_end = 200e-6; % 0.2ms
% kgrid.setTime(Nt, dt);
kgrid.t_array = 0:dt:t_end;
%% Source
source.p_mask = zeros(kgrid.Nx,kgrid.Ny);
source.p_mask(kgrid.Nx/2, 99) = 1;
source_mag = 50e-3; % [Pa] @@@
%%
xx = [-3.5:1/300 :3.5];
yy = normpdf(xx,0,1);
yy = yy(1,1:size(xx,2)-1);
source.p = source_mag * yy ;
%% Sensor
sensor.mask = zeros(kgrid.Nx, kgrid.Ny);
sensor.mask(kgrid.Nx/2, 201) = 1; % sensor posz ition
%% Run the simulation
sensor_data_2D = kspaceFirstOrder2D(kgrid, medium, source, sensor,input_args{:});
%% result
[t_sc, t_scale, t_prefix] = scaleSI(t_end);
result_time_array = kgrid.t_array*t_scale;
Thanks for pointing out the problem.
Thanks,
Sangwoon Jeong.