model of DCN pyramidal neuron
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

70 lines
3.1 KiB

"""
Test sounds and plot waveforms.
This script tests the sound waveform generator for a variety of sounds
"""
import sys
import numpy as np
import pyqtgraph as pg
from cnmodel.util import sound
from collections import OrderedDict
from scipy import signal
class test_sounds():
def __init__(self):
cf = 2e3
Fs = 100e3 # sample frequency
level = 80.
seed = 34978
fmod = 10.
dmod = 100.
win = pg.GraphicsWindow()
pipwin = win.addPlot(title='sound pip', row=0, col=0)
pipmodwin = win.addPlot(title='100 % SAM modulated pip', row=1, col=0)
noisewin = win.addPlot(title='WB noise', row=2, col=0)
noisemodwin = win.addPlot(title='100 % SAM Modulated WB Noise', row=3, col=0)
clickwin = win.addPlot(title='clicks', row=4, col=0)
wavewin = win.addPlot(title='wavefile', row=5, col=0)
pipwins = win.addPlot(title='sound pip Spec', row=0, col=1)
pipmodwins = win.addPlot(title='100 % SAM modulated pip', row=1, col=1)
noisewins = win.addPlot(title='WB noise', row=2, col=1)
noisemodwins = win.addPlot(title='100 % SAM Modulated WB Noise', row=3, col=1)
clickwins = win.addPlot(title='click spec', row=4, col=1)
wavewins = win.addPlot(title='Wavefile spec', row=5, col=1)
stims = OrderedDict([('pip', (pipwin, sound.TonePip)), ('pipmod', (pipmodwin, sound.SAMTone)),
('noise', (noisewin, sound.NoisePip)), ('noisemod', (noisemodwin, sound.SAMNoise)),
('clicks', (clickwin, sound.ClickTrain)),
('wavefile', (wavewin, sound.ReadWavefile))])
specs = OrderedDict([('pip', (pipwins, sound.TonePip)), ('pipmod', (pipmodwins, sound.SAMTone)),
('noise', (noisewins, sound.NoisePip)), ('noisemod', (noisemodwins, sound.SAMNoise)),
('clicks', (clickwins, sound.ClickTrain)),
('wavefile', (wavewins, sound.ReadWavefile))])
for stim in stims:
print(stim)
if stim in ['clicks']:
wave = stims[stim][1](rate=Fs, duration=1.0, dbspl=level,
click_duration=1e-4, click_starts=1e-3*np.linspace(10, 500, 50))
# wave = stims[stim][1](rate=Fs, dbspl=level, click_interval=10., nclicks=10,
# click_duration=1e-4, click_start=10.)
elif stim in ['wavefile']:
wave = stims[stim][1](wavefile='cnmodel/examples/stim172_geese.wav', rate=Fs, dbspl=level)
wave.sound # force generation here
print('time shape test: ', wave.time.shape)
else:
wave = stims[stim][1](rate=Fs, duration=1.0, f0=cf, dbspl=level,
pip_duration=0.8, pip_start=[10e-3], ramp_duration=2.5e-3,
fmod=fmod, dmod=dmod, seed=seed)
stims[stim][0].plot(wave.time, wave.sound)
f, Pxx_spec = signal.periodogram(wave.sound, Fs) # window='flattop', nperseg=8192, noverlap=512, scaling='spectrum')
specs[stim][0].plot(f, np.sqrt(Pxx_spec))
if __name__ == '__main__':
test_sounds()