Python 基于离散傅里叶变换的三角插值

Python 基于离散傅里叶变换的三角插值,python,interpolation,dft,Python,Interpolation,Dft,我试图用离散傅里叶变换近似一个函数,给出函数的2M+1值 我看到了一些不同的系数和近似表达式,但我最初尝试的是(12)和(13),如中所示 (我为链接道歉,但堆栈溢出显然不支持Latex。) 我有一个函数用于计算给定系数的近似值,还有一个函数用于计算系数,但它也返回前面的函数。我用一些值进行了测试,但结果一点也不接近。我将它们与numpy.fft.fft进行了比较:系数不匹配,将fft传递给第一个函数也不能得到很好的近似值,因此系数不是唯一的问题 这是我的密码: def型号(cks,x): n=

我试图用离散傅里叶变换近似一个函数,给出函数的
2M+1

我看到了一些不同的系数和近似表达式,但我最初尝试的是(12)和(13),如中所示

(我为链接道歉,但堆栈溢出显然不支持Latex。)

我有一个函数用于计算给定系数的近似值,还有一个函数用于计算系数,但它也返回前面的函数。我用一些值进行了测试,但结果一点也不接近。我将它们与
numpy.fft.fft
进行了比较:系数不匹配,将fft传递给第一个函数也不能得到很好的近似值,因此系数不是唯一的问题

这是我的密码:

def型号(cks,x): n=len(cks) 断言(n%2==1) M=(n-1)//2 def soma(s): soma=0 对于范围(n)中的i: m=-m+i soma+=cks[i]*cmath.exp(1j*m*s) 返回体 soma=np.向量化(soma) 返回soma(x) 定义傅里叶变换(y): n=len(y) 断言(n%2==1) M=(n-1)//2 def soma(k): soma=0 对于范围(n)中的i: t=2*math.pi*i/n soma+=y[i]*cmath.exp(-1j*k*t) 返回(1/n)*soma cks=np.zero(n,dtype='complex') 对于范围(n)中的i: j=-M+i cks[i]=soma(j) 返回cks(lambda x:型号(cks,x))
我不确定我是否理解您的代码,但在我看来,这里有一个正向DFT和一个反向DFT。其中一个不使用
pi
,但应该使用

如果您对获取插值样本感兴趣,可以应用DFT,用零填充它,然后计算逆DFT(我使用的是MATLAB代码,因为这是我知道的,但我认为它相当容易阅读):

f=randn(1,21);%要插值的输入信号
F=fft(F);%正向DFT
F=FFT换档(F);%将零频率移到阵列中间
F=[零(1,60),F,零(1,60)];%两侧有相等数量的零的焊盘
F=ifftshift(F);%将零频率移回第一个阵列元素
fi=ifft(F)*长度(F)/长度(F);%逆DFT,归一化
%'fi'是插入的'f'`
%策划
x=linspace(1,长度(fi)+1,长度(f)+1);
x=x(1:end-1);
图(x,f,'x');
席=1:长度(FI);
等等
地块(xi,fi);

如果您觉得需要从头开始实现DFT和逆DFT,请知道您可以

如果要创建一个连续函数作为移位正弦函数的求和,请遵循,其中a_n和Φn由DFT元素的振幅和相位给出