Closed mchitre closed 3 years ago
Here is some data about this
Transmission loss matrix is:
julia> x = transmissionloss(pm, tx, rx)
1000×200 Matrix{Float32}:
18.9392 17.1546 17.0453 17.27 … Inf Inf Inf Inf
18.9853 16.9233 17.2085 17.7871 Inf Inf Inf Inf
18.9174 16.6478 17.2531 18.1774 Inf Inf Inf Inf
18.9517 16.4985 17.3662 18.6668 Inf Inf Inf Inf
19.021 16.3625 17.4207 19.1879 82.2811 82.8019 83.327 83.8563
19.102 16.2447 17.4394 19.7327 … 77.1372 77.6714 78.2099 78.7527
19.215 16.172 17.4311 20.2512 74.259 74.8039 75.3531 75.9064
19.3495 16.1001 17.3774 20.8074 71.9296 72.488 73.0502 73.6163
⋮ ⋱
50.6657 50.5566 50.4011 50.219 47.8584 47.6233 47.4368 47.3121
50.6689 50.5552 50.3944 50.2074 47.8977 47.6699 47.4861 47.3586
50.6706 50.5522 50.3867 50.1954 47.9324 47.713 47.5337 47.4053
50.6708 50.5477 50.3777 50.1829 … 47.9621 47.752 47.5788 47.4516
50.6694 50.5415 50.3676 50.17 47.987 47.7866 47.6208 47.4966
50.6665 50.5338 50.3562 50.1565 48.0071 47.8164 47.6591 47.5397
50.662 50.5245 50.3437 50.1425 48.0227 47.8414 47.6932 47.5802
50.6562 50.5138 50.33 50.128 48.0341 47.8616 47.7229 47.6174
Code
using UnderwaterAcoustics
using Plots
env = UnderwaterEnvironment(
seasurface = Vacuum,
seabed = SandyClay,
ssp = SampledSSP(0.0:20.0:40.0, [1540.0, 1510.0, 1520.0], :smooth),
bathymetry = SampledDepth(0.0:50.0:100.0, [40.0, 35.0, 38.0], :linear)
)
pm = Bellhop(env; gaussian=true)
tx = AcousticSource(0.0, -5.0, 1000.0)
rx = AcousticReceiverGrid2D(1.0, 0.1, 1000, -40.0, 0.2, 200)
x = transmissionloss(pm, tx, rx)
Plots.plot(env; receivers=rx, transmissionloss=x)
Configuration:
(project) pkg> st
Status `~/Code/cognac_julia/project/Project.toml`
[91a5bcdd] Plots v1.19.3
[c3e4b0f8] Pluto v0.15.1
[0efb1f7a] UnderwaterAcoustics v0.1.1
Thanks @apatlpo, let me try to reproduce.
This doesn't seem to be a plotting problem, but rather of the results coming in from BELLHOP:
julia> x = transmissionloss(pm, tx, rx)
1000×200 Matrix{Float32}:
Inf Inf Inf Inf Inf … 15.7287 17.27 17.0453 17.1546 18.9392
Inf Inf Inf Inf Inf 15.6722 17.7871 17.2085 16.9233 18.9853
Inf Inf Inf Inf Inf 15.5425 18.1774 17.2531 16.6478 18.9174
Inf Inf Inf Inf Inf 15.5327 18.6668 17.3662 16.4985 18.9517
83.8563 83.327 82.8019 82.2811 81.7646 15.5771 19.1879 17.4207 16.3625 19.021
78.7527 78.2099 77.6714 77.1372 76.6073 … 15.668 19.7327 17.4394 16.2447 19.102
⋮ ⋱ ⋮
47.4053 47.5337 47.713 47.9324 48.1753 50.0093 50.1954 50.3867 50.5522 50.6706
47.4516 47.5788 47.752 47.9621 48.1953 … 49.9944 50.1829 50.3777 50.5477 50.6708
47.4966 47.6208 47.7866 47.987 48.211 49.98 50.17 50.3676 50.5415 50.6694
47.5397 47.6591 47.8164 48.0071 48.2228 49.9658 50.1565 50.3562 50.5338 50.6665
47.5802 47.6932 47.8414 48.0227 48.2315 49.9519 50.1425 50.3437 50.5245 50.662
47.6174 47.7228 47.8616 48.0341 48.2376 49.9383 50.128 50.33 50.5137 50.6561
You can see this has flipped columns as compared to results reported by @apatlpo. This is what flips the plot vertically.
Can you check what version of BELLHOP you are using @apatlpo ?
@mchitre how would you check the version of bellhop? and is there a way to get the plots oriented correctly?
this is what i am getting from our data with the source set at -5m
I'm using the latest version available from the Acoustics Toolbox website and labelled 2020_11_4
. I compiled the source code on a mac.
@elaprime To fix the orientation in your plots is simple:
Plots.plot(env; receivers=rx, transmissionloss=reverse(x; dims=2))
This should solve your problem for now.
However, we still need to track this issue and figure out why the inversion in the first place. @apatlpo / @elaprime can you please run this code (debug mode) on your machine and zip up the files in the displayed folder name (before pressing ENTER to delete intermediate files) with the BELLHOP inputs and outputs for me to examine?
using UnderwaterAcoustics
using Plots
env = UnderwaterEnvironment(
seasurface = Vacuum,
seabed = SandyClay,
ssp = SampledSSP(0.0:20.0:40.0, [1540.0, 1510.0, 1520.0], :smooth),
bathymetry = SampledDepth(0.0:50.0:100.0, [40.0, 35.0, 38.0], :linear)
)
pm = Bellhop(env; gaussian=true, debug=true)
tx = AcousticSource(0.0, -5.0, 1000.0)
rx = AcousticReceiverGrid2D(1.0, 0.1, 1000, -40.0, 0.2, 200)
x = transmissionloss(pm, tx, rx)
Thanks.
That was very helpful. I am now able to reproduce the problem, and fixing it should be possible.
The essential problem was a change in sorting of receiver depths in BELLHOP, somewhere between the July 2018 and October 2020 version (I don't have copies of all versions to check exactly when, and the change logs in BELLHOP aren't explicit about it). The change requires us to interpret the output shd
file flipped in the depth axis, if the BELLHOP version is 2020. I need to find a way to automatically detect this reliably, so that the Julia wrapper works with both versions.
Fixed.
@elaprime, @apatlpo Please try the latest master
:
pkg> add https://github.com/org-arl/UnderwaterAcoustics.jl#master
and see if the problem is fixed for you. After confirmation, I'll release.
works like a charm, thanks @mchitre !
If detecting which version of Bellhop is tricky, adding an option in the call to Bellhop in order to flip the depth axis output (for older versions of Bellhop) may suffice.
Thanks for the quick confirmation @apatlpo.
The current solution sorts the depths beforehand, and therefore avoids having to detect BELLHOP version. So this should be robust across older and newer BELLHOP binaries.
great to hear ! thx
Some users have reported inversion of depth-axis on transmission loss plot. See #28.