小编Ash*_*ish的帖子

Scipy FFT频率分析非常嘈杂的信号

我有嘈杂的数据,我想要计算频率和幅度.每1/100秒收集样品.从趋势来看,我认为频率为~0.3

在此输入图像描述

当我使用numpy fft模块时,我最终得到非常高的频率(36.32 /秒),这显然是不正确的.我尝试过滤数据pandas rolling_mean以消除fft之前的噪音,但这也无效.

import pandas as pd
from numpy import fft
import numpy as np
import matplotlib.pyplot as plt

Moisture_mean_x = pd.read_excel("signal.xlsx", header = None)
Moisture_mean_x = pd.rolling_mean(Moisture_mean_x, 10) # doesn't helps
Moisture_mean_x = Moisture_mean_x.dropna()
Moisture_mean_x = Moisture_mean_x -Moisture_mean_x.mean()
frate = 100. #/sec           
Hn = fft.fft(Moisture_mean_x)
freqs = fft.fftfreq(len(Hn), 1/frate)
idx = np.argmax(np.abs(Hn))
freq_in_hertz = freqs[idx]
Run Code Online (Sandbox Code Playgroud)

有人可以指导我如何解决这个问题吗?

python numpy fft pandas

8
推荐指数
1
解决办法
1万
查看次数

返回执行“on_click”函数的输出

如何得到执行的函数的输出on_clickipywidgets.Button 功能外下一步使用?例如,我想a在每次点击后取回 的值以在 jupyter-notebook 的下一个单元格中使用。到目前为止,我只得到None.

from ipywidgets import Button
def add_num(ex):
    a = b+1
    print('a = ', a)
    return a

b = 1
buttons = Button(description="Load/reload file list")
a = buttons.on_click(add_num)
display(buttons)
print(a)
Run Code Online (Sandbox Code Playgroud)

python-3.x jupyter-notebook ipywidgets

6
推荐指数
1
解决办法
3480
查看次数

将两个高斯拟合在较少表达的双峰数据上

我试图在双峰分布数据上拟合两个高斯,但大多数优化器总是根据开始猜测给出错误的结果,如下所示

我也尝试GMMscikit-learn,这并没有太大的帮助.我想知道我可能做错了什么以及什么是更好的方法,以便我们可以测试和拟合双峰数据.使用curve_fit数据的示例代码之一如下

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def gauss(x,mu,sigma,A):
    return A*np.exp(-(x-mu)**2/2/sigma**2)

def bimodal(x,mu1,sigma1,A1,mu2,sigma2,A2):
    return gauss(x,mu1,sigma1,A1)+gauss(x,mu2,sigma2,A2)

def rmse(p0):
    mu1,sigma1,A1,mu2,sigma2,A2 =p0
    y_sim = bimodal(x,mu1,sigma1,A1,mu2,sigma2,A2)
    rms = np.sqrt((y-y_sim)**2/len(y))

data = pd.read_csv('data.csv')
x, y = data.index, data['24hr'].values

expected=(400,720,500,700,774,150)

params,cov=curve_fit(bimodal,x,y,expected, maxfev=100000)
sigma=np.sqrt(np.diag(cov))
plt.plot(x,bimodal(x,*params),color='red',lw=3,label='model')
plt.plot(x,y,label='data')
plt.legend()
print(params,'\n',sigma)
Run Code Online (Sandbox Code Playgroud)

python curve-fitting scipy python-3.x scikit-learn

0
推荐指数
1
解决办法
1087
查看次数