Nondestructive Testing (NDT) using ultrasound propagation

I'm Ingeneering student and nowadays I'm working on my Bachelor's thesis.
I need to do a simulation of the ultrasound propagation across a square section (2D) that represents a column of concrete with its reinforcements in order to generate an image reconstruction of the column based on the ultrasound propagation.

I began to use the K-WAVE toolbox, the first step, like the examples, is to "construct" the k-grid and to define the medium properties (speed of sound and density).

The medium in my case is composed by: air (that represents the enviroment and where the source of the ultrasound is going to be set), concrete (square section of the column) and steel (square or circular sections that are allowed into the square section of the column representing the reinforcements) giving a model for a Heterogeneous Propagation Medium.

As i said, i started defining the medium, i set a simple model avoiding the reinforcements, only the air and in its middle a concrete section were defined with the following data: concrete density: 2730(kg/m3)
concrete (speed of sound): 4000(m/s)
air density: 1.18(kg/m3)
air (speed of sound): 343(m/s)

The medium in my case is composed by: 1.air (that represents the enviroment), 2.concrete (square section of the column) and 3.steel (square or circular sections that represents the reinforcements are allowed into the square section of the column).

As i said, i started setting the properties of the medium, in this first attemp, i set only air as enviroment and concrete with stone as the column, avoiding the reinforcement.

Then i set the ultrasound source and the sensors, then i started the simulation.

So, here´s my problem, when the simulation starts, the source of ultrasound doesn´t appear, and in other cases, the waves of sound enter into the square section but they don´t go out, instead, they began to crash into the section.

I apreciate that you help me with this problem or telling me what is wrong. I send you the code, thank you!!

'%% crear k grid
Nx=200;
Nz=200;
dx=1;
dz=1;
kgrid = makeGrid(Nx, dx, Nz, dz);
%% grid of air (enviroment) (speed of sound)
for i=1:Nz
for j=1:Nx-150
medium.sound_speed(i,j) = 343;
end
end
for i=1:Nz-150
for j=Nx-150:Nx
medium.sound_speed(i,j) = 343;
end
end
for i=Nz-49:Nz
for j=Nx-150:Nx
medium.sound_speed(i,j) = 343;
end
end
for i=Nz-150:Nz
for j=Nx-49:Nx
medium.sound_speed(i,j) = 343;
end
end
%% grid of the square section (concrete (4000) and stone (3700)) (speed of sound)
for i=Nz-149:Nz-50
for j=Nx-149:Nx-50
if rem((i+j),2)~=0
medium.sound_speed(i,j) = 4000;
end
end
end

for i=Nz-149:Nz-50
for j=Nx-149:Nx-50
if rem((i+j),2)==0
medium.sound_speed(i,j) = 3700;
end
end
end
%% grid of air (enviroment) (density)
for i=1:Nz
for j=1:Nx-150
medium.density(i,j) = 1.18;
end
end
for i=1:Nz-150
for j=Nx-150:Nx
medium.density(i,j) = 1.18;
end
end
for i=Nz-49:Nz
for j=Nx-150:Nx
medium.density(i,j) = 1.18;
end
end
for i=Nz-150:Nz
for j=Nx-49:Nx
medium.density(i,j) = 1.18;
end
end
%% grid of the square section (concrete (2800) and stone (2500)) (density)
for i=Nz-149:Nz-50
for j=Nx-149:Nx-50
if rem((i+j),2)~=0
medium.density(i,j) = 2800;
end
end
end

1) A frequency of 2MHz has a wavelength in air of 343/2e6 = 0.17 mm so for the grid to support this frequency dx and dz must be half this size at most (there must be at least 2 points per wavelength).

2) There is a very large contrast between air and concrete. Fourier-based methods such as k-Wave are very good when everything is smooth and the contrasts are not too big - the code was originally designed for modelling ultrasound in biological tissue where the contrasts are low - but for a large contrast they can accumulate oscillatory errors due to the fact that steep edges cannot be represented very well by a small number of Fourier components. Smoothing the density and sound_speed using the smooth function (which happens automatically in version 0.2) and keeping the timestep small by setting a small value for CFL in makeTime will help reduce this, but not eliminate when the contrast is this severe. Unfortunately your example is almost the worse case possible for k-Wave. Could you put your column in water? That should work better (although the contrast is still quite large).

