草庐IT

ruby - 从文件中提取快速傅里叶变换数据

我正在构建一个应该在服务器上运行并分析声音文件的工具。我想在Ruby中执行此操作,因为我的所有其他工具也是用Ruby编写的。但我很难找到完成此任务的好方法。我发现的很多例子都是在做可视化和图形化的东西。我只需要FFT数据,仅此而已。我既需要获取音频数据,又需要对其进行FFT。我的最终目标是计算一些东西,例如所有频率(加权幅度)的均值/中值/众数、第25个百分位数和第75个百分位数、BPM,也许还有其他一些好的特性,以便以后能够将相似的声音聚集在一起.首先,我尝试使用ruby-audio和fftw3,但我从未将两者真正结合使用。文档也不好,所以我真的不知道有什么数据被洗牌了。接下来,我尝

javascript - 用于信号处理的奇函数?

喂!我希望这是一个可以接受的问题。通过一些用于信号处理的代码,我发现了一个奇怪的函数:letkInd=(k1,pow)=>{letk2=0;letk3=0;for(leti=0;i>1;k2=2*(k2-k3)+k1;k1=k3;}returnk2;};此函数在傅立叶变换计算结束时调用,以交换实数+虚数数组对中的索引:letfft=samples=>{letpow=Math.log2(samples.length);//`samples.length`isexpectedtobe2^int//...abunchofcodetogenerate`rBuff`and`iBuff`array

c++ - 频谱图 C++ 库

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭1年前。Improvethisquestion对于我当前的C++/Qt项目,我需要一个库(首选LGPL),它可以根据信号(基本上是double组)计算频谱图。我已经将Qwt用于GUI部分。有什么建议吗?谢谢。

linux - 为什么 Windows 上的 FFTW 比 Linux 上快?

我使用fftw库(fftw3.a、fftw3.lib)在Linux和Windows中编写了两个相同的程序,并计算了fftwf_execute的持续时间(m_wfpFFTplan)语句(16-fft).对于10000次运行:在Linux上:平均时间为0.9在Windows上:平均时间为0.12我很困惑为什么这在Windows上比在Linux上快九倍。处理器:Intel(R)Core(TM)i7CPU870@2.93GHz每个操作系统(WindowsXP32位和LinuxOpenSUSE11.432位)都安装在同一台机器上。我从互联网上下载了fftw.lib(适用于Windows),但不知

c# - C# 的 FFT 误差

我一直在试验FFT算法。我使用NAudio以及来自互联网的FFT算法的工作代码。根据我对性能的观察,生成的音调不准确。我将MIDI(从GuitarPro生成)转换为WAV文件(44.1khz,16位,单声道),其中包含从E2(最低吉他音符)开始到大约E6的音高级数。较低音符(E2-B3左右)的结果通常是非常错误的。但是达到C4有点正确,因为您已经可以看到正确的进程(下一个音符是C#4,然后是D4,等等)。但是,问题是检测到的音高比实际音高低半个音符(例如,C4应该是音符,但显示的是D#4)。您认为可能有什么问题?如有必要,我可以发布代码。非常感谢!我还在开始掌握DSP领域。编辑:这是我

c# - 这个傅立叶变换实现有什么问题

我正在尝试实现离散傅里叶变换,但它不起作用。我可能在某处写了一个错误,但我还没有找到它。基于以下公式:此函数执行第一个循环,遍历X0-Xn-1...publicComplex[]Transform(Complex[]data,boolreverse){vartransformed=newComplex[data.Length];for(vari=0;i而实际的计算,这可能就是错误所在。privateComplexTransformSingle(intk,Complex[]data,boolreverse){varsign=reverse?1.0:-1.0;vartransformed=

FFT之频率与幅值的确定

FFT也就是快速傅里叶变换。经过快速傅里叶变换后会得到一串复数。下面要讲两个问题:1、如何获取频率;2、如何获取幅值傅里叶变换并没对频率进行任何计算,频率只与采样率和进行傅里叶变换的点数相关。FFT变换完第一个数时0Hz频率,0Hz就是没有波动,没有波动有个专业一点的说法,叫直流分量。后面第二个复数对应的频率是0Hz+频谱分辨率,每隔一个加一次,频谱分辨率Δf计算公式如下:Δf=Fs/N式中,Fs为采样率,N为FFT的点数也是采样点数,因此只要Fs和N定了,频域的分辨率就定下来了。FFT变换后的第一个实数-直流分量FFT之后的第一个结果表示了时域信号中的直流成分的多少,直流信号代表和基准0的偏

基于VIVADO的FFT ip核详解和设计

FFT原理:FFT即快速傅里叶变换,一种计算离散傅里叶变换(DFT)的高效计算方法。FFTip核配置第一步配置相关系数,通道数,时钟频率等算法结构选择,基2-突发I/O结构,理由是占用资源少。而流水线I/O结构速度最快。然后配置输出数据模式和位宽,数据格式一般选择定点数型。这里有一些需要注意的地方选择单通道输出,则通道0高16位为虚部,低16位为实部。最后一步,逻辑单元和算法结构选择需要注意的问题其中FWD_INV的配置由s_axis

php - 计算两个声音样本之间的差异

我有两个声音样本(.WAV),我想找出它们之间的区别。我读过这个主题,我知道我应该使用FFT来做这样的事情。不幸的是,我找不到进行实际计算的方法。我正在搜索有关如何使用PHP进行此计算的PHP库或说明。我尝试用谷歌搜索这个问题,但没有找到相关的解决方案。 最佳答案 处理音频文件的PHP库:ffmpeg-php用于计算快速傅立叶变换(FFT)的PHP库:fft 关于php-计算两个声音样本之间的差异,我们在StackOverflow上找到一个类似的问题: htt

java - 使用 FFT 计算频率时的错误值

我得到错误的频率,我不明白为什么我得到错误的值。因为我已经按照指令计算,然后是stackoverflow。我用过FFThttp://introcs.cs.princeton.edu/java/97data/FFT.java.html和复杂的http://introcs.cs.princeton.edu/java/97data/Complex.java.htmlaudioRec.startRecording();audioRec.read(bufferByte,0,bufferSize);for(inti=0;i我正在获取21000、18976、40222、30283等值...请帮我..