Source code for spike.Miscellaneous.downsample
#!/usr/bin/env python
# encoding: utf-8
"""
downsample2D.py
Created by MAD on 2011-04-14.
"""
from __future__ import print_function
import sys
import os
import numpy as np
from scipy.signal import decimate, lfilter, cheby1, medfilt, medfilt2d
from spike import NPKData
[docs]def downsample2D_med(data, n1=2, n2=2):
"""
takes data (a 2D) and generate a smaller dataset downsampled by factor (n1,n2) on each axis
the returned data-set is n1*n2 times smaller
- simply takes the mean
** Not tested on non powers of 2 **
"""
print("coucou1")
cls = type(data)
outp = cls(dim=2) # create data set of same type as input dataset
if n1 > 1:
yy = medfilt2d(data.buffer,(n1+1,n2+1))
outp.buffer = yy[n1/2:None:n1,n2/2:None:n2]
else:
yy = medfilt2d(data.buffer,(1,n2+1))
outp.buffer = yy[:,n2/2:None:n2]
NPKData.copyaxes(data,outp)
outp.adapt_size()
return outp
[docs]def downsample2D(data, n1=2, n2=2):
"""
takes data (a 2D) and generate a smaller dataset downsampled by factor (n1,n2) on each axis
then returned data-set is n1*n2 times smaller
- simply takes the mean
** Not tested on non powers of 2 **
"""
print("coucou2")
b1, a1 = cheby1(4, 0.05, 0.8/n1) # construct chebychev 4th order polynomials
b2, a2 = cheby1(4, 0.05, 0.8/n2)
cls = type(data)
outp = cls(buffer=np.zeros((data.size1/n1, data.size2/n2))) # create data set of same type as input dataset
for i in xrange(0, data.size1, n1):
temp = np.zeros(data.size2/n2)
for j in xrange(n1):
yy = lfilter(b2, a2, data.row(i+j).buffer) # filter along F2
temp += yy[n2/2:None:n2]
outp.buffer[i/n1,:] = (1.0/n1)*temp
NPKData.copyaxes(data,outp)
outp.adapt_size()
return outp
if __name__ == '__main__':
main()