How to find the inflection point in a noisy curve?

I have a noisy curve defined by a two-dimensional numpy array: mEPSC

As you can see, it has a first flat segment, followed by a phase of rise, peak and decay. I need to find the starting point of the ascent phase, indicated here by the red dot. How to do this in python?

+4
source share
2 answers

If the data looks like the example shows, you can evaluate the background and its noise level and apply some threshold to extract some of the data that is above the background. Example:

#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
from scipy.ndimage import gaussian_filter


def generate_fake_data():
    """Generate data that looks like an example given."""
    xs = np.arange(0, 25, 0.05)
    ys = - 20 * 1./(1 + np.exp(-(xs - 5.)/0.3))
    m = xs > 7.
    ys[m] = -20.*np.exp(-(xs - 7.)[m] / 5.)

    # add noise
    ys += np.random.normal(0, 0.2, xs.size)
    return xs, ys


def main():
    xs, ys = generate_fake_data()

    # smooth out noise
    smoothed = gaussian_filter(ys, 3.)

    # find the point where the signal goes above the background noise
    # level (assumed to be zero here).
    base = 0.
    std = (ys[xs < 3] - base).std()
    m = smoothed < (base - 3. * std)
    x0 = xs[m][0]
    y0 = ys[m][0]

    plt.plot(xs, ys, '.')
    plt.plot(xs, smoothed, '-')
    plt.plot(x0, y0, 'o')
    plt.show()


if __name__ == '__main__':
    main()

enter image description here

+6
source

, dt, " ". , . enter image description here

+4

Source: https://habr.com/ru/post/1536616/


All Articles