Questions tagged «fft»

快速傅立叶变换是一种有效的算法,可以计算离散傅立叶变换(DFT)及其逆。

2
为什么在FFT中会出现频谱泄漏?
我已经尝试使用谷歌搜索和维基百科了,但是除了“这是因为输入信号的频率位于两个区间之间”之外,我没有得到任何答案。 我知道这是原因,但是我不明白的是为什么泄漏似乎扩展到几个相邻的容器,而不是仅一个相邻的容器。 为了说明我在说什么,这里有一些模拟数据(文章末尾的代码): 上面是频率为10的正弦波的FFT频谱(按对数标绘)。采样率为1,采样数为100。该图已进行FFT移位。显然在bin 10处只有一个峰值,其余的则处于数值误差的数量级左右。 这是产生的频率为10.1的频谱。显然,与直接相邻的垃圾箱相比,存在更多的垃圾箱“泄漏”。 这是频率为10.5的图。 问题:为什么会出现这种泄漏,为什么会泄漏到所有其他垃圾箱,而不是直接相邻的垃圾箱? 代码,适合任何有兴趣的人(Python代码) import numpy as np import matplotlib.pyplot as plt xFreq = 10.5 xSize = 100.0 xPeriod = xSize/xFreq x = np.linspace(1,xSize,xSize) data = np.sin(2*np.pi*x/xPeriod) fft = np.fft.fft(data) fft = np.fft.fftshift(fft) fig = plt.figure() ax = fig.add_subplot(111) ax.plot(abs(fft), "o") ax.set_yscale('log') plt.show() 我将xFreq值从更改10.0为10.5,等等。

3
为什么在合成(IDFT)而不是分析(DFT)时将幅度标准化?
在我看到的大多数示例和FFT代码中,前向DFT操作的输出(频率幅度)按N进行缩放-即,不是给您每个频率仓的幅度,而是给您N倍的幅度。 在操作上,这仅仅是因为DFT是通过将信号的内积与每个基本正弦值(即未归一化的相关性)相乘来计算的。但是,这不能回答这样一个哲学问题,即为什么我们不返回输出之前就只除以N? 相反,大多数算法在重新合成时除以N。 这对我来说似乎是违反直觉的,并且(除非我遗漏了一些东西)这使DFT的所有解释都非常混乱。 在每种情况下,我都可以做梦,实际的幅度(不是幅度* N)是我从DFT操作中需要的值,而归一化的幅度是我想输入到IDFT操作中的值。 为什么不将DFT定义为DFT / N,而将IDFT定义为归一化正弦波的简单总和?

