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.1.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.1-cp312-cp312-win_amd64.whl (41.9 MB view details)

Uploaded CPython 3.12Windows x86-64

phastc-1.1.1-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.1-cp312-cp312-macosx_11_0_arm64.whl (41.9 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

phastc-1.1.1-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.1-cp311-cp311-macosx_11_0_arm64.whl (41.9 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

phastc-1.1.1-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.1-cp310-cp310-macosx_11_0_arm64.whl (41.9 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

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

Uploaded CPython 3.9Windows x86-64

phastc-1.1.1-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.1-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.1.tar.gz.

File metadata

  • Download URL: phastc-1.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 62af93bdd3270656527dd7c0375a28045933000fedb867f715f08201a826ab70
MD5 12efb7b78be95d1d095f1312b43edd04
BLAKE2b-256 f787d74674003795d8b88b8c57ba832e0e2b9b601fac393fc3a161afe7895203

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.1.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.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: phastc-1.1.1-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.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 15a2dda4db561d43bf0cd92266ed3392758f10e12034c02f690ffce8f21a7d01
MD5 f4eaa625973e1e139d2393808629f169
BLAKE2b-256 4be4e61df820f62fc992d1344d2ff0180c2338a85ae2eb6115c9c9919c5da25c

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.1-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.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for phastc-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 91710fc92fff20d8ecafa3b9920204ac45d7e78e8df645593de0a465277f52ab
MD5 4fd170cfbd49cb14b2964aec8ee8ea3b
BLAKE2b-256 ef5406686e1d0ebc62bf66a8950f5043d1e9f352a48ba89a926e6fb250420392

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.1-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.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for phastc-1.1.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f35b8e2897b72a2ea7786111ec8bb443e054fca1ae9368ab22fdbe6c21e49428
MD5 0a4a38c09bd995ec4ab55d15e1fea24e
BLAKE2b-256 5dddda52790fe25131fa263c8dc5686914ae93b922dc0e853333544ec462eab1

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.1-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.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: phastc-1.1.1-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.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 039b4dbf7098aaed252fdc3d4d76498b5063630759eed060e9b013160cfd04d8
MD5 b8d8a4f76330ceeec04b37b847224236
BLAKE2b-256 8c897d3a451bb1832494e1c96b8fef5328fc86470ef096a62b8a3ef972bbdc91

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.1-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.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for phastc-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 aec598e5ded35a4e955d7c6a961b11e542b8d85b8f4c3a084456245f3e9ab86d
MD5 f54b905c50ba2c9ce195159b0b5af149
BLAKE2b-256 e3ad39f2e16a324a84b95363ef83499cd7ed408692baf749a2212d3ff4640ec7

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.1-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.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for phastc-1.1.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 53633a65a75e052ed762eecd42a6416115345260480427b01a358144e6abec59
MD5 6c74312eaf4ec744f2f3b1dc8828410f
BLAKE2b-256 dd0a3605497b263d3b2c92b499065d9ad66261944e0240a3ae942f14d0bb9265

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.1-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.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: phastc-1.1.1-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.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d4054354989eacf19f9df902b18ffcc86c6dedc4c14ad5069b3277ec986aec10
MD5 31406c6c864e66658f4c3f9afb81a359
BLAKE2b-256 04fc4b70bfa5ac62f231e888d3486ad1afeee78483c8849c04ae2faab98aef6d

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.1-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.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for phastc-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 58140b4b912ddfc6a81a938767a066fd3d68f59a9285d46d493f32cb3b275153
MD5 0a11404fef39f1b19bbe30b02ebd874d
BLAKE2b-256 1af465fdb291741789d41f242e12292ea7ecafe24d2c75e60bdce8ac85085222

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.1-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.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for phastc-1.1.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e85aa55f9fd640bb4a7be139044411680f7b9112fc92b9db0579dd77625000db
MD5 d69aa674539b6c8542bc05a25dbeaa4e
BLAKE2b-256 7075d79f3e8e549d95a5bd9922dc83c581da2c0e1f67b07c8d79dd710c6cefe4

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.1-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.1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: phastc-1.1.1-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.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 1e5d67e5750a089e2a1c02f6f4171adf64eff0e0a047b2d75827c456ea3d4a84
MD5 ff8422b0d0e2254d4d7fbbfe799cb57c
BLAKE2b-256 36d8236247386f3e2b4a79f0baba0ff6f4b70b133262beaca0442018d760ca14

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.1-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.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for phastc-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 434cd4ba8c15d7e9824c3ffab3dcc28b78c2e973bffe41734792be9048160b66
MD5 a79145f7f1c103c566c006f7cc37dd4d
BLAKE2b-256 aa599d85d7bc635b302355f7bbad0da0851f65c1e9871bc1817e52d480783a31

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.1-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.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for phastc-1.1.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2161780c0973edc46dd1afa993e8122987d2dd08d4fa10befd3bb15c6d445535
MD5 9e48062153318629efb5f7fca610afde
BLAKE2b-256 7eb541c271622888c5c7b127c136d304939df495165ed31aae8501ba64b4f517

See more details on using hashes here.

Provenance

The following attestation bundles were made for phastc-1.1.1-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