如何计算 DFT 中每个 bin 的能量?

2024-01-23

我正在测试我对离散傅里叶变换的了解。

我现在测试的是如何使用DFT计算波的中心频率。

为此,我使用以下代码创建正弦数据:

// create a 100 Hz wave with a sampling rate of 512 samples per second
var data : [Double] = []
for i in 0...511 {
  let t = Double(i) * 100/256
  let f = 10 * sin(2 * Double.pi * t)
  data.append(f)
}

然后我做一个DWTdata并得到两个向量,一个包含实部,一个包含虚部。

我知道每个向量里面都会有这个:

  1. 数据有512个样本
  2. 因此,从 0 到 256 的项目将是正频率
  3. 以及从 257 到 511 的项目,负频率
  4. 我可以丢弃负频率并保留正频率(从 bin 0 到 255)。
  5. Bin 0 是 DC。我可以丢弃它。
  6. Bin 255 将为 256Hz,因为它是采样率的一半。

为了看看我是否正确,我检查了 256 个容器并寻找最高的震级。具有最高震级的 bin 将是K根据以下公式,我可以找到信号频率:

freq = (K + 1) * fps / N

K+1因为我的第一个索引是0我已经从我的阵列中丢弃了 DC,并且在哪里N是样本数。

最大的问题是:如何计算每个垃圾箱的能量?

E[i] = sqrt(realPart[i] * realPart[i] + imaginaryPart[i] * imaginaryPart[i])

????


上面的轮廓看起来很重要......来计算给定垃圾箱的大小

mag = 2.0 * math.Sqrt(real*real+imag*imag) / number_of_samples

其中 number_of_samples 是输入 fft 调用的数组长度...执行 fft 的美妙之处在于,您可以对该组(频率、幅度、相移)应用傅立叶逆变换以返回源时域信号...这样做是验证您的流程是否正确的好方法

傅里叶变换和傅里叶逆变换的魔力 - 一个例子:

你从一个浮点数组开始,它表示像音频、股票市场指数或任何时间序列这样摆动的东西……这是时域表示,因为它是曲线上的一组点,其中时间是从左到右的 X 轴上下 Y 轴是曲线的高度...然后您将此数组输入到 fft api 调用中,该调用将在其频域表示中返回相同的信息...与不同的表示形式...在频率域中,您将拥有一个数组,其中元素 0 始终是每秒 0 个周期的频率(直流偏移),然后当您迭代数组时,您可以使用公式递增频率

incr_freq := sample_rate / number_of_samples

因此,在 fft 调用生成的复数数组中,每个元素都是给定频率的数据,其中每个元素只是一个复数...简单来说,这个频域表示只是一组频率,每个频率由一个复数体现数字(A + Bi),可用于计算该频率的幅度和相移

现在是有趣的部分......如果您将此频域数组发送到傅立叶逆变换中,您将返回时域表示形式的原始数据

myAudio_TD(时域)-->发送到fft-->myAudio_FD(频域)

然后你可以自由地做相反的事情,如下所示

myAudio_FD(频率域)-->发送到逆fft-->myAudio_TD(时域)

请注意,在此过程中,您从数组 myAudio_TD 开始,该数组被发送到 fft 调用,然后发送到反向 fft 调用,该调用神奇地返回给您原始的 myAudio_TD

要查看从 fft 调用返回的复杂数组的完整解析,其中包括奈奎斯特极限的概念,请参阅从 FFT 中获取幅度最高的频率 https://stackoverflow.com/questions/55698193/get-frequency-with-highest-amplitude-from-fft/55699449#55699449

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何计算 DFT 中每个 bin 的能量? 的相关文章