4
如何从FFT计算频谱平坦度?
好的,光谱平坦度(也称为维纳熵)定义为光谱的几何平均值与其算术平均值的比值。 Wikipedia和其他参考资料说明了功率谱。那不是傅立叶变换的平方吗?FFT产生一个“振幅频谱”,然后求平方得到“功率频谱”? 基本上,我想知道的是spectrum = abs(fft(signal)),其中哪些是正确的? spectral_flatness = gmean(spectrum)/mean(spectrum) spectral_flatness = gmean(spectrum^2)/mean(spectrum^2) 维基百科的定义似乎直接使用幅度: 其中x(n)代表区间数n的大小。F l a t n e s s = ∏ñ− 1n = 0x (n )---------√ñ∑ñ− 1n = 0x (n )ñ= 经验(1ñ∑ñ− 1n = 0lnx (n ))1个ñ∑ñ− 1n = 0x (n )F升一种ŤñËss=∏ñ=0ñ-1个X(ñ)ñ∑ñ=0ñ-1个X(ñ)ñ=经验值⁡(1个ñ∑ñ=0ñ-1个ln⁡X(ñ))1个ñ∑ñ=0ñ-1个X(ñ) \mathrm{Flatness} = \frac{\sqrt[N]{\prod_{n=0}^{N-1}x(n)}}{\frac{\sum_{n=0}^{N-1}x(n)}{N}} = \frac{\exp\left(\frac{1}{N}\sum_{n=0}^{N-1} \ln x(n)\right)}{\frac{1}{N} …

3
带非对称加窗的FFT吗?
常见的非矩形窗口函数似乎都是对称的。是否曾经有人希望在FFT之前使用非对称窗口函数?(假设是否认为FFT孔径一侧的数据比另一侧的数据更重要,或者噪声较小等)。 如果是这样,已经研究了哪种非对称窗函数,与(具有更大损耗的)偏移对称窗相比,它们将如何影响频率响应?


7
DFT和FFT之间的哪些区别使FFT如此快速?
我正在尝试了解FFT,这是到目前为止的内容: 为了找到波形中的频率幅度,必须在两个不同的相位(正弦和余弦)中将电波乘以它们正在搜索的频率,然后对它们进行平均,从而对它们进行探测。该阶段是通过与两者之间的关系找到的,其代码如下所示: //simple pseudocode var wave = [...]; //an array of floats representing amplitude of wave var numSamples = wave.length; var spectrum = [1,2,3,4,5,6...] //all frequencies being tested for. function getMagnitudesOfSpectrum() { var magnitudesOut = []; var phasesOut = []; for(freq in spectrum) { var magnitudeSin = 0; var magnitudeCos …
16 fft  dft  algorithms 

1
白噪声的相位和幅度响应是什么?
我想在频域中创建白噪声,然后使用python将其转换为时域。为了理解这个问题,我只是在时域中产生白噪声,然后将其转换为频率域: import scipy.signal as sg import numpy as np import matplotlib.pyplot as plt e = np.random.normal(0,1,1e3) E = sg.fft(e) plt.figure("Bode plot") plt.subplot(211) plt.title("Magitude") plt.plot(abs(E)) plt.subplot(212) plt.title("Phase") plt.plot(np.angle(E)) plt.show() 我没有完全按照我的预期看: 问题: 白噪声不应该具有平坦的幅度响应吗?(所有频率相等) 标准偏差(在我的示例中为1)与幅度和相位之间是什么关系? 先感谢您!
16 fft  noise  python 

2
带几何间隔的垃圾箱的DFT?
传统的离散傅立叶变换(DFT)及其表亲FFT产生的条带间隔相等。换句话说,您会在第一个仓位中获得前10赫兹,在第二个仓位中获得10.1至20,依此类推。但是,我需要一些不同的东西。我希望每个垃圾箱所覆盖的频率范围在几何上增加。假设我选择1.5的倍数。然后,我们在第一个容器中有0到10,我想在第二个容器中有11到25,在第三个容器中有26到48,依此类推。是否可以修改DFT算法以这种方式运行?
16 fft  dft 

1
使用FFT频谱查找相似的音乐
我已经尝试了几个星期,以找到一种在包含不同音乐流派的图书馆中匹配/查找相似歌曲的方法。 我的第一个尝试是检测诸如Tempo之类的功能或在歌曲中有多少低音以形成组,但由于采用了这种方法(基于音量变化的节拍检测),我并没有走得太远,因为不必计算大约20%的歌曲节拍总是,有时是它们的1/2或1/3,我无法实现。 经过数周的尝试失败后,我得到了一个新的主意,本文稍后会对此进行介绍。简而言之,它通过对文件的频谱样本进行采样,使之类似于文件的“平均频谱”来进行比较。背后的想法是,例如Hardstyle比一般的摇滚音乐拥有更多的低音,我还通过查看Audacity中的一些Spectrum来验证了这一点。 文件1:获取完整的文件FFT频谱(2048个样本大小atm,对数幅度标度) 对所有频谱阵列求和,取每个仓的平均值 与其他文件相同,存储所有结果 列出文件1和其他文件之间FFT值差异的列表 对文件1和文件X之间的差异求平均值 按这些平均值升序排列 “差值”最低的歌曲被视为相似。 你们中有一些知识渊博的人可以告诉我这是否是实施我的想法的正确/好的方法吗?
16 audio  fft  music 

2
为什么FFT的实部将图像转换为旋转+原始图像?
我已经看过这张图片: 进行FFT(2D),然后进行逆FFT,以获取准确的图像。提供代码以供参考: imfft = fft2(photographer); im = uint8(ifft2(imfft)); imshow(im); %Output is same image 但是当我改变傅立叶而只占真实部分时, imfft = real(fft2(photographer)); im = uint8(ifft2(imfft)); imshow(im); 我得到这样的图像(请注意,大小更改是无关紧要的,仅是由于从Matlab图形处理程序中保存了它): 有人可以向我解释其背后的理论(数学)吗?谢谢

4
什么是频率槽?
我正在研究FFT方法,并且经常出现的术语是“频率仓”。据我了解,这与在给定正弦波频率周围创建的频段有关,但是我真的不知道如何做。我还想出了如何从给定的频率盒转到其相关频率,但仍然不了解频率频率盒是什么。
16 fft 

5
使用FFT设计FIR滤波器有什么问题?
我试图了解使用带卷积滤波器内核的“第一原理”设计的FIR滤波器与使用FFT的两种方式之一设计的滤波器之间的关系(请参见下文)。 据我了解,FIR滤波器的脉冲响应与滤波器的卷积内核是一样的。(如果我错了纠正我。) 另外,据我所知,FIR滤波器的脉冲响应的成分频率(即傅立叶变换)与滤波器的频率响应相同。因此,傅立叶逆变换将使我获得脉冲响应。(同样,如果我做错了,请纠正我)。 这使我得出两个结论(忽略相位响应或假设线性相位响应): 通过“绘制”所需的频率响应,采用IFFT来获得脉冲响应,并将其用作卷积内核,我应该能够设计出具有任意频率响应的FIR滤波器。 或者,我应该能够通过对输入信号进行FFT,在频域中乘以所需的任意频率响应,并对结果进行IFFT来生成输出信号,从而创建一个滤波器。 直觉上,感觉1和2是等效的,但是我不确定是否可以证明这一点。 似乎人们(和DSP文献)都竭尽全力设计具有预定义响应的FIR内核,使用诸如Chebyshev或Remez这样的复杂(对我而言)算法(我抛出了一些我已经读过的名字,但并没有真正理解它们) 。 当对于每个可能的FIR内核都存在FFT / IFFT变换时,为什么要采用这些长度? 为什么不简单地绘制所需的确切频率响应,进行IFFT,然后得到FIR内核(上面的方法1)?

3
快速傅里叶变换-FFT孔径中的非整数周期数
这个站点(eletronics.se)上有一些关于傅立叶变换理论的精彩讨论线索和答案。我尝试在模拟工具(MS Excel :)中实现相同的功能。 我对此有一些解释和实现问题。我正在尝试分析50 Hz的电压波形。但是,下面的数据只是生成的虚拟数据,试图为在内存和处理能力受限的16位嵌入式低成本处理器上实现的实现建立概念框架。 预计到达时间(2012年5月30日) TL; DR版本: 不用说在electronics.se上,但是我使用的是内存和处理能力受限的嵌入式处理器。 这里有一些问题尚未解决: 在不显着增加算法的内存占用的情况下,如何对我拥有的样本执行加窗?我希望这些内容是基本的逐步说明,因为我对DSP相当陌生。 当我对41个样本进行插值以得出32个时,为什么幅度减半了,但是当我对64个样本进行插值来得出64个时,幅度却保持不变(除了一些噪声)? 我宣布对这个问题的赏识,希望我能得到一些优秀的答案,这些答案对于DSP的新手来说是可行的。 实验1: 时域输入 我使用生成了一个正弦波,以生成64个样本。然后,我添加了30%的谐波,20%的次谐波,15%的次谐波,10%的谐波和20%的谐波。这导致了这些样本:3 - [R d 5 吨ħ 7 吨ħ 9 吨ħ 11 吨ħsin(2nπ/64)sin⁡(2nπ/64) \sin(2n \pi /64) 3rd3rd3rd5th5tH5th7 吨h7tH7th9 吨ħ9tH 9th 11 吨ħ11ŤH 11th 0, 0.628226182, 0.939545557, 0.881049194, 0.678981464, 0.602991986, 0.719974543, 0.873221372, 0.883883476, 0.749800373, 0.636575155, 0.685547957, 0.855268479, …
15 fourier  fft 

4
较低的频率在FFT中更强?
我正在根据麦克风输入计算FFT。我注意到,低频似乎总是比高频具有更大的功率(更高的dB)。 我将数据切成24576字节(4096 * 6)的帧。 应用汉明窗: input[i] *= (0.54d - 0.46d*(double) Math.Cos((2d*Math.PI*i)/fs)); 通过FFTW运行它Process1D()。 从复数转换: output[i] = 10.0 * Math.Log10((fout[i * 2] * fout[i * 2]) + (fout[i * 2 + 1] * fout[i * 2 + 1])); 对6个值求平均值,以获得4096字节的完整FFT。 绘制漂亮的图片(颜色映射到调色板)。 进行平均(第5页)以降低FFT噪声。 如图所示,声音和麦克风关闭时,低频处都有更多的能量(和更多的噪音)。这表明它不仅仅是麦克风/子问题。 我的问题: 1.这是预期的吗?为什么? 2.有什么标准方法可以解决此问题?几乎像某些Math.Tan()魔术可以将其提升到所属位置。 我的目标是能够确定前5个频率,而默认情况下不会赢得较低的频率。
15 audio  fft 

3
通过FFT快速进行余弦变换
我想实现快速余弦变换。我在Wikipedia上读到,有一个DCT的快速版本,其计算方法与FFT类似。我尝试阅读引用的Makhoul *论文,了解Scipy中也使用的FTPACK和FFTW实现,但是我无法提取实际的算法。这是我到目前为止所拥有的: FFT代码: def fft(x): if x.size ==1: return x N = x.size x0 = my_fft(x[0:N:2]) x1 = my_fft(x[0+1:N:2]) k = numpy.arange(N/2) e = numpy.exp(-2j*numpy.pi*k/N) l = x0 + x1 * e r = x0 - x1 * e return numpy.hstack([l,r]) DCT代码: def dct(x): k = 0 N = x.size …
15 fft  dct 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.