k-Wave Toolbox
k-Wave Toolbox Previous   Next

Diffraction Through A Slit Example


This example illustrates the diffraction of a plane acoustic wave through a slit. It builds on the Monopole Point Source In A Homogeneous Propagation Medium and Simulating Transducer Field Patterns examples.

 Back to Top

Defining the medium properties

The current version of k-Wave cannot explicitly enforce impedance boundary conditions. However, rigid boundaries can still be modelled by assigning a boundary with a large sound speed and density compared to the rest of the propagation medium. As this impedance difference is increased, the behaviour of the interface will approach that of a rigid boundary. Note, increasing the sound speed of the boundary will similarly increase the computational requirements (the time step required for a stable simulation is dependent on the maximum sound speed within the medium).

Here, a diffraction slit is created by defining a thin layer with a significantly different sound speed and density to the background medium such that most of the incident wave is reflected. (Note, using barrier_scale = 20, some of the incident wave will still be transmitted through the barrier causing additional interference fringes. These can be reduced by increasing the barrier scale.)

% define the ratio between the barrier and background sound speed and density
barrier_scale = 20;

% create the time array using the barrier sound speed
t_end = 40e-6;                % [s]
CFL = 0.5;                    % Courant–Friedrichs–Lewy number
kgrid.t_array = makeTime(kgrid, c0*barrier_scale, CFL, t_end);

% create a mask of a barrier with a slit
slit_thickness = 2;                     % [grid points]
slit_width = 10;                        % [grid points]
slit_x_pos = Nx - Nx/4;                 % [grid points]
slit_offset = Ny/2 - slit_width/2 - 1;  % [grid points]
slit_mask = zeros(Nx, Ny);
slit_mask(slit_x_pos:slit_x_pos + slit_thickness, 1:1 + slit_offset) = 1;
slit_mask(slit_x_pos:slit_x_pos + slit_thickness, end - slit_offset:end) = 1;

% assign the slit to the properties of the propagation medium
medium.sound_speed = c0*ones(Nx, Ny);
medium.density = rho0*ones(Nx, Ny);
medium.sound_speed(slit_mask == 1) = barrier_scale*c0;
medium.density(slit_mask == 1) = barrier_scale*rho0;

 Back to Top

Running the simulation

In the first example (set example_number = 1 within the example m-file), a sinusoidal plane wave source is created with a wavelength equal to the slit width. A visualisation of the barrier is also produced by assigning the slit_mask created above to the optional input parameter 'DisplayMask'. The size and location of the perfectly matched layer are explicitly defined (see Controlling The Absorbing Boundary Layer Example), the simulation is run in single precision to reduce the computation time (see Optimising k-Wave Performance Example), and the final pressure and velocity fields are returned by sensor.record to {'p_final', 'u_final'} (see Recording The Particle Velocity Example).

% set the input options
input_args = {'PMLInside', false, 'PMLSize', PML_size, 'PlotPML', false, ...
    'DisplayMask', slit_mask, 'DataCast', 'single'};

% run the simulation
sensor_data = kspaceFirstOrder2D(kgrid, medium, source, sensor, input_args{:});

A visualisation of the pressure field is given below. The wave field on the far side of the slit appears reasonably omni-directional.

In the second example (set example_number = 2 within the example m-file), the slit size is increased and the wavelength is reduced to be a quarter of the slit width. A visualisation of the pressure field is given below. In this case, the directionality of the wavefield is increased, and interference fringes are visible.

 Back to Top

Diffraction through a double slit

In the third example (set example_number = 3 within the example m-file), a double slit is used and the wavelength set equal to the slit width. The final velocity fields are also displayed.

Note, the pictures shown here were computed using barrier_scale = 50 and scale = 2 within the example m-file.

 Back to Top

© 2009-2014 Bradley Treeby and Ben Cox.