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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10macOS 11.0+ ARM64

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

Uploaded CPython 3.9Windows x86-64

phastc-1.1.5-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.5-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.5.tar.gz.

File metadata

  • Download URL: phastc-1.1.5.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.5.tar.gz
Algorithm Hash digest
SHA256 78cc82d7534ac1f4aebad92a29ee936d621391a7350cc3746a1f149f27fcf5ee
MD5 818301e59f3e47cd5697b8a08acf2490
BLAKE2b-256 a8ad5707dad7ab5c239803aa892e82bfca17280f484e8764744690359045e893

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: phastc-1.1.5-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.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f7c2403e44fa8f6c97e65badb98f6bbfca9de6e1c8b38fe0c10533d80a27054c
MD5 01b6a7742a31be165a22a47510f9b930
BLAKE2b-256 a6cf7ac25ee4759c8d91b28bf8495e26a9ff72afff3826c4b6f6c0c45f8b3e0a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for phastc-1.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fb20f57d850ea61596ab763e89719db2dcb5fc639debb4ff80a99fca514b620d
MD5 ad94b208798f133b0b216bb4eebca63e
BLAKE2b-256 7319fdc29d1a797ac7808b66216b665f96c57fcff0dfea3c3ba008c7bd7da280

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for phastc-1.1.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 702192184bf5f60b60e045354917c6c516fcafb6b581a9d3742093de922827ab
MD5 c1329bf8ad4b68a5b79d1cd0c1b5562a
BLAKE2b-256 4994abf41346a9ac95d83c88b679d03ea2e4fb8e39a52e1934c8d883ac8d615d

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: phastc-1.1.5-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.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b5ceb21006f613624941a0fb20ba00516130fb889c13c9a97356545ce45e618b
MD5 13af958b6b85443a41676d19c3db9878
BLAKE2b-256 2e508c3dcbd7509c9436fb78aeccb8d5c91894bbe86ecf389c81883739df3381

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for phastc-1.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 eb86e9c16ffa02e4d92bd4c5b13f85e6a9d75696b2ef066fd642187fdbe50077
MD5 e6872b39e7654dab4018a65f97acceb1
BLAKE2b-256 64956b76976ee83d6df3adf2265080f846b1ba1b2fb2f7d816caa8c0c70e2ffb

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for phastc-1.1.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fe4528a1bc1b366e16905a986cba32e365eeef3293bca89f5b2742855c9c39f1
MD5 00140eae2330bf0fc775f1e5e18f6beb
BLAKE2b-256 a6be82097d2fbc63f0f5df2548aead355feb64988a416fa56c58be5d276b7013

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: phastc-1.1.5-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.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 26ec0cb438cc3324e7215161eb8498d46126022ac2fa680f260dfa2aabaa8012
MD5 49c5f0cddcd4dc86c39ad1f5e8a62bbc
BLAKE2b-256 c3bef13693e34c00f4b95948945a4de18482930835b6cfdac5c8034e085f76c3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for phastc-1.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5f4ef6609dcd63fdf1478d79f4f95e774950740c2338c89138fd88386cbd599a
MD5 70e48337f53d600b78e818efddd63a5f
BLAKE2b-256 a537cffdf47d1ef88f2171dce001f941346d3a4b0d2f57e89631fce93fbdc691

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for phastc-1.1.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b957f694453fa5a8289320f0b2a8d4b6c49b1a01aba0cc580c7ce91df61efe56
MD5 693e92fcfe89ea9acc272db2cf8e41b2
BLAKE2b-256 47d7e4c8d6b7fecceb4aaac875b8a0e079b697a6b88cf35e25ea35a34d6ba324

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: phastc-1.1.5-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.5-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 c9b2bb27dacd9a7c464d88909400940996175126b720cf16cc0be46b64d923c0
MD5 e8d88c402ff16545613435dba1209f9b
BLAKE2b-256 5b3fe38b026e795e39bed4bb5fdc180384e05116b43cc4c900fbb79f1a388956

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for phastc-1.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b6cf15eec66129d704130fe00cdf75e05b2ff7a48beaeee4f0b95b6ef98e89ca
MD5 2fd06e91eb61dd0607b319c2703e6e7f
BLAKE2b-256 80ce6ab9917a6569c1f4cd51cec9f5abb50e5a190513879584ace4b38faf9a3d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for phastc-1.1.5-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a842e8489a18402cf6259b7d0bbbb3818583566e03b29f1ed85a8921e70a573e
MD5 fa73e322a5765e361bf5c9e26a217aeb
BLAKE2b-256 e0505a897785dd6bbb527165c93842618ed4267f7f6e7925376726b458f45dcb

See more details on using hashes here.

Provenance

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