- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我看到有人在演示中这样做,但我很难重现他的能力。这是他演讲的幻灯片:
很酷。他使用 FFT 分解了一个数据集,然后绘制了 FFT 指定的适当正弦波。
因此,为了重现他所做的事情,我创建了一系列对应于 2 个正弦波组合的点:
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
x = np.arange(0, 10, 0.01)
x2 = np.arange(0, 20, 0.02)
sin1 = np.sin(x)
sin2 = np.sin(x2)
x2 /= 2
sin3 = sin1 + sin2
plt.plot(x, sin3)
plt.show()
# goal: sin3 -> sin1, sin2
# sin3
array([ 0.00000000e+00, 2.99985000e-02, ... 3.68998236e-01])
# sin1
array([ 0. , 0.00999983, 0.01999867, ... -0.53560333])
# sin2
array([ 0. , 0.01999867, 0.03998933, ... 0.90460157])
numpy
并获得
fft
的
sin3
:
import numpy as np
fft3 = np.fft.fft(sin3)
array([ 2.13316069e+02+0.00000000e+00j, 3.36520138e+02+4.05677438e+01j,...])
plt.plot(fft3)
plt.show()
plt.plot(sin1)
plt.show()
plt.plot(sin2)
plt.show()
fft3
中复数的实部和虚部数据集,我只是不确定如何处理它们来导出
sin1
和
sin2
来自它的数据集。
def decompose_fft(data: list, threshold: float = 0.0):
fft3 = np.fft.fft(data)
x = np.arange(0, 10, 10 / len(data))
freqs = np.fft.fftfreq(len(x), .01)
recomb = np.zeros((len(x),))
for i in range(len(fft3)):
if abs(fft3[i]) / len(x) > threshold:
sinewave = (
1
/ len(x)
* (
fft3[i].real
* np.cos(freqs[i] * 2 * np.pi * x)
- fft3[i].imag
* np.sin(freqs[i] * 2 * np.pi * x)))
recomb += sinewave
plt.plot(x, sinewave)
plt.show()
plt.plot(x, recomb, x, data)
plt.show()
decompose_fft(sin3, threshold=0.0)
y=0.2
收到这条奇怪的线路有谁知道这可能是什么或导致它的原因是什么?
最佳答案
离散傅立叶变换存在一些问题,在使用连续对应变换时不会立即明显。一方面,您输入的周期性应该与您的数据范围相匹配,因此如果您使用:
x = np.linspace(0, 4*np.pi, 200)
sin1 = np.sin(x)
sin2 = np.sin(2*x)
sin3 = sin1 + sin2
fft3 = np.fft.fft(sin3)
sin
直接进入虚部,您可以尝试仅绘制虚部:
plt.plot(fft3.imag)
plt.show()
x=2
为中心的峰值和
x=4
对应于原始正弦分量,其频率为“每个信号 2 个”(从 0 到 4 pi 的 sin(x))和“每个信号 4 个”(从 0 到 4 pi 的 sin(2x))。
for i in range(1,100):
plt.plot(x, fft3.imag[i] * np.sin(i*x)/100)
plt.show()
关于python - 在python中将FFT绘制为一组正弦波?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59725933/
我写的函数有问题。想法是使用 taylor 展开而不是 js 数学对象来计算 sin 和 cosin 值(在 radians 上运行) .这些是方程式: sin(x) = (x^1)/1! - (x^
我不知道这是编程还是数学问题,但我整理了一些FFT的简短示例。我加载了440hz的波并在顶部添加了一些正弦波,但是由于某种原因,频谱中存在一个我不理解的“波”。 据我了解,频谱应该具有相同的| Y(f
这个问题在这里已经有了答案: Java Math.cos(Math.toRadians()) returns weird values (4 个答案) 关闭 10 年前。 我正在编写一个程序,我必须
我想在 ios4 中实现一个正弦和余弦计算器: if([operation isEqual:@"sin"]){ operand = (operand*M_PI/180.0); oper
我使用 256 个元素为 VHDL 制作了一个正弦 LUT。 我使用 MIDI 输入,因此值范围为 8.17Hz(注 #0)到 12543.85z(注 #127)。 我有另一个 LUT 计算必须发送到
我想在ios4中实现一个正弦和余弦计算器: if([operation isEqual:@"sin"]){ operand = (operand*M_PI/180.0); operan
我是一名优秀的程序员,十分优秀!