Preambule:
I'm designing a sound model for my small submarine game. Model is running on the server, and I want to present the client with a mono-channel wav-stream from his hydrophone (20kHz discretization should suffice, I target 20Hz-10kHz band). I want that signal to be relatively-realistic. Specifically, I need to account for the fact that water dissipates high frequencies much faster.
Sound model:
I plan to pre-generate (with help of some RNG and IFFT) raw propeller time-domain sound sample from it's intensity spectrum. Then I plan to amplitude-modulate it with shifted shaft rpm x propeller blade count sine wave to get that propeller beat. At this point i need to materialize that signal on the player's sensor. It will probably involve two filters:
- Some filter (wich is the filter in question) wich will account for water dissipating signal energy.
- Bandpass filter, wich corresponds to this particular sensor's sensitivity band.
- Simple amplitude multiplication to account for range, sensor directivity etc.
According to R.J. Urik "Principles of Underwater Sound", on the distance of r meters from the target, band level (dB) in frequency bin f of such sound can be approximated using following formula:
[1]: ResultBL = SourceBL - 10 * log10(r * r) - r * F(f)
or without wave front expansion term (wich is trivial):
[2]: ResultBL = SourceBL - r * F(f)
where F(f) is some smooth monotonic function (big radical with multiple squared frequencies and constants) of frequency.
The questions (all about this one filter, or lack thereof):
- Is it possible to design a time-domain digital filter for given range r, that implements\approximates the signal distortion [2]?
- What type of filter would you recommend? Problem is not realtime, but calculations should be fast. I'm not limited to causal filters, so I'm sensing something like non-causal IIR?
- What algorithms are applicable to this problem.
- If such algorithm involves transfer function, how should I transform\approximate F(f) term in it?
- Will it be fast? What factors affect it's speed?
- Will such filter work good in the whole band (20Hz-10kHz)?
- Will such filter work well on large intensity level variances, e.g. on both very weak and very strong signals?
- Is such synthesis computationally-expensive?
Thank you.