def spectrum_process(data, sfreq, cfreq, toffset, modulus, integration, bins, log_scale, zscale, detrend, title, clr):
""" Break spectrum by modulus and display each block. Integration here acts
as a pure average on the spectral data.
"""
if detrend:
dfn = matplotlib.mlab.detrend_mean
else:
dfn = matplotlib.mlab.detrend_none
win = numpy.blackman(bins)
if modulus:
block = 0
block_size = integration * modulus
block_toffset = toffset
while block < len(data) / block_size:
vblock = data[block * block_size:block * block_size + modulus]
pblock, freq = matplotlib.mlab.psd(
vblock, NFFT=bins, Fs=sfreq, detrend=dfn, window=win, scale_by_freq=False)
# complete integration
for idx in range(1, integration):
vblock = data[block * block_size + idx *
modulus:block * block_size + idx * modulus + modulus]
pblock_n, freq = matplotlib.mlab.psd(
vblock, NFFT=bins, Fs=sfreq, detrend=dfn, window=matplotlib.mlab.window_hanning, scale_by_freq=False)
pblock += pblock_n
pblock /= integration
yield spectrum_plot(pblock, freq, cfreq, block_toffset,
log_scale, zscale, title, clr)
block += 1
block_toffset += block_size / sfreq
else:
pdata, freq = matplotlib.mlab.psd(
data, NFFT=bins, Fs=sfreq, detrend=dfn, window=win, scale_by_freq=False)
yield spectrum_plot(pdata, freq, cfreq, toffset,
log_scale, zscale, title, clr)
评论列表
文章目录