随机推荐

  • maven更新后java版本自动更改为java 1.5

    我使用 eclipse 作为 IDE 当我右键单击该项目 然后单击 maven 时 将我的 java 版本更改为 1 5 这是我到目前为止所做的 我遵循了此处列出的所有步骤 http qussay com 2013 09 13 solvin
  • 使用 DrawingContext 绘制“L”

    我需要绘制 使用System Windows Media DrawingContext a L 在 WPF 中 最佳的继续方式是什么 画2条线 画一个PolyLineSegment 不知道如何 drawContext DrawLine my
  • 如何在 Ruby 正则表达式中使用 AND

    我在使用 Ruby 正则表达式时遇到问题 如何在 ruby 中执行 AND 正则表达式 ex cat and dog cat dog I just want to match cat and dog 您可以使用积极的前瞻来执行类似 AND
  • 将日志发送到 Crashlytics 而不会导致应用程序崩溃

    如何让 Crashlytics 接收日志而不让我的应用程序崩溃 我有以下代码 if context managedObjectContext save error CLS LOG error description 发生错误时 我希望 Cr
  • Jsoup 遇到特殊 HTML 符号问题,‘ — 等

    我有一些 HTML 字符串 我通过 Jsoup 放置这些内容 这样我就可以向所有 href 和 src 属性添加一些内容 效果很好 然而 我注意到对于一些特殊的 HTML 字符 Jsoup 正在将它们从 ldquo 到实际角色 我输出之前和
  • 在线程之间同步/发送数据

    该应用程序是用 Delphi XE 编写的 我有两个类 TBoss 和 TWorker 它们都基于 Thread TBoss是一个单实例线程 它启动后会创建大约20个TWorker线程 当 Boss 创建 TWorker 实例时 它会为其分
  • 在 PHP 中解析时需要在 JSON feed 中保留反斜杠

    以下是我们的 JSON 源之一的示例 wiggins id bkstir 04380 wdr q alertcolour yellow infohvr infoclk warning 10 warnhvr There are 10 file
  • 学习使用线程来防止数据竞争情况

    以下代码应该通过在公共端使用同步方法来防止数据争用 但由于某种原因 输出始终是 19915 19980 如果不是数据竞赛的话不应该是20000吗 public class SyncVarDataRace extends Thread pri
  • 在调试和生产模式之间切换

    开发时调试应用程序的一种快速方法是编写如下语句 print data 有没有办法在切换到生产模式时停止打印 这样就不会影响应用程序的性能 例如 布尔值作为开关 您可以使用debugPrint代替print仅用于开发日志记录 debugPri
  • inverse_of 在 mongoid 中意味着什么?

    What inverse of是什么意思 通过使用它而不是没有它的关联我能得到什么 在简单关系中 两个模型只能以一种方式关联 并且关系的名称自动是与其相关的模型的名称 这在大多数情况下都很好 但并不总是足够 inverse of允许您指定您
  • 如何修改主机头

    我正在尝试开发一个 chrome 扩展 它可以根据某些请求设置 主机 标头 但对于是否可以修改 host 标头 文档是矛盾的 这两个问题都表明a 这不应该是可能的 b 这是不可能的https code google com p chromi
  • 文本链接不会在 Safari 中使用名称通过 JavaScript 提交表单

    我正在使用 Safari 5 0 3 我的 html 中有一个表单
  • 这第二个新的是什么?

    第二行是什么 在回答另一个问题时看到的 int x new int 1 int y new x int 第二行之后 x 和 y 具有相同的值 指向相同的位置 y x 和第二行有什么区别 它像构造函数还是什么 It s 安置新 http en
  • 无法自动装配。存在多个“DataSource”类型的 bean

    我正在尝试通过以下方式自动连接数据库 Autowired private DataSource dataSource 我的数据源中有一个application yml spring profiles active dev spring pr
  • ASP.NET -> WCF 服务需要 Windows 身份验证

    我的任务是构建一个基本的管理应用程序 该应用程序需要一个 ASP NET 前端 该前端使用 WCF 与许多后端服务进行通信 一项要求是应用程序的用户使用 Windows 身份验证进行身份验证 如果应用程序逻辑包含在 ASP NET 应用程序
  • 如何改变CKEditor的编辑器大小?

    由于它是一个 textarea 我在 html 属性中尝试了 cols 50 但它不起作用 另外 我从上一个问题中找到了答案 他说我可以通过添加来做到这一点 CKEDITOR instances myinstance resize 1000
  • “JqueryStatic”类型的值不可调用

    我正在开发一个打字稿项目 当我调用 时 编辑器显示 JqueryStatic 类型的值不可调用 我安装了 jquery definetelyTyped 包 并且还引用了 jquery d ts 文件 Resharper 9 0 不支持 Ty
  • 如何使用zxing条码扫描库解码EAN128条码

    我正在尝试使用 zxing 条码扫描库读取 EAN128 条码 我在 Xamarin 共享项目中使用它 如下所示 private async void OnButtonForBarcodeReadPressed object sender
  • 为什么 pfpd.add_font() 中没有加载字体?

    我正在尝试将 pfpdf 库中的字体添加到生成的 pdf 文件中 但将 DejaVuSans ttf 移动到 data 目录后 无法再找到字体 这是一个简化的代码 from fpdf import FPDF import os pdf FP
  • 如何计算 DFT 中每个 bin 的能量?

    我正在测试我对离散傅里叶变换的了解 我现在测试的是如何使用DFT计算波的中心频率 为此 我使用以下代码创建正弦数据 create a 100 Hz wave with a sampling rate of 512 samples per s