# `Monty.Frameworks.Models.SensorModules.MessageNoise`
[🔗](https://github.com/d-led/ex.tbp.monty/blob/v0.1.0/packages/ex_tbp_monty_core/lib/monty/frameworks/models/sensor_modules/message_noise.ex#L1)

Something that adds noise to a percept, or does not.

Mirrors `tbp/monty/frameworks/models/sensor_modules.py::MessageNoise`, the
protocol a sensor module's noise layer answers.

Monty passes a numpy `RandomState` that the noise mutates as it draws. Here the
stream is an argument instead: a noise layer draws from it and answers a
percept. It is the episode's one stream (`Monty.Random.Stream`), the same one
the motor system and the goal generators draw from, because it is the same one
in Monty — so the draws a noisy percept makes move the numbers of everything
stepped after it (`docs/monty-differences.md` §2.1).

# `rng`

```elixir
@type rng() :: GenServer.server()
```

# `t`

```elixir
@type t() :: struct()
```

# `call`

```elixir
@callback call(t(), Monty.Cmp.Message.t(), rng()) :: Monty.Cmp.Message.t()
```

The percept, noisier.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
