Questions tagged «fft»

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

4
从FFT提取频率
我对信号执行了512点FFT。我又得到了512个号码集。我知道这些数字代表具有不同频率的各种正弦波和余弦波的振幅。 如果我的理解是正确的,有人可以告诉我如何从那些512数(即振幅)的知识中了解那些正弦和余弦波的频率吗?

5
正弦波的FFT不符合预期,即单点
青色曲线是50 Hz的频谱,洋红色曲线是50.1 Hz的正弦波(振幅为0.7)。两者均以1024个样本/秒的速度采样。我执行了1024点FFT以获得此频谱。 为什么只有50Hz频谱是单个值?为什么50.1 Hz正弦由50.1 Hz以外的其他频率组成;这些新频率从何而来? 我没有对50.1 Hz信号进行任何非线性处理!同样,50.1 Hz似乎具有较小的最大振幅,即不是0.7,而实际上我生成的正弦波的振幅为0.7。 为什么是这样? 通过MATALB命令fft()获得;
14 fft 

4
实时以接近人类的准确性提取音频信号频率分量的最有效方法
我正在尝试找出如何(如果可能)以类似FFT的方式提取任意音频样本(通常是音乐)的频率分量,但是在我对FFT算法的研究中,我了解到它遭受了一些困扰为此目的有严格的限制。 FFT存在3个问题: 因为FFT二进制分辨率等于您的窗口大小,所以要获得相当合理的精度(例如1 Hz),您需要一个不合理的长窗口(例如1秒)。这意味着您无法快速检测到瞬态或新引入的频率。这也意味着使用更快的CPU和更高的采样率无法解决问题-限制本质上与时间有关。 人们对数地感知频率,但是FFT仓是线性间隔的。例如,在我们听力的低端,相差20hz 很大,而在高端处,相差20hz是不可察觉的。因此,要获得低频所需的精度,我们必须计算的远远超过高频所需的精度。 这些问题中的一些可以通过在FFT区间之间进行插值来解决。这可能适用于许多音乐音频,因为频率通常会相隔很远,因此不会有超过1个频率泄漏到一对音槽中。但这并非总是如此,特别是对于打击乐器之类的非谐音。因此,插值实际上只是猜测。 根据我对DFT / FFT算法的了解,输出(仓幅度)实际上是每个仓频率下正弦/余弦的相关性。令我吃惊的是,如果可以重新设计算法,使bin频率非线性地间隔(即,我们将一组不同的正弦/余弦相关联),那么我们就可以在所有频率上达到听觉相等的分辨率。这是可能的,还是基于我对所涉及数学的不完全理解而做的梦pipe以求? 我想我也可以通过在每个感兴趣的频率上关联正弦/余弦来用蛮力解决问题。这可能吗?什么样的效率?能解决我的问题吗? 是否有其他方法可以实现信号的更准确,实时的频率分解?CPU效率是一个关注点,但不是主要关注点-我对在理论上是否可以做到这一点感兴趣。但是,在现代台式机上实时可行的方法是理想的。

2
我应该使用什么数据来测试FFT实现,我应该期望什么精度?
我正在努力实现FFT算法,并且很好奇所建议的输入测试数据使用的建议-以及为什么!-以及预期的精度。 在测试输入中,我在Usenet的旧帖子中找到了一些指导,我将其作为答案发布,但这只是一个人的建议,没有太多理由-我还没有找到看起来像是可靠答案的任何内容。 在准确性方面,维基百科说该错误应该是O(e log N),但是从绝对意义上来说,合理的期望是什么? 编辑添加:实际测试采用的形式是我存储了输入数据数组和预先计算的“参考”输出数据以进行比较,因此我不一定需要封闭形式的解决方案。
14 fft 

3
如何仅高效地计算零填充FFT的低系数
我有一种算法,可以将序列零填充到4N,执行FFT,并且仅使用生成的4N中最低的N个频率点。 这似乎是很多浪费的工作,有什么想法可以更快地完成此工作吗?
14 fft  dft 

