AcFDTD.jl
3D Room Acoustics Finite Difference Time Domain (FDTD) Simulator
Install / Use
/learn @nantonel/AcFDTD.jlREADME
AcFDTD (this library is unmantained)
Finite Difference Time Domain (FDTD) method for room acoustic simulation
Installation
From the Julia command line hit:
Pkg.clone("https://github.com/nantonel/AcFDTD.jl.git")
Once the package is installed you can update it along with the others issuing Pkg.update() in the command line.
Usage
Import the package by typing using AcFDTD.
First you need to specify an acoustic environment
and FDTD scheme:
using AcFDTD
X = 0.1 # spatial sampling
env = FDTDEnv(X,IISO()) # create new acoustic env with default values
where IISO() returns the Interpolated Isotropic scheme.
Alternatively one can choose a samplng frequency
instead of a spatial sampling:
Fs = 2000. # sampling frequency in Hz
env = FDTDEnv(IISO(),Fs; c = 340) # create new acoustic env with default values
notice that in the latter line the speed of sound was
chosen to be 340 m/s.
By default this is set to 343 m/s.
Set the acoustic impedance ξ and room geometry room geometry:
ξ = [50.;50.;100.;30.;50.;50.]; # [ ξx1 ; ξx2 ; ξy1 ; ξy2 ; ξz1 ; ξz2 ]
# [front wall; rear wall; left wall; right wall; floor; ceiling]
geo = CuboidRoom(10, 11, 12, ξ, env)
The first three parameters
indicate the number of spatial samples
of the x, y and z directions.
Alternatively one can specify
the room dimensions in meters:
geo = CuboidRoom(4., 5., 3., ξ, env)
which are then approximated on the grid.
Set the number of time steps Nt
Create a band-limited sound source
with e.g. the DSP package:
using DSP
Nt = round(Int,env.Fs) # number of time steps (1 sec)
s = zeros(Nt) # source signal
s[3] = 1
f2 = geo.env.Fs/2*0.175 # cut-off frequency of source
filt!(s,digitalfilter(Bandpass(10,f2;fs = geo.env.Fs),Butterworth(5)),s)
Define the position of microphone and sound sources:
xr = [(2, 2, 2), (2, geo.Ny-1, geo.Nz-1)] # mic positions
xs = (geo.Nx-1, geo.Ny-1, geo.Nz-1) # sound source position
#positions must be Tuple{Int,Int,Int} or Array{Tuple{Int,Int,Int},1}
Now type:
p = fdtd(xr,xs,Nt,geo,s)
to obtain the sound pressure of the microphones.
For more details on the methods type:
?fdtd
Credits
AcFDTD.jl is developed by Niccolò Antonello at KU Leuven, ESAT/Stadius.
Related Skills
node-connect
351.8kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
110.9kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
351.8kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
351.8kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
