2017-06-21 179 views
1

我正在将matlab脚本转换为python,我有它的障碍。 为了对信号使用三次样条插值。该脚本使用三个输入的命令样条曲线。 f_o,c_signal和freq。所以它看起来像下面这样。Matlab的样条曲线在Python中等价于三个输入。

cav_sig_freq = spline(f_o, c_signal, freq) 
f_o = 1x264, c_signal = 1x264 and freq = 1x264 

从在MATLAB它读取“S =花键(X,Y,XQ)返回的内插值及其对应于该查询的点的矢量在XQ的文档。S的值是通过三次样条来确定插入x和y“。

在蟒蛇我很努力地找到正确的python等价物。我在numpy和Scipy文档中发现的不同的插值函数让我们使用Matlab中的第三个输入。

感谢您花时间阅读本文。如果有什么建议可以让我更清楚,我会很乐意这样做。

回答

0

您是否尝试过scipy.interpolate内的InterpolatedUnivariateSpline?如果我正确理解MatLab部件,那么我认为这将起作用。

import numpy as np 
from scipy.interpolate import InterpolatedUnivariateSpline as ius 

a = [1,2,3,4,5,6] 
b = [r * 2 for r in a] 
c = ius(a, b, k=1) 

# what values do you want to query? 
targets = [3.4, 2.789] 

interpolated_values = c(targets) 

看来,这可能会增加一个步骤,以你的代码比MATLAB提供,但我认为这是你想要的。

+0

感谢您的回复,我已经尝试过。然而,由于某种原因,它只会导致在第二步提交“nan”的数组。 – Runsiv

2

基本上你首先需要生成一个类似插值函数的东西,然后给它你的观点。使用您的变量名是这样的:

from scipy import interpolate 
tck = interpolate.splrep(f_o, c_signal, s=0) 

,然后这个TCK适用于你的观点:

c_interp = interpolate.splev(freq, tck, der=0) 

如需更多关于这个你可以阅读这个post

+0

谢谢我认为它需要像matlab中的单一操作,所以没有阅读文档以及我应该有。 但是,interpolation.splev给出了以下错误: line 515,in splrep raise _iermess [ier] [1](_ iermess [ier] [0]) ValueError:输入数据错误 – Runsiv