Skip to main content

Phenomological Adaptive STochastic auditory nerve fiber model

Project description

Phenomological Adaptive STochastic auditory nerve fiber model

test-python

This repository contains an archive implementation of a phenomenological auditory nerve fiber model. The model is implemented in C++, with a runtime interface for Python. It can be easily installed via pip:

pip install phastc

The model has been tested and built for python versions 3.9-12, and is compiled using g++ for MacOS and Linux and msvc on Windows.

Running PHAST

The PHAST model simulates the response of a single auditory nerve fiber to electrical stimulation. As such, the model revolves arround two main inputs, the stimulus, and a list of fibers. These are both managed by objects in Python and explained in detail in the following sections.

Pulse Train

The pulse train encodes the stimulus to be used in the simulation. We differentiate between a ConstantPulseTrain object and a PulseTrain object. The former can be used when the stimulation has a constant interval and amplitude, and can be a lot more efficient. The latter should be used whenever each pulse in the pulse train can be different, for example when using stimuli produced by a speech coding strategy. The PulseTrain has the following signature:

stimulus = PulseTrain(
    pulse_train: np.ndarray = ...,
    time_step: float = 1e-6,
    ...
)

Only the first parameter is required, and should be a numpy array (matrix) of shape n electrodes x time steps. Then each element of the matrix encodes the amplitude of a pulse at given timestep for a given electrode. Ensure that the time steps of the matrix match the time_step parameter.

The ConstantPulseTrain has the following signature:

stimulus = ConstantPulseTrain(
    duration: float = ...,
    rate: float = ...,
    amplitude: float = ...,
    time_step: float = 1e-6,
)

Here, the duration denotes the total length in seconds of the pulse train, and rate the pulse rate, i.e. number of pulses per second. Each pulse in this pulse train has the same amplitude, specified by amplitude. Again, time_step encodes the time step of the pulse train. Note that this object can only be used for single electrode stimulation.

Fiber

The Fiber object encodes a single fiber to be analyzed by the PHAST model. Many can be analyzed at the same time, so often a list of several fibers can be considered at any given time. The object has the following signature:

fiber = Fiber(
    i_det: np.ndarray = ...,
    spatial_constant: np.ndarray = ...,
    sigma: np.ndarray = ...,
    fiber_id: int = ...,
    sigma_rs: float = ...,
    refractory_period: RefractoryPeriod = ...,
    decay: Decay = ...,
    store_stats: bool = False,
    spont_activity: float = 0.0
)

Here i_det, spatial_constant, sigma, are all vectors of length number of electrodes, which should match the number of electrodes in the PulseTrain used in stimulation. For i_det, this defines the deteriministic threshold after which the fiber spikes, for a pulse from a given electrode. The spatial_constant defines an electrode specific spatial constant, which is used to scale stimulation. The sigma parameter is another electrode specific parameter, which is the relative spread per i_det, i.e. relative_spread * i_det. fiber_id encodes a unique identifier, specified by the used to attach to the fiber. sigma_rs is used for stochasticy between trials. store_stats defines whether all statistics should be stored, such as the refractoriness at each time step. This defaults to False, and should be used with caution, as this significantly increases memory usage. spont_activity is an experimental feature, which denotes the spontaneous firing rate of the fiber, defined in spikes/s. RefractoryPeriod is a parameter wrapper for handling both absolute and relative refractoriness. It can be defined as follows, and if not given explicitly to the Fiber, the following default values are used:

ref = RefractoryPeriod(
    absolute_refractory_period: float = 4e-4,
    relative_refractory_period: float = 8e-4,
    sigma_absolute_refractory_period: float = 0.0,
    sigma_relative_refractory_period: float = 0.0
)

Decay

Several different versions of the model can be used, which use a different model for controlling spike rate decay.

  • Exponential: The first version of the model, as used in: van Gendt, Margriet J., et al. "A fast, stochastic, and adaptive model of auditory nerve responses to cochlear implant stimulation." Hearing research 341 (2016): 130-143. This model uses an exponential decay function.
  • Power Law: In a subsequent paper, the exponential decay was replaced by a power law function, to better approximate long duratioin fiber behaviour, presented in: van Gendt, Margriet J., et al. "Short and long-term adaptation in the auditory nerve stimulated with high-rate electrical pulse trains are better described by a power law." Hearing Research 398 (2020): 108090.
  • Leaky Integrator: In the latest paper, the power law decay was replaced by a leaky integrator, which was shown to approximate long duration fiber behavoir with comparable accuracy as the power law decay function, but using significantly less computational resources. This version should be prefered when performing large scale experiments with PHAST. The model was presented in: de Nobel, Jacob, et al. "Biophysics-inspired spike rate adaptation for computationally efficient phenomenological nerve modeling." Hearing Research 447 (2024): 109011.

To use any of the previously mentioned versions of the PHAST model, the decay parameter needs to be specific when constructing a Fiber object with the correct Decay object. For the exponential decay model, we need to pass:

