标签: fft

如何获得FFT中每个值的频率?

我有一个FFT结果.它们存储在两个double数组中:实部数组和虚部数组.如何确定与这些阵列中每个元素对应的频率?

换句话说,我想创建一个存储FFT的每个实部和虚部的频率的数组.

c# signal-processing fft

144
推荐指数
5
解决办法
13万
查看次数

Python/SciPy的峰值查找算法

我可以通过查找一阶导数或其他东西的零交叉来自己编写一些东西,但它似乎是一个通用的函数,可以包含在标准库中.谁知道一个?

我的特定应用是2D阵列,但通常它将用于在FFT等中查找峰值.

具体而言,在这些类型的问题中,存在多个强峰,然后是许多较小的"峰值",这些"峰值"仅由应该忽略的噪声引起.这只是例子; 不是我的实际数据:

一维峰值:

带峰值的FFT输出

二维峰值:

具有圆圈峰值的Radon变换输出

峰值寻找算法将找到这些峰值的位置(不仅仅是它们的值),理想情况下会找到真正的样本间峰值,而不仅仅是具有最大值的索引,可能使用二次插值等.

通常,您只关心一些强峰,因此它们要么被选中,要么是因为它们高于某个阈值,要么是因为它们是有序列表的前n个峰值,按振幅排列.

正如我所说,我知道如何自己写这样的东西.我只是问是否有一个已知的功能或包已知可以正常工作.

更新:

翻译了一个MATLAB脚本,它适用于1-D案例,但可能更好.

更新更新:

sixtenbe 为1-D案例创造了更好的版本.

python fft scipy hough-transform

123
推荐指数
6
解决办法
10万
查看次数

使用快速傅里叶变换分析音频

我正在尝试在python中创建一个图形频谱分析器.

我目前正在读取1024字节的16位双通道44,100 Hz采样率音频流,并将两个通道的幅度平均在一起.所以现在我有256个签名短裤阵列.我现在想要使用像numpy这样的模块在该阵列上预先形成一个fft,然后使用结果创建图形频谱分析器,开始时只需32个小节.

我已经阅读了关于快速傅里叶变换和离散傅里叶变换的维基百科文章,但我仍然不清楚结果数组代表什么.这是我使用numpy在我的数组上执行fft后数组的样子:

   [ -3.37260500e+05 +0.00000000e+00j   7.11787022e+05 +1.70667403e+04j
   4.10040193e+05 +3.28653370e+05j   9.90933073e+04 +1.60555003e+05j
   2.28787050e+05 +3.24141951e+05j   2.09781047e+04 +2.31063376e+05j
  -2.15941453e+05 +1.63773851e+05j  -7.07833051e+04 +1.52467334e+05j
  -1.37440802e+05 +6.28107674e+04j  -7.07536614e+03 +5.55634993e+03j
  -4.31009964e+04 -1.74891657e+05j   1.39384348e+05 +1.95956947e+04j
   1.73613033e+05 +1.16883207e+05j   1.15610357e+05 -2.62619884e+04j
  -2.05469722e+05 +1.71343186e+05j  -1.56779748e+04 +1.51258101e+05j
  -2.08639913e+05 +6.07372799e+04j  -2.90623668e+05 -2.79550838e+05j
  -1.68112214e+05 +4.47877871e+04j  -1.21289916e+03 +1.18397979e+05j
  -1.55779104e+05 +5.06852464e+04j   1.95309737e+05 +1.93876325e+04j
  -2.80400414e+05 +6.90079265e+04j   1.25892113e+04 -1.39293422e+05j
   3.10709174e+04 -1.35248953e+05j   1.31003438e+05 +1.90799303e+05j...
Run Code Online (Sandbox Code Playgroud)

我想知道这些数字究竟代表什么,以及我如何将这些数字转换为32个柱中每一个的高度百分比.另外,我应该将2个频道平均在一起吗?

python audio signal-processing fft spectrum

107
推荐指数
3
解决办法
6万
查看次数

了解FFT输出

我需要一些帮助来理解DFT/FFT计算的输出.

我是一位经验丰富的软件工程师,需要解释一些智能手机加速度计读数,例如查找主要频率.不幸的是,我在十五年前的大部分EE课程中都睡过了,但过去几天我一直在阅读DFT和FFT(显然没什么用).

请不要回答"参加EE课程".如果我的雇主付钱给我,我实际上打算这样做.:)

所以这是我的问题:

我以32 Hz的频率捕获了一个信号.这是一个32秒的1秒样本,我在Excel中绘制了它.

在此输入图像描述

然后,我从哥伦比亚大学获得了一些用Java编写的FFT代码(在遵循" Java中的可靠和快速FFT "一文中的建议之后).

该程序的输出如下.我相信它正在运行就地FFT,因此它为输入和输出重复使用相同的缓冲区.

