Hello, my name is Tim. Sorry for my English.
I try to simulate the acoustic wave propogation with the signal frequency 4kHz. When I use filterTimeSeries function, I get good signal on the receiver. But without using this function I see high-frequency calculation error.
Here is example image:
While the simulation was running, I saw:
"...
dt: 4.5045us, t_end: 5ms, time steps: 1111
input grid size: 200 by 200 grid points (1 by 1m)
maximum supported frequency: 33.3kHz
expanding computational grid...
computational grid size: 240 by 240 grid points
".
The maximum supported frequency of grid (33.3kHz) is much larger than the signal frequency (4kHz). I can't understand what is the cause of this calculation error? I have not found the explanations in the documentation and on the forum.
Here is simple code to reproduce this situation:
% area settings
gridSize = [200, 200];
cellSize = [0.005,0.005]; % [m]
medium.sound_speed = 333; % [m/s]
ts = [50, 100]; % tranceiver positions
amplitude = 10; % [Pa]
freq = 4000;
emitTime = 0.001; % [s]
modelingTime = 0.005; % [s]
source.p_mask = zeros(gridSize);
source.p_mask(ts(1),ts(2)) = 1;
sensor.mask = source.p_mask;
circleReflectorRadius = 12;
circleReflectorPosition = [150,100];
kgrid = makeGrid(gridSize(1), cellSize(1), gridSize(2), cellSize(2));
[kgrid.t_array, dt] = makeTime(kgrid, medium.sound_speed, [], modelingTime);
source.p = amplitude * toneBurst(1/dt, freq, ceil(freq*emitTime), 'Envelope', 'Rectangular', 'SignalLength', kgrid.Nt);
%source.p = filterTimeSeries(kgrid, medium, source.p, 'ZeroPhase', true);
disk = makeDisc(gridSize(1), gridSize(2), circleReflectorPosition(1), circleReflectorPosition(2), circleReflectorRadius);
medium.density = ones(gridSize) + disk*100;
% define the acoustic parameters to record
sensor.record = {'p'};
%% prepare display parameters
densityMask = medium.density - 1;
dm = source.p_mask + sensor.mask + densityMask;
dm(dm>0) = 1;
simulationParameters = {'DisplayMask', dm, 'PMLInside', false, 'PlotPML', false};
% run the simulation
sensor_data = kspaceFirstOrder2D(kgrid, medium, source, sensor, simulationParameters{:});
plot(kgrid.t_array, sensor_data.p);
Thank you.