Uploads from Me

    Monday, April 8, 2013

    numpy - Slew rate measuring

    If you know between what values your signal is transitioning, and your sounds is not too massive, you can basically compute the time variations among all crossings of 30% and all crossings of 70% and hold the smallest one:

    import numpy as np import matplotlib.pyplot as plt s100, s0 = 5, signal = np.concatenate((np.ones((25,)) * s100, s100 + (np.random.rand(twenty five) - .5) * (s100-s0), np.linspace(s100, s0, 25), s0 + (np.random.rand(25) - .5) * (s100-s0), np.types((twenty five,)) * s0)) # noritake rochelle platinum getaway emphasize Interpolate to discover crossings with thirty% and 70% of signal # The general linear interpolation formulation amongst (x0, y0) and (x1, y1) is: # y = y0 + (x-x0) * (y1-y0) / (x1-x0) # to find the x at which the crossing with y transpires: # x = x0 + (y-y0) * (x1-x0) / (y1-y0) # Due to the fact we are utilizing indices as time, x1-x0 == 1, and if the crossing # takes place inside the interval, then ) & (t70 < 1))[0] t70 = idx70 + t70[idx70] # compute all possible transition times, keep the smallest idx = np.unravel_index(np.argmin(t30[:, None] - t70), (len(t30), len(t70),)) print t30[idx[0]] - t70[idx[1]] # 9.6 plt. plot(signal) plt.plot(t30, [s0 + (s100-s0)*.3]*len(t30), 'go') plt.plot(t30[idx[0]], [s0 + (s100-s0)*.3], 'o', mec='g', mfc='None', ms=10) plt.plot(t70, [s0 + (s100-s0)*.7]*len(t70), 'ro') plt.plot(t70[idx[1]], [s0 + (s100-s0)*.7], 'o', mec='r', mfc='None', ms=10 ) plt.show()

    enter image description here

    No comments:

    Post a Comment