Before: 

Re: [0.887  1.645  2.005  1.069  1.069  0.69  1.046  1.847  0.808  0.617  0.792  1.384  1.782  0.925  0.751  0.858  0.915  1.006  0.985  0.97  1.075  1.183  1.408  1.575  1.556  1.282  1.06  1.061  1.283  1.701  1.101  0.702  ]

Im: [0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0 …
Run Code Online (Sandbox Code Playgroud)

java audio signal-processing fft accelerometer

80
推荐指数
4
解决办法
4万
查看次数

为什么FFT产生复数而不是实数?

我们遇到的所有FFT实现都会产生复杂的值(具有实部和虚部),即使算法的输入是一组离散的实数(整数).

是否仅可以用实数表示频域?

algorithm math audio signal-processing fft

73
推荐指数
5
解决办法
6万
查看次数

C#中快速傅里叶变换(FFT)的实现

哪里可以找到C#中免费,快速,可靠的FFT实现?

那可以用在产品中吗?或者有任何限制吗?

c# signal-processing fft

71
推荐指数
7
解决办法
12万
查看次数

使用Apple FFT和加速框架

有没有人用过Apple FFTiPhone应用程序或知道我在哪里可以找到一个如何使用它的示例应用程序?我知道Apple发布了一些示例代码,但我不确定如何将它实现到实际项目中.

iphone audio signal-processing fft accelerate-framework

69
推荐指数
3
解决办法
5万
查看次数

在Python中绘制快速傅里叶变换

我可以访问numpy和scipy,并希望创建一个简单的数据集FFT.我有两个列表,一个是y值,另一个是y值的时间戳.

将这些列表提供给scipy或numpy方法并绘制结果FFT的最简单方法是什么?

我查了一些示例,但它们都依赖于创建一组具有一定数量的数据点和频率等的假数据,并没有真正展示如何使用一组数据和相应的时间戳来实现它.

我尝试过以下示例:

from scipy.fftpack import fft
# Number of samplepoints
N = 600
# sample spacing
T = 1.0 / 800.0
x = np.linspace(0.0, N*T, N)
y = np.sin(50.0 * 2.0*np.pi*x) + 0.5*np.sin(80.0 * 2.0*np.pi*x)
yf = fft(y)
xf = np.linspace(0.0, 1.0/(2.0*T), N/2)
import matplotlib.pyplot as plt
plt.plot(xf, 2.0/N * np.abs(yf[0:N/2]))
plt.grid()
plt.show()
Run Code Online (Sandbox Code Playgroud)

但是当我将fft的参数更改为我的数据集并绘制它时,我得到了非常奇怪的结果,看起来频率的缩放可能会关闭.我不确定.

这是我试图FFT的数据的pastebin

http://pastebin.com/0WhjjMkb http://pastebin.com/ksM4FvZS

当我在整个事情上做一个fft时,它只有一个零的巨大尖峰而没有别的

这是我的代码:

## Perform FFT WITH SCIPY
signalFFT = fft(yInterp)

## Get Power Spectral Density
signalPSD = np.abs(signalFFT) ** 2

## …
Run Code Online (Sandbox Code Playgroud)

python numpy fft scipy

65
推荐指数
7
解决办法
22万
查看次数

在进行信号的频谱分析时的傅里叶变换(FFT)的单位

我的问题与对信号进行频谱分析的结果的物理意义有关,或者将信号抛入FFT并使用合适的数字包解释出来的结果,

特别:

  • 发信号,说时变电压v(t)
  • 把它扔进FFT(你得到一系列复数)
  • 现在取模数(abs)并将结果平方,即| fft(v)| ^ 2.

所以你现在在y轴上有实数 - 我应该称这些频谱系数?

  • 使用采样分辨率,您可以遵循食谱配方并将频谱系数与频率相关联.
  • 在这一点上,你有一个频率g(w),频率在x轴上,但y轴上的物理单位是多少?

我的理解是这个频谱显示了电压信号中存在多少不同的频率 - 它们是频谱系数,它们是重构原始信号所需的各种频率的正弦和余弦的系数.

所以第一个问题是,这些频谱系数的单位是多少?

这很重要的原因是频谱系数可能很小而且很大,所以我想用dB标度来表示它们.

但要做到这一点,我必须做出选择:

  • 要么我使用20log10 dB转换,对应于现场测量,如电压.
  • 或者我使用10log10 dB转换,对应于能量测量,如电源.

我使用哪种缩放取决于单位是什么.

任何关于此的光线都将非常感激!

math physics fft measurement spectrum

59
推荐指数
3
解决办法
9万
查看次数

numpy.fft和scipy.fftpack有什么区别?

后者只是前者的同义词,还是两种不同的FFT实现?哪一个更好?

python numpy fft scipy

53
推荐指数
2
解决办法
3万
查看次数