草庐IT

kiss_fft_cpx

全部标签

c# - C# 的 FFT 误差

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

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

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等值...请帮我..

java - JTransforms FFT 图像

我有一张图像,我想使用FFT将其转换为频域,Java似乎缺少这方面的库,但我找到了两个。一个是JTransforms,另一个不太知名,没有名字。对于不太知名的2D只能具有二次幂的长度值,但具有简单易用的方法,如FastFourierTransform.fastFT(real,imaginary,true);二维double组充满了每个像素值,虚部是一个大小相同且充满零的二维数组。boolean值将取决于正向或反向变换。这对我来说很有意义并且它起作用除了两个要求的力量破坏了我所做的任何变换(我最初在图像周围添加了黑色空间以使其适合最接近的两个力量),我正在努力解决如何对JTransfor

java - 从音频文件计算 FFT

之前,我问过关于GetfrequencywavaudiousingFFTandComplexclass的问题,在那里,我需要从AudioRecord输入计算FFT值-->来自麦克风,我以某种方式设法获得了FFT值...现在我需要从我之前保存的*.wav音频文件计算FFT值,我将音频保存在项目“res”文件夹内的“raw”文件夹中我仍然使用相同的FFT类:http://www.cs.princeton.edu/introcs/97data/FFT.java与之配套的复杂类:http://introcs.cs.princeton.edu/java/97data/Complex.java.h

音频筑基:一文搞懂DFT/FFT/DCT/MDCT的区别

音频筑基:一文搞懂DFT/FFT/DCT/MDCT的区别前言DFT/FFT/STFT/DCT/MDCT一句话对比DFT/FFT/STFT/DCT/MDCT的因果扩展资料傅立叶变换是连接时域与频域的上帝之桥。——《漫画傅里叶解析》前言音频信号处理中时常用到时频域转换,这里简单总结下常用的DFT、FFT、STFT、MDCT的区别。开始前,先感谢傅里叶大哥,是他给了我们一碗饭吃。DFT/FFT/STFT/DCT/MDCT一句话对比DFT,DiscreteFourierTransform,离散傅里叶变换,完成离散点时频域转换用途:推广时频域原理,理论上保证了计算机可用性FFT,FastFourierT

java - 快速傅里叶变换(FFT)输入输出分析Java音频文件的频率?

我必须使用FFT来分析音频文件的频率。但我不知道输入和输出是什么。如果要绘制频谱的音频文件,是否必须使用1维、2维或3维数组?有人可以向我推荐J2ME上的FFT库吗? 最佳答案 @thongcaoloi,关于输入数据维度的简单答案是:您需要一维数据。现在我将解释这意味着什么。因为你想分析音频数据,你输入到离散傅里叶变换(DFT或FFT),是一个一维的实数序列,代表音频信号随时间变化的电压,而你的音频文件是随时间变化的电压的数字表示。您的音频文件是通过以固定采样率(也称为采样频率)对连续音频信号的电压进行采样而生成的,对于CD质量音频

java - 使用 JTransforms 库使用 FFT 计算自相关

我正在尝试使用以下代码计算时间序列中样本窗口的自相关。我正在对该窗口应用FFT,然后计算实部和虚部的大小并将虚部设置为零,最后对其进行逆变换以获得自相关:DoubleFFT_1Dfft=newDoubleFFT_1D(magCnt);fft.realForward(magFFT);magFFT[0]=(magFFT[0]*magFFT[0]);for(inti=1;i第一个问题是:可以看出这段代码将自相关结果映射到[0,1]范围内,虽然相关性应该在-1和1之间。当然很容易将结果映射到[-1,1]范围,但我不确定此映射是否正确。我们如何解释生成的autocorr数组中的值?其次,通过这段

java - 在 Java 中使用 FFT 从 .wav 创建频谱图

经过研究和大量的反复试验,我得出了一个观点,我可以构建一个我认为它具有对与错元素的频谱图。1.首先,我将.wav文件读入一个字节数组并仅提取数据部分。2.我将字节数组转换为一个double组,它取左右声道的平均值。我还注意到1个channel的1个样本由2个字节组成。所以,4个字节变成1个double。3.对于2的特定窗口大小,我从here应用FFT并获得频域中的振幅。这是频谱图图像的垂直strip。4.我用相同的窗口大小重复执行此操作并重叠整个数据并获得频谱图。下面是将.wav读入double数组的代码importjava.io.IOException;importjava.nio.