decay = Exponential(
    adaptation_amplitude: float = 0.01,
    accommodation_amplitude: float = 0.0003,
    sigma_adaptation_amplitude: float = 0.0,
    sigma_accommodation_amplitude: float = 0.0,
    exponents: list[tuple] = [(0.6875, 0.088), (0.1981, 0.7), (0.0571, 5.564)],
)

For the power law model, the following is required:

decay = Powerlaw(
    adaptation_amplitude: float = 2e-4,
    accommodation_amplitude: float = 8e-6,
    sigma_adaptation_amplitude: float = 0.0,
    sigma_accommodation_amplitude: float = 0.0,
    offset: float = 0.06,
    exp: float = -1.5
)

Finally, for the model which uses the leaky integrator, the following decay object needs to be passed:

decay = LeakyIntegratorDecay(
    adaptation_amplitude: float = 7.142,
    accommodation_amplitude: float = 0.072,
    adaptation_rate: float = 0.014,
    accommodation_rate: float = 19.996
)

phast

Then finally, we can combine the above to run the phast model (for a single fiber):

fiber_stats = phast(
    [fiber],                        # A list of Fiber objects
    pt,                             # A PulseTrain object, either PulseTrain or ConstantPulseTrain
    n_jobs = -1,                    # The number of parallel cores to use (-1 is all available)
    n_trials = 1                    # The number of trials to generate for each fiber
    use_random = True               # Whether the experiment should use randomness
)

This yields a list of FiberStats objects which contains information about the experiment, such as the occurence of spikes (e.g.fiber_stats[0].spikes), or other statistics, when store_stats has been enabled. In order to get consitent results when enabling randomness i.e. when use_random = True, a proper seed should be set, using phast.set_seed(seed_value), similar to how one would use np.random.seed.

Creating Neurograms

We include a helper to easily aggregate FiberStats data into neurograms in matrix form. To do this, the following can be used:

neurogram = Neurogram(
    fiber_stats, 
    bin_size: float,    # The required binsize of the neurogram, every spike falling in the bin is summed
)

This then creates a neurogram matrix, which can be accessed via the data member, i.e. neurogram.data.

We provide the following plotting utility to easiliy visualize these neurograms:

fig, ax = plt.subplots()
plot_neurogram(
    neurogram,
    ax=ax,      # Optional
    fig=fig     # Optional
)

Speech Coding Strategies

Note that we include several options for sound encoding and integrated with PHAST, see the folder phast/scs for more information.

Citation

