- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 Ooura 的 FFT 分析一些白噪声(持续时间为 75368 smp,有 44100 个噪声样本)。我得到的结果很奇怪:即使除以样本数,我的结果也小于 1.0,这是怎么回事?
我正在使用 RDFT 和逆 RDFT
实际上我有这样的幅度结果,例如:
m1 3.47157
m1 8.50726
m1 29.0233
m1 9.64618
m1 43.2969
m1 60.7396
m1 48.3495
m1 35.8336
m1 32.7611
m1 24.1925
m1 26.8244
m1 17.9448
m1 29.7936
m1 23.1585
m1 15.1243
m1 8.89132
m1 14.6676
m1 18.1515
m1 27.5357
m1 5.6661
m1 19.0589
FFT 大小为 4096,峰值为:79.119
我希望结果只接近一个数字(比如 1.0 或其他)
和如果我对幅度应用一个简单的乘法(如音量),声音就会像使用一个奇怪的过滤器一样被改变...
这是我用来将 re/im 转换为幅度/相位的函数:
double SuperFFT::_GetPhase(double real, double imaginary)
{
return atan2(imaginary, real);
}
double SuperFFT::_GetMagnitude(double real, double imaginary)
{
return sqrt((real * real) + (imaginary * imaginary));
}
相位似乎很好(保持在 -PI 和 PI 之间)
如果我通过一个 240hz 的简单正弦波(持续时间 75368 个样本),我有这些幅度
m1 0.262643
m1 0.369384
m1 0.543982
m1 0.851133
m1 1.44518
m1 2.76168
m1 6.37861
m1 21.2081
m1 239.998
m1 775.211
m1 585.819
m1 63.0807
m1 12.06
m1 4.37815
m1 2.07803
m1 1.14897
m1 0.701917
m1 0.460003
m1 0.317885
m1 0.228747
如果我除以持续时间再乘以 100,这接近于 1,这正常吗?
为什么当我乘以幅度时声音变坏了?我的 FFT 是坏了还是遗漏了什么?
谢谢你的帮助
编辑:我当然使用 OLA
杰夫
最佳答案
FFT 实现通常忽略缩放,允许在 FFT 期间发生一些“自然”值乘法。这是因为缩放通常不重要(例如,您计算出的相位不会随缩放而改变,并且信号的某些方面之间的关系不取决于缩放)并且因为调整缩放可能更有效操作中的一个点,而不是每个单独的 FFT、逆 FFT 和其他操作。
您可以通过将输入数组的第一个元素设置为 1 并将所有其他元素设置为 0、执行 FFT 并检查结果来找到您正在使用的 FFT 引起的缩放。每个输出元素的实部很可能会有一个 1。在这种情况下,输入的总“能量”乘以 N,其中 N 是输入元素的数量。
(由于您似乎在进行实数到复数的转换,这里有一些微妙之处:N 个实数输入产生 N 个复数输出。但是,它们是对称的。对于其中两个,元素是其自身的复数共轭,这迫使它是真实的。对于剩下的 N-2,其中一半是另一半的共轭。因此,大多数 FFT 实现只返回两个实数和 N/2-1 复数元素。剩下的结果是隐含:缺失的两个虚部为零,缺失的N/2-1个复数元素是返回元素的共轭。在计算信号总能量时,我指的是从所有N个结果中计算出的能量,而不仅仅是明确返回的那些。)
任何一个输出元素可以具有的最大可能幅度是所有输入的总能量。当输入是一个完美的正弦波(具有任何相位)时会发生这种情况:它的所有能量都在一个频率上,没有任何能量在任何其他频率上。
因此,要计算任何输出元素可能具有的最大值,请将输入可能具有的最大能量乘以 FFT 的缩放比例。然后,要对输出进行归一化处理,使输出量级不超过 1,请乘以该乘积的倒数。
关于c++ - FFT 噩梦),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18152648/
我知道这个问题已经被问过了,但我没有找到任何方法来阅读现有代码来找到解决我的问题的方法。我的一些应用程序用户对不同类型的 UnsatifiedLinkError 有经验: Caused by: jav
好的,我完成了。我不明白为什么会出现此错误: rake features 这不可能是我无法连接到 mysql 原因: rake db:migrate 完美运行。 我一直有这个错误: rake feat
我有一个容器 DIV position:relative。容纳一切然后一左一栏,一右一栏,经典布局。它们都绝对定位在这个相对#Main 中。我希望权利是流动的,所以我说 top: 0px;左:280p
嗨,你猜怎么着,我有一个 IE 定位问题!这是在 8 中,所以天知道其他版本中发生了什么(稍后检查) 两个盒子都调用同一个类,为什么IE这么难? 这是它的外观: 这是它的样子: CSS:(为了便于阅读
我无法理解正则表达式,感谢任何帮助! 我有很多字符串数据,可能包含也可能不包含字符串“1/10”或“2/10”或“2/18”等。基本上,分子和分母都可以变化。让事情变得更复杂的是,一些数据输入运算符(
我正在使用 Ooura 的 FFT 分析一些白噪声(持续时间为 75368 smp,有 44100 个噪声样本)。我得到的结果很奇怪:即使除以样本数,我的结果也小于 1.0,这是怎么回事? 我正在
前一周我一直在尝试让 WCF 的安全形式在 Azure 上运行,但一切都无济于事!我的用例非常简单。我想调用云中的 WCF 端点并传递消息以排队等待辅助角色。除此之外,我想限制对预先授权的用户的访问,
我正在尝试实现 Twitter 的自定义登录 View (我不想要那个 UIWebView)。我已经下载了很多类(class),但到目前为止我对此感到噩梦。现在我正在尝试让 Twitter + oAu
很高兴找到这样一个有用的网站,里面有天才成员(member)。一段时间以来,我一直在尝试寻找解决此 SQLITE 问题的方法。谷歌没有帮助我,除了找到这个网站。 SQL 查询在同一数据库的 MSAcc
我有一个基于 Spring Framework 的应用程序,我们之前已成功部署它并正在添加新功能。我们的开发机器是 JDK6 和 Tomcat7。我们正在使用 Spring 3.1.0.M2。旧代码使
各位业内资深人士, 我是一名大三学生,开始了我的第一个暑期编程实习,而且我已经不知所措了。我工作的公司从另一家公司购买了一个巨大的应用程序,该公司自 90 年代初以来一直在缓慢地扩展和修改它。该解决方
我知道你在想什么,另一个 netbeans xdebug 帖子? 好吧,我已经尝试了我在其他帖子中看到的所有内容,但似乎没有任何效果。这是我的设置: 操作系统:Ubuntu 9.10 PHP:5.2.
好的,所以我尝试在该程序的对话中实现一个计时器,该计时器在进入下一个对话之前暂停一秒钟。当我尝试这个时,java会抛出很多错误,例如:非法的表达式开始,;预期,.class 预期,并在解析时到达文件末
我在使用 Spring Jdbc 从数据库检索数据时遇到问题。这是我的问题: 我的 DAO 上有一个 getData() 方法,该方法应该从某些 select 语句的结果中返回一行。再次调用时,get
我的主类是一个包含图形组件的窗口,其中包括 JTable。 我创建了一个公共(public)类ContextMenu,它是JPopupMenu的自定义实现,并包含多个JMenuItem。 我已在 JT
The best way to illustrate this question is with...a Fiddle! 在您访问 fiddle 之前,请注意最灰色的元素后面有文本,该文本位于具有边框
我似乎无法处理收到的 CSV。这是银行生成的文件,看起来像这样: "000,""PLN"",""XYZ"",""2011-08-31"",""2011-08-31"",""0,00""" 1,""E"
一次提交 2447 个文件时,我完全陷入了 SVN 错误。我在 Windows 7 64 位上使用 TortoiseSVN(最新版本)。 事实是,一些文件是在 Mac 上创建的,而另一些文件是在 PC
我将从我要完成的事情开始。 我有一个 ListFragment,与 LoaderCallbacks 关联以从数据库检索数据。使用 AsyncTask 下载数据,并插入到数据库中。当用户到达列表底部时,
当我在探查器中运行以下代码时,我得到一个 char[] 和 byte[],它们会不断累积,直到程序因 Java 堆内存不足异常而崩溃。有人能告诉我为什么吗?也许我在做一些根本性的错误。 package
我是一名优秀的程序员,十分优秀!