3
何时在分析中使用DTFT与DFT(及其反函数)?
在我的许多读物中,每当有作者提及在数字信号的频域(变换)中工作时,他们通常会采用DFT或DTFT(当然还有它们的对应反函数)。不同的作者倾向于彼此合作。 我还不能真正确定与此有关的特定模式。这样,在解释算法时为什么要选择DTFT而不是DFT?一个在哪里帮助您呢?

2
零填充奇数长度FFT时的实值振铃
因此,我正在尝试编写一个频域内插器,将信号的频率响应零填充并进行逆变换。我必须处理两种情况: 均匀长度的响应- 由于模棱两可,因此必须拆分 bin。因此,我复制频谱的负数部分,并在两者之间添加零。Fs/2Fs/2F_s/2n*(interp-1)-1 奇数长的响应-没有 bin,所以只需将正/负频率分开,然后在它们之间插入零。Fs/2Fs/2F_s/2n*(interp-1) 可以在此处看到执行零填充的代码 // Copy negative frequency components to end of buffer and zero out middle // inp - input buffer of complex floats // n - transform size // interp - interpolation amount void zero_pad_freq(cfloat_t *inp, size_t n, size_t interp) { if ((n % 2) …
13 fft  interpolation  c 

2
频域互相关的直观解释
根据互相关定理:两个信号之间的互相关等于一个信号的傅立叶变换乘以另一信号的傅立叶变换的复共轭的乘积。完成此操作后,当我们乘积信号的ift时,我们得到一个峰值,该峰值指示两个信号之间的偏移。 我不明白这是怎么回事?为什么我会得到一个峰值,指示两个信号之间的偏移。我从以下网址获得了数学信息:http : //mathworld.wolfram.com/Cross-CorrelationTheorem.html,但我无法理解这在直觉上是什么意思。有人可以提供一些解释或指向正确的文档吗? 谢谢!

3
离散傅立叶变换:DC术语实际上是什么?
我目前正在玩Matlab中的离散傅立叶变换(DFT),以从图像中提取特征。我想完全理解我使用的概念。我已经阅读了几种解释,例如this,但是到目前为止,还没有真正解释“ DC术语”的含义。我所知道的是DFT的第一个术语可以写成: 这里 是旋转因子。 这意味着第一项(DC项)是一个没有频率的振幅。 有人可以解释为什么将其称为DC术语吗?它与“直流电”有什么关系?DC术语的相关性是什么?什么时候有用,又有什么用?
13 image  matlab  fft  dft 

4
本书推荐-用C语言编写DSP代码
我正在寻找一本不错的书,该书简单地展示了您如何实际使用C语言编写代码,以完成所有主要的DSP方法。 FFT。 低通和高通滤波器。 自相关。 噪音处理。 以及DSP的所有基础知识,从理论到真正的C语言代码。 例如,我有1000个样本,现在我想对其进行FFT,去除噪声,然后返回时间轴。 有什么好东西可以涵盖所有这些吗?

3
STFT和DWT(小波)
STFT可以成功用于声音数据(例如带有.wav声音文件),以便进行某些频域修改(例如:噪声消除)。 在N=441000(即以采样率10秒fs=44100),,的情况下windowsize=4096,overlap=4STFT近似生成一个430x4096数组(第一坐标:时间帧,第二坐标:频率箱)。可以在此数组上进行修改,并可以使用重叠加法(*)进行重构。 小波怎么可能做类似的事情?(DWT),即得到a x b具有a时间帧和b频率段的相似形状数组,对此数组进行一些修改,最后恢复信号?怎么样 ?小波等于重叠叠加是什么?这里涉及的Python函数是什么(我还没有找到使用pyWavelets... 进行音频修改的简单示例)? (*):这是可以使用的STFT框架: signal = stft.Stft(x, 4096, 4) # x is the input modified_signal = np.zeros(signal.shape, dtype=np.complex) for i in xrange(signal.shape[0]): # Process each STFT frame modified_signal[i, :] = signal[i, :] * ..... # here do something in order to # modify the signal in …
12 fft  wavelet  dft  python  stft 

