updated spectral.py
This commit is contained in:
parent
997d737c40
commit
752837f4ec
13
spectral.py
13
spectral.py
@ -157,7 +157,7 @@ def spectra(stimulus, spikes, dt, nfft):
|
|||||||
return freq, pss, np.mean(prr, 0), np.mean(prs, 0)
|
return freq, pss, np.mean(prr, 0), np.mean(prs, 0)
|
||||||
|
|
||||||
|
|
||||||
def susceptibilities(stimulus, spikes, dt=0.0005, nfft=2**9):
|
def susceptibilities(stimulus, spikes, dt=0.0005, nfft=2**9, nmax=0):
|
||||||
""" Stimulus- and response spectra up to second order.
|
""" Stimulus- and response spectra up to second order.
|
||||||
|
|
||||||
Compute the complex-valued transfer function (first-order
|
Compute the complex-valued transfer function (first-order
|
||||||
@ -202,6 +202,8 @@ def susceptibilities(stimulus, spikes, dt=0.0005, nfft=2**9):
|
|||||||
Sampling interval of stimulus and resolution of the binary spike train.
|
Sampling interval of stimulus and resolution of the binary spike train.
|
||||||
nfft: int
|
nfft: int
|
||||||
Number of samples used for each Fourier transformation.
|
Number of samples used for each Fourier transformation.
|
||||||
|
nmax: int
|
||||||
|
Maximum number of FFT segments to be used. If 0, use all segement.
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
@ -228,7 +230,6 @@ def susceptibilities(stimulus, spikes, dt=0.0005, nfft=2**9):
|
|||||||
f0 = len(freqs)//4
|
f0 = len(freqs)//4
|
||||||
f1 = 3*len(freqs)//4
|
f1 = 3*len(freqs)//4
|
||||||
segments = range(0, len(stimulus) - nfft, nfft)
|
segments = range(0, len(stimulus) - nfft, nfft)
|
||||||
scale = dt/nfft/n
|
|
||||||
# stimulus:
|
# stimulus:
|
||||||
p_ss = np.zeros(len(freqs))
|
p_ss = np.zeros(len(freqs))
|
||||||
fourier_s = np.zeros((len(segments), len(freqs)), complex)
|
fourier_s = np.zeros((len(segments), len(freqs)), complex)
|
||||||
@ -238,6 +239,9 @@ def susceptibilities(stimulus, spikes, dt=0.0005, nfft=2**9):
|
|||||||
fourier_s[j] = np.fft.fftshift(fourier_s[j])
|
fourier_s[j] = np.fft.fftshift(fourier_s[j])
|
||||||
p_ss += np.abs(fourier_s[j]*np.conj(fourier_s[j]))
|
p_ss += np.abs(fourier_s[j]*np.conj(fourier_s[j]))
|
||||||
n += 1
|
n += 1
|
||||||
|
if nmax > 0 and n >= nmax:
|
||||||
|
break
|
||||||
|
scale = dt/nfft/n
|
||||||
p_ss *= scale
|
p_ss *= scale
|
||||||
# response spectra:
|
# response spectra:
|
||||||
time = np.arange(len(stimulus))*dt
|
time = np.arange(len(stimulus))*dt
|
||||||
@ -260,6 +264,11 @@ def susceptibilities(stimulus, spikes, dt=0.0005, nfft=2**9):
|
|||||||
p_rs += np.conj(fourier_s[j])*fourier_r
|
p_rs += np.conj(fourier_s[j])*fourier_r
|
||||||
p_rss += fourier_s12*fourier_r[fsum_idx]
|
p_rss += fourier_s12*fourier_r[fsum_idx]
|
||||||
n += 1
|
n += 1
|
||||||
|
if nmax > 0 and n >= nmax:
|
||||||
|
break
|
||||||
|
if nmax > 0 and n >= nmax:
|
||||||
|
break
|
||||||
|
scale = dt/nfft/n
|
||||||
return freqs[f0:f1], p_ss[f0:f1], p_rr[f0:f1]*scale, p_rs[f0:f1]*scale, p_rss[f0:f1, f0:f1]*dt*scale, n
|
return freqs[f0:f1], p_ss[f0:f1], p_rr[f0:f1]*scale, p_rs[f0:f1]*scale, p_rss[f0:f1, f0:f1]*dt*scale, n
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user