我是android的新手,我想在android studio中导入jfftpack到我的项目,我不知道如何导入它.
原始代码是导入ca.uol.aig.realdoublefft,我不知道在哪里放java文件.我试图将它们放到libs文件夹中.
这是jfftpack源代码:
我正在尝试将用fftpack_rfft2d()
(SciPy 的 FFTPACK RFFT)转换的两个二维数组相乘,结果与我从scipy_rfft2d()
(SciPy 的 FFT RFFT)得到的结果不兼容。
下图共享了脚本的输出,其中显示:
scipy_rfft2d()
,然后是乘法的输出,然后使用向后变换scipy_irfft2d()
;fftpack_rfft2d()
和相同的事情fftpack_irfft2d()
;np.allclose()
的结果检查两个乘法的结果在使用其各自的 IRFFT 实现转换回来后是否相同。
为了清楚起见,红色矩形显示逆变换 IRFFT 后的乘法结果:左侧的矩形使用 SciPy 的 FFT IRFFT;右边的矩形,SciPy 的 FFTPACK IRFFT。当与 FFTPACK 版本的乘法固定时,它们应该显示相同的数据。
我认为与 FFTPACK 版本的乘法结果不正确,因为scipy.fftpack返回结果 RFFT 数组中的实部和虚部与来自scipy.fft的 RFFT 不同:
如果我错了,请纠正我!我还想指出,由于scipy.fftpack不提供用于转换 2D 数组的函数,例如rfft2() …
我有一个时间序列数据
我试图找到 fft 。但它给出了 keyerror :Aligned 当尝试获取值时
我的数据如下所示
这是代码:
import datetime
import numpy as np
import scipy as sp
import scipy.fftpack
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
temp_fft = sp.fftpack.fft(data3)
Run Code Online (Sandbox Code Playgroud) 该scipy.fftpack.rfft
函数将 DFT 作为浮点向量返回,在实部和复部之间交替。这意味着要一起乘以 DFT(对于卷积),我将不得不“手动”进行复杂的乘法,这似乎非常棘手。这一定是人们经常做的事情 - 我假设/希望有一个简单的技巧可以有效地做到这一点,但我没有发现?
基本上我想修复此代码,以便两种方法都给出相同的答案:
import numpy as np
import scipy.fftpack as sfft
X = np.random.normal(size = 2000)
Y = np.random.normal(size = 2000)
NZ = np.fft.irfft(np.fft.rfft(Y) * np.fft.rfft(X))
SZ = sfft.irfft(sfft.rfft(Y) * sfft.rfft(X)) # This multiplication is wrong
NZ
array([-43.23961083, 53.62608086, 17.92013729, ..., -16.57605207,
8.19605764, 5.23929023])
SZ
array([-19.90115323, 16.98680347, -8.16608202, ..., -47.01643274,
-3.50572376, 58.1961597 ])
Run Code Online (Sandbox Code Playgroud)
N.B. I am aware that fftpack contains a convolve
function, but I only need to fft one half of the transform …
假设您使用dct函数,然后不对数据进行操作并使用反转变换; 倒置数据不会与预转换数据相同吗?为什么浮点问题?是报告的问题还是正常行为?
In [21]: a = [1.2, 3.4, 5.1, 2.3, 4.5]
In [22]: b = dct(a)
In [23]: b
Out[23]: array([ 33. , -4.98384545, -4.5 , -5.971707 , 4.5 ])
In [24]: c = idct(b)
In [25]: c
Out[25]: array([ 12., 34., 51., 23., 45.])
Run Code Online (Sandbox Code Playgroud)
任何人都有解释为什么?当然,一个简单的c*10**-1
方法可以解决这个问题,但是如果你重复调用函数来在几个维度上使用它,那么错误就会变大:
In [37]: a = np.random.rand(3,3,3)
In [38]: d = dct(dct(dct(a).transpose(0,2,1)).transpose(2,1,0)).transpose(2,1,0).transpose(0,2,1)
In [39]: e = idct(idct(idct(d).transpose(0,2,1)).transpose(2,1,0)).transpose(2,1,0).transpose(0,2,1)
In [40]: a
Out[40]:
array([[[ 0.48709809, 0.50624831, 0.91190972],
[ 0.56545798, 0.85695062, 0.62484782],
[ 0.96092354, 0.17453537, 0.17884233]],
[[ …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 scipy.fftp 在 python 中平滑和插入一些周期性数据。我已经设法获取数据的 fft,删除 wn 以上的高阶频率(通过执行 myfft[wn:-wn] = 0),然后使用 ifft(myfft) 重建数据的“平滑”版本。ifft 创建的数组与原始数据具有相同的点数。我如何使用该 fft 创建一个具有更多点的数组。
x = [i*2*np.pi/360 for i in range(0,360,30)]
data = np.sin(x)
#get fft
myfft = fftp.fft(data)
#kill feqs above wn
myfft[wn:-wn] = 0
#make new series
newdata = fftp.ifft(myfft)
Run Code Online (Sandbox Code Playgroud)
我还能够以与此处演示的相同分辨率手动重新创建系列使用 FFT 结果重新创建 时间序列数据而不使用 ifft
但是当我尝试提高 x 值数组的分辨率时,它也没有给我正确的答案。
提前致谢
尼尔