Hi Brad,
I'm trying to simulate the reflection due to an arbitrarily shaped rigid reflector placed in air medium. I tried using the heterogeneous medium simulation method, where the reflector is modelled as steel (close enough to a rigid body, I suppose), but the simulation result shows some extremely high values. Some similar topics in the forum suggest that the significant difference in sound speed and medium density is probably causing this issue. I wonder if there is a better way to simulate this, or a better simulation setting that can accurately model this type of reflection?
I know that one method is to set a source mask for the reflector and enforce a boundary condition. But in the case of rigid body, the normal particle velocity on the surface needs to be set to 0, which is easy to do for boundaries perpendicular to X,Y and Z axes; but for circular (or any other non-rectangular) shape, this would seem difficult.
Here is my simulation code, please have a glimpse:
clear;
clc;
Nx=256;
Ny=256;
dx = 1e-3; % grid point spacing in the x direction [m]
dy = 1e-3; % grid point spacing in the y direction [m]
kgrid = kWaveGrid(Nx, dx, Ny, dy);
Nt=400;
Fs=48000*50;
dt=1/Fs;
medium.sound_speed = 343.*ones(Nx,Ny);
medium.sound_speed(150:170,40:200)=5800;
medium.density = 7850 * ones(Nx, Ny);
medium.density(150:170,40:200)=7850;
kgrid.setTime(Nt,dt);
source.p_mask = zeros(Nx, Ny);
source.p_mask(80,80) = 1;
source.p=zeros(1,100);
source.p(30)=10;
source.p = filterTimeSeries(kgrid, medium, source.p, 'ZeroPhase', true);
sensor.mask=zeros(Nx,Ny);
sensor.mask(100,100)=1;
sensor.mask(80,80)=1;
sensor_data = kspaceFirstOrder2D(kgrid, medium, source, sensor);
plot(sensor_data.');
Thank you.