Fitting of 1/f PSD.
Python source code: plot_oof_solution.py
def oof_model(freq, param):
    """
    1/f noise model
        param[0] : noise standard deviation
        param[1] : knee frequency
        param[2] : alpha
    freq : array of frequency
    """
    sigma, fknee, alpha = param
    return sigma**2 * (1 + (fknee / freq)**alpha)
def compute_residuals(param, observation, freq):
    """
    Return array: observation - model
    """
    model = oof_model(freq, param)
    residual = np.log(observation / model)
    print("residual: ", np.sum(residual**2))
    return residual
# fit with scipy optimize, leastsq() function
param_true = np.array([np.std(signal), 1, 1.2])
param_guess = param_true * np.random.uniform(0.5, 2, 3)
ret_lsq = spo.leastsq(compute_residuals, param_guess, args=(spectrum, freq),
                      full_output=True)