3) The default scaling is fixed in version 0.2, so adjust your source magnitude so you can see the wave, or use the 'PlotScale' option in kspaceFirstOrder2D. The amplitude of the wave in the air and in the concrete will be quite different because of their different material properties. The pressure (which is what k-Wave plots) will be higher in the concrete because the density is so much greater.

4) I'm not sure what you mean by 'crash into the section' but any waves that do penetrate the concrete will become trapped in there because the transmission coefficient from concrete to air will be so low (less than 1% transmission I would guess, but you can calculate it simply enough).

Thank you for using k-Wave and I'm sorry that it perhaps isn't the best tool for your particular example.

1) i took note for the data dx and dz; in the help, it says that dx and dz are the dimensions of each pixel of the matrix given in Meters. But now with your help i know that it corresponds to the wavelenght, changing this value the simulation improves its result.

2) You confirm my fear, the contrast between the two mediums is quite large, but i can not change the enviroment medium (air).

3) setting the correct values of dx and dz, the source and waves are now visibles.

4) hehehe excuse me, but english is not my mother language, i used the expression 'crash into the section' trying to explain that it seems that the column resonates.

Now, i made a few changes in the model to simulate:

a) i don't need that the waves that comes into the column can go out. I can define a square mask sensor just in the border of the structure and make the measurement of the waves at this point.

So i made another code lines and the results of the simulation are quite better;

I send you the images step by step about what i´m doing (i feels i'm talking with a strong broken english and images are better that 1000 words hehehe) also the new code:

step 1:

MODEL IDEA:
I set only three lines for the square sensor mask, in order to avoid measuring the initial pressure.

Step 2:

MODEL IN CODE LINES:

Step 3:

SIMULATE

Step 4:

WHAT I CAN SEE (INTERPRETATE THE WAVES)

Step 5: (Question 1)

MESUREMENT OF THE SIGNAL WITH SENSORS
How can i interpretate this graphic?

Finally i send you the code, i appreciate further comments and suggestions, thank you.

* dx and dz values were defined as (speed_of_sound/freq)/2
* i set the mask sensor just in the border of the column, with 3 sensors as you can see in the step 3 of my preview post
* the source of the ultrasound pulse were set just in the border of the column

With those changes the simulation ran with better results.

Now, i have a few questions:

1) It is possible to make an image reconstruction of the medium with the data acquired by the sensors in the way that those were set in the code?
2) It is possible to use the algorithm of the toolbox (either fft or time-reversal) in order to obtain an approximation image for the medium?

I ran my example successfully, i'm still having problems posting images, so here are the url's:

1) The model:
The model was a cross-section of a concrete column measuring 20 cm on each side, 8 reinforcements of steel and 1 inch of diameter were disposed, a PML of 20 pixels were defined all around the column:
link: http://img163.imageshack.us/i/modelod.jpg/

2) The Source:
because in the faces x and z and along them the ultrasound source is going to be fired, i considered two sources and i set them just in the border of the column, one on the x face and the other on the Z face;
The ultrasound has a freq of 2 MHz and magnitude 0.4

3) The sensors:
Two sensors were disposed of the same size and oposite to the two sources.

4) Simulation results:
Those are the images resulting from the reconstruction using time reversal

hello friends,
i am trying to simulate ultrasound in aluminum using focused probe.
i wanted to know that is it possible to include elastic properties of material using k-wave toolbox.
because if it is not included shear wave will not be visualized ....

I tried to simulate NDT also. When the impedence contrast is too large, like Aluminum or steel, even putting it in water (immersion mode), and set CFL=0.1 (default is 0.3), the k-Wave results are still not as expected. So I can only reduce the material sound speed and density so that they are not too bigger than those of water, then the results are OK.