@article{de2024biophysics,
title = {Biophysics-inspired spike rate adaptation for computationally efficient phenomenological nerve modeling},
journal = {Hearing Research},
volume = {447},
pages = {109011},
year = {2024},
issn = {0378-5955},
doi = {https://doi.org/10.1016/j.heares.2024.109011},
url = {https://www.sciencedirect.com/science/article/pii/S0378595524000649},
author = {Jacob {de Nobel} and Savine S.M. Martens and Jeroen J. Briaire and Thomas H.W. Bäck and Anna V. Kononova and Johan H.M. Frijns},
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

phastc-1.1.4.tar.gz (41.7 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

phastc-1.1.4-cp312-cp312-win_amd64.whl (41.9 MB view details)

Uploaded CPython 3.12Windows x86-64

phastc-1.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (42.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

phastc-1.1.4-cp312-cp312-macosx_11_0_arm64.whl (41.9 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

phastc-1.1.4-cp311-cp311-win_amd64.whl (41.9 MB view details)

Uploaded CPython 3.11Windows x86-64

phastc-1.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (42.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

phastc-1.1.4-cp311-cp311-macosx_11_0_arm64.whl (41.9 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

phastc-1.1.4-cp310-cp310-win_amd64.whl (41.9 MB view details)

Uploaded CPython 3.10Windows x86-64

phastc-1.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (42.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

phastc-1.1.4-cp310-cp310-macosx_11_0_arm64.whl (41.9 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

phastc-1.1.4-cp39-cp39-win_amd64.whl (41.9 MB view details)

Uploaded CPython 3.9Windows x86-64

phastc-1.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (42.0 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

phastc-1.1.4-cp39-cp39-macosx_11_0_arm64.whl (41.9 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

File details

Details for the file phastc-1.1.4.tar.gz.

File metadata

  • Download URL: phastc-1.1.4.tar.gz
  • Upload date:
  • Size: 41.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for phastc-1.1.4.tar.gz
Algorithm Hash digest
SHA256 9663ae962f7f3160d688325f5f1ebeb39aecef4f08745d4bcc1d5605ef590e8e
MD5 ed078486a97a68a414c33a665d3b685e
BLAKE2b-256 5433b46ecaa1ab253a6218eea95d5ee051f997a48a4e6a7532af962e6d9ae0f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.4.tar.gz:

Publisher: python-publish.yml on jacobdenobel/PHAST

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file phastc-1.1.4-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: phastc-1.1.4-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 41.9 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for phastc-1.1.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 751890f3b770564ad00d071cccbdaa573877ede0ca1ff66a5fb2c8e76de4a9c5
MD5 4261f3c49b0778b0c989cddbde5ee362
BLAKE2b-256 88d4e9f7a5dd1f812ed935dd34617a741666b42d97a31bc149cc082099401317

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.4-cp312-cp312-win_amd64.whl:

Publisher: python-publish.yml on jacobdenobel/PHAST

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file phastc-1.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for phastc-1.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b7f804067de96e6375a169b34a63d361ee146049072520aa954f58acdabab6c1
MD5 d0baf20cb22b863fac045240a36f8296
BLAKE2b-256 9876bb7e063235f202d22d280df926f6e3c9ee0824145aafd2055bd0bc0e52de

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: python-publish.yml on jacobdenobel/PHAST

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file phastc-1.1.4-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for phastc-1.1.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9247a3d54cd23e3465b73781d476bf7019f8702b9d3c3908f3db6f1174a0ea08
MD5 d1b27d39a72c87cd5544958a8cb03302
BLAKE2b-256 abd37929b2dede3d19576ec76e14e72ca7d10be2be49f7e42452a487bb56edc1

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.4-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: python-publish.yml on jacobdenobel/PHAST

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file phastc-1.1.4-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: phastc-1.1.4-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 41.9 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for phastc-1.1.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 9a01708aa3fdad84aeed0c6d21a18ef5ab490394ef1388c5833e359b5d6150ee
MD5 e29e1b03acce99d3775246328da8a1d6
BLAKE2b-256 07bc359511cd3a3fed374ae18ccd713222692377fbc5aadcd3762336721684d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.4-cp311-cp311-win_amd64.whl:

Publisher: python-publish.yml on jacobdenobel/PHAST

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file phastc-1.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for phastc-1.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1289838f6f7d7fe99dd2055c043739c1b2563e4d41b7192bcb992df0c99d3bc3
MD5 b77c1e279d9d931f8a94ec3167db60b0
BLAKE2b-256 677b41327d43cb9a1184d7214d7faf33ef44151ed7ce5b1d9509de134a3a82ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: python-publish.yml on jacobdenobel/PHAST

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file phastc-1.1.4-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for phastc-1.1.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 19adb722e5202f0441fe37a452d8452acf264475990fc1f5df74062a715470c6
MD5 5c4096327129b534acd236c9aea54a7f
BLAKE2b-256 fa524b9252bef14f6211eb046920eaf7b27327f8c6e1a18e8e22d75f3045a097

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.4-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: python-publish.yml on jacobdenobel/PHAST

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file phastc-1.1.4-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: phastc-1.1.4-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 41.9 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for phastc-1.1.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 82abd3ed3c60e5df4193cf2a3cfd77a4424b8ab22cab5914bf34942e05bddea5
MD5 c6018a1612c493d874b71538f56419fe
BLAKE2b-256 c4c94fbab4729cbf81fa19be27a803ff0517eaf80c4e7fa1b14c81da509152b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.4-cp310-cp310-win_amd64.whl:

Publisher: python-publish.yml on jacobdenobel/PHAST

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file phastc-1.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for phastc-1.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4e255bd373ee0f7c6a9bd5cfc8015e1c0b1de6165f8c89e78dd6e7c3290eb374
MD5 df7ff0b534d7d9ba358773f7ddba8edf
BLAKE2b-256 b0f15eed0c6c0262b7ff23e58a027914b973605b282ca3ec19b05ae425ff16ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: python-publish.yml on jacobdenobel/PHAST

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file phastc-1.1.4-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for phastc-1.1.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 04ab0dcce3a8642a11cd4803b9a9ec55d7ceb43e5d9de6aad3639d860851e3f6
MD5 33fcd676c9797266ea62391bc2e5a58a
BLAKE2b-256 0b20ef69f9a36201d54eae1ecc09fa31056e88c1538b43ebd8d4b882d939c926

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.4-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: python-publish.yml on jacobdenobel/PHAST

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file phastc-1.1.4-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: phastc-1.1.4-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 41.9 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for phastc-1.1.4-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 02582c93e659bac5c2f0871773ec69e119c09bda1489a42ba84864d38d629423
MD5 b8d34f374a033d079696f7da023b61aa
BLAKE2b-256 731f017512c78caa258fdaa07557aafb3b946861ffe9fb7574445a1b8d06950a

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.4-cp39-cp39-win_amd64.whl:

Publisher: python-publish.yml on jacobdenobel/PHAST

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file phastc-1.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for phastc-1.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 18b7ede52bebfd996719b63ed372c5203089c13d7ae4fc1661619084c38c8284
MD5 d858d2f74b482a571eab52789e78382b
BLAKE2b-256 d8c71714f381ce674576122a5162e819b24c2b6e688176a508edd29a9fc17b6e

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: python-publish.yml on jacobdenobel/PHAST

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file phastc-1.1.4-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for phastc-1.1.4-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 52a723345435a859ff0d52f0504ab0a80c6fc5e0527ea3e4c4022382c37de3aa
MD5 b79937bfc2f629c24b450f4a53875b6b
BLAKE2b-256 fbc42da91375ab04013b80e5d0321e017a77e22009bb5808508e3a05a8922dfe

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.4-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: python-publish.yml on jacobdenobel/PHAST

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page