OceanParcels / virtualship

Authentic tool and teaching material about sea-based research
https://virtualship.oceanparcels.org/
MIT License
5 stars 1 forks source link

Instrument noise #58

Open surgura opened 3 months ago

surgura commented 3 months ago

Improve noise for instruments and add where it is missing.

ammedd commented 1 month ago

src/virtualship/make_realistic/ would be the place to start

ammedd commented 1 month ago

For the CTD the idea is to 1) add spiky noise to the top layers, 2) physical noise throughout the profile and 3) a tiny drift to distinguish the up- and downcast for example representing the flow of different water masses coming by. Sample code to be found in ctd_make_realistic.py

I'll look up old work for the ADCP later.

iuryt commented 2 weeks ago

ADCP

For the ADCP, we can introduce noise that varies based on the running standard deviation of the ship's heading. This means that the data will become noisy during sharp turns in the ship's trajectory. Instead of appearing as random noise, this often resembles a drift in the data. Additionally, we should consider that the horizontal offset between the ADCP transducer and the GPS, which is used to calculate the ship's speed, can introduce errors in the calculated ocean velocity. These errors primarily occur when the ship is maneuvering, particularly while turning.

image

There is also higher values very close to the bottom and the ringing at the surface. image

Maybe we could start a discussion and choose which of these should be prioritized.

This is very useful for this discussion: https://currents.soest.hawaii.edu/docs/adcp_doc/ADCP_INTERPRETATION/interpretation/index.html

CTD/XBT

If I understand correctly, we have several types of noise: surface-intensified exponential noise, depth-increasing noise, drift noise, and depth-dependent OpenSimplex noise. Therefore, we need to implement both up/downcast drift and spikes.

Additionally, is there a reason for the code duplication in _add_temperature_noise and _add_salinity_noise? We could create functions for each type of noise that can be applied to different variables. In this case, _add_temperature_noise would simply call functions like surface_noise, drift_noise, etc. What do you think?

https://github.com/iuryt/virtualship/blob/8cdf9319d53694984bbb05f349b4dfc3c7c50c88/src/virtualship/make_realistic/ctd_make_realistic.py#L60-L100