2
什么时候应该计算PSD而不是普通FFT幅度谱?
我有一个30秒的语音信号,它以44.1 kHz的频率采样。现在,我想展示一下语音的频率。但是,我不确定这样做的最佳方法是什么。似乎有时会计算傅立叶变换的绝对值,有时会计算功率谱密度。如果我理解正确,后者的工作原理就是将信号分成几部分,逐份进行FFT,然后以某种方式将它们相加。窗口函数以某种方式涉及。您能为我澄清一下吗?我是DSP的新手。

7
如果信号的频率位于两个bin中心之间,则获得其峰值
请假设以下内容: 信号基频的频率已使用FFT和某些频率估计方法进行了估计,位于两个bin中心之间 采样频率是固定的 计算工作不是问题 知道了频率,估计信号基波相应峰值的最准确方法是什么? 一种方法可能是对时间信号进行零填充以提高FFT分辨率,从而使bin中心更接近估计的频率。在这种情况下,我不确定的一点是我是否可以根据需要进行零填充,或者这样做是否有缺点。另一个是在零填充后我应该选择哪个bin中心作为我从中获取峰值的那个(因为即使在零填充之后,也可能不会精确地达到目标频率)。 但是,我也想知道是否存在另一种方法可以提供更好的结果,例如一种估计器,该估计器使用周围两个bin中心的峰值来估计感兴趣频率处的峰值。

3
FFT时域平均值与频点平均值
我对生理数据进行了多次试验。我正在进行基于频率的分析,以分析某些特定频率下的功率(振幅)。是对多个相等长度的试验进行平均,然后对平均信号进行一次FFT,而不是针对每个试验计算FFT,然后对频点进行平均,是否相同?实际上,我发现情况并非如此。 具体来说,信号自然具有很强的1 / f分量,如果我计算每个单独试验的FFT,然后平均每个频点的幅度(实数部分),就会增强这一点。这两个相等吗?有正确的做事方法吗?还是应该在什么原则条件下在时域平均与频点平均之间进行选择?
12 fft 

4
您可以在不增加窗口大小的情况下提高FFT的频率分辨率吗?
我想使用STFT进行多音高分析。我意识到检测信号中存在的部分仅仅是开始。我还是有问题。 假设我已经以“ CD”频率采样了信号44100Hz。在1024样本窗口中,我得到的频点分辨率为22500Hz/512=43Hz。这仅足以识别诸如C5 = 523.251Hz和的高钢琴音符 C#5 = 554.365。 我曾经认为这1024是一个很大的窗口。但是也许不是,通常使用较大的窗口来检测局部图像吗? 除了增加窗口大小之外,是否可以使用其他方法来提高频率分辨率,这会使时间分辨率恶化?我想到了两种方法: 方法1: 使用带通滤波器将信号划分为多个频带(例如0-11.25Hz和11.25-22.5Hz)。 对较高的频段进行下采样,以使原来的高频现在变为低频(第二个频段也是如此11.25-22.5Hz -> 0Hz-22.5Hz)-不确定是否可行。 Concat生成的带有已调整标签的垃圾箱集。 方法2: 使用限制不断增加的一系列低通滤波器。 在增加的频率范围上执行FFT。 对于每个频率,请使用最佳分辨率(来自包含该频率的第一个FFT的仓)。 这将使低频具有更好的分辨率,但是我认为这是可以的,因为对于更高的音符,频率差异会更大。 对于这个问题,我将不胜感激。 我也在这里阅读: 窗口大小,采样率如何影响FFT基音估计? 关于改善峰提取结果的方法。我认为会尝试使用它。
12 filters  fft  pitch  stft 

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.