Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python上编写代码:从嘈杂的测量中恢复正弦曲线_Python_Math - Fatal编程技术网

在Python上编写代码:从嘈杂的测量中恢复正弦曲线

在Python上编写代码:从嘈杂的测量中恢复正弦曲线,python,math,Python,Math,我需要计算平面坐标(x,y)。有一个变化的轨迹,有必要计算后续坐标。有一个改变坐标的近似公式,它取决于两个系数k1和k2和随机噪声: x = k2cos(k1t) + noise y = k1sin(k2t) + noise 在输入端,给出1000对坐标x y前1000秒(从0到999)的列表: 作为响应,预计在第二个千秒(从1000到1999)内会有1000对的阵列,例如: [(0.8990863593574939, 8.475387292276096e-07), (0. 808959383

我需要计算平面坐标(x,y)。有一个变化的轨迹,有必要计算后续坐标。有一个改变坐标的近似公式,它取决于两个系数
k1
k2
和随机噪声:

x = k2cos(k1t) + noise
y = k1sin(k2t) + noise
在输入端,给出1000对坐标x y前1000秒(从0到999)的列表:

作为响应,预计在第二个千秒(从1000到1999)内会有1000对的阵列,例如:

[(0.8990863593574939, 8.475387292276096e-07), (0. 8089593833113505, 0.3534820061950688), (0.5566465706027002, 0.4399620826711653), (0.19273411906364982, 0. 19411748737324), (-0.20981822525965102, -0.19835273653070376), (-0.5703058016775612, -0.44099688186601116), (-0. 8164537877967621, -0.35053466833726243), (-0.8989145629777989, 0.004703700279075586), … (-0.801155143314037, 0. 35638955826565816), (-0.5427749453575453, 0.43887713883486584), (-0.17557562076019273, 0.18985994842390025), (0. 22682425709951057, -0.20256735021079741), (0.5837487993279974, -0.4419853288796921), (0.8236405373374047, -0. 3475501356746985), (0.8984026035824828, 0.009406628459256976), (0.7930484451922395, 0.3592589441057791)]

因此,拟合
k1、k2
,直到数据和功能(无噪声)之间的abs差异最小
|(k2*cos(k2*t),k1*sin(k1*t))-数据[t]|
如果您了解更多有关噪声的信息,您可以从输入数据属性(如平均值、趋势、频率)缩小搜索范围。。。更多信息请参阅我在C++中尝试的示例数据,导致代码< K1=0.45158,K2=0.899080 < /代码>,可以直接确定<代码> K1、K2 < /代码>,直接形成<>代码> x和<代码> y>代码>信号。因此,在
x
中找到两个随后的零交叉点,与
k1*samples=6.28相关的样本数
y
k2
也是如此。在此之后,请将这些值放在附近非常感谢您的想法,我将尝试一下。顺便说一句,
x
y
中的
-min
+max
值是
k2,k1
。。。但是你有1秒的间隔,所以你错过了峰值。。。所以k1,k2会稍微高一些……所以拟合
k1,k2
,直到数据和函数(无噪声)之间的abs差异最小
|(k2*cos(k2*t),k1*sin(k1*t))-数据[t]|
如果您了解更多有关噪声的信息,您可以从输入数据属性(如平均值、趋势、频率)缩小搜索范围。。。更多信息请参阅我在C++中尝试的示例数据,导致代码< K1=0.45158,K2=0.899080 < /代码>,可以直接确定<代码> K1、K2 < /代码>,直接形成<>代码> x和<代码> y>代码>信号。因此,在
x
中找到两个随后的零交叉点,与
k1*samples=6.28相关的样本数
y
k2
也是如此。在此之后,请将这些值放在附近非常感谢您的想法,我将尝试一下。顺便说一句,
x
y
中的
-min
+max
值是
k2,k1
。。。但是你有1秒的间隔,所以你错过了峰值。。。所以k1,k2会稍微高一点。。。
[(0.8990863593574939, 8.475387292276096e-07), (0. 8089593833113505, 0.3534820061950688), (0.5566465706027002, 0.4399620826711653), (0.19273411906364982, 0. 19411748737324), (-0.20981822525965102, -0.19835273653070376), (-0.5703058016775612, -0.44099688186601116), (-0. 8164537877967621, -0.35053466833726243), (-0.8989145629777989, 0.004703700279075586), … (-0.801155143314037, 0. 35638955826565816), (-0.5427749453575453, 0.43887713883486584), (-0.17557562076019273, 0.18985994842390025), (0. 22682425709951057, -0.20256735021079741), (0.5837487993279974, -0.4419853288796921), (0.8236405373374047, -0. 3475501356746985), (0.8984026035824828, 0.009406628459256976), (0.7930484451922395, 0.3592589441057791)]