标签: fft

帮助使用 FFT 来确定音频样本的频率

我目前正在开发打击乐教程程序。该程序要求我可以确定正在播放什么鼓,为此我将分析鼓录音的频率并查看频率是否在给定范围内。

到目前为止,我一直在为 FFT 使用 Apache math commons 实现(http://commons.apache.org/math/),但我的问题是,一旦我执行了 FFT,我如何使用结果数组来计算频率包含在信号中?

注意:我也尝试过使用自相关进行试验,但它似乎不适用于来自架子鼓的样本

任何有关如何确定正在击中的鼓的帮助或替代建议将不胜感激

编辑:自从写这篇文章以来,我发现了一个很棒的在线课程,关于在 Java 中实现 FFT 以进行时间/频率变换在 Java 中的频谱分析

java signal-processing fft apache-commons frequency-analysis

2
推荐指数
1
解决办法
2719
查看次数

如何从FFT获得基频?

我正在开发一把闪光吉他,发现麦克风数据频率的唯一明显方法似乎是使用 FFT。然而,经过大约 30 个小时的研究后,我无法找到最好的方法。我应该使用谐波积谱 (HPS)、倒谱还是最大似然?调谐器必须显示 25 到 3000Hz 的频率。

另外,如果有人知道一些准备找到基本频率的开源代码,请告诉我。我可以将它翻译成 ActionScript。

谢谢!

fft microphone frequency frequency-analysis guitar

2
推荐指数
1
解决办法
2万
查看次数

将实部和虚部 FFT 输出转换为频率和幅度

我正在设计一个嵌入在 FPGA 芯片上的实时音频分析器。完成的系统将读取实时音频流以及 X 个最流行频率的输出频率和幅度对。

到目前为止,我已经设法实现了 FFT,但它的当前输出只是每个窗口的实部和虚部,我想知道的是,如何将其转换为频率和幅度对?

我一直在阅读有关 FFT 的内容,我看到了如何将它们转换为幅度和相位关系,但我需要一种格式,让没有复杂数学知识的人可以阅读!

谢谢


感谢您的快速回复!

我现在得到的 FFT 输出是连续的实数和虚数对流。我不确定是否将它们分解成与我的输入数据包(64 个值)相同大小的数据包,并将它们视为一个数组,或者单独处理它们。

采样率,我没有问题。当我自己配置​​ FFT 时,我知道它正在运行 50MHz 的全局时钟。至于数组索引(如果输出当然是数组......),我不知道。

如果我们说输出是一系列 64 个复数值的一维数组:

1) 如何找到数组索引 [i]?

2)每个数组会返回单个频率部分还是多个频率部分?

非常感谢您的帮助!没有它我会迷路的。

math fft frequency-analysis

2
推荐指数
1
解决办法
1万
查看次数

如何在OpenCV中将高斯滤波器应用于DFT输出

我想在确定正确的填充尺寸后创建高斯高通滤波器(例如,如果图像宽度和高度是10X10,那么应该是20X20).

我有Matlab代码,我试图在OpenCV中移植,但我很难正确移植它.我的Matlab代码如下所示:

f1_seg = imread('thumb1-small-test.jpg');

Iori = f1_seg;


% Iori = imresize(Iori, 0.2);

%Convert to grayscale
I = Iori;
if length(size(I)) == 3
    I = rgb2gray(Iori);
end
% 

%Determine good padding for Fourier transform

PQ = paddedsize(size(I));

I = double(I);

%Create a Gaussian Highpass filter 5% the width of the Fourier transform

D0 = 0.05*PQ(1);

H = hpfilter('gaussian', PQ(1), PQ(2), D0);

% Calculate the discrete Fourier transform of the image.

F=fft2(double(I),size(H,1),size(H,2));

% Apply the highpass filter to the Fourier spectrum …
Run Code Online (Sandbox Code Playgroud)

opencv image fft gaussian dft

2
推荐指数
1
解决办法
1万
查看次数

图像处理中高斯LPF与理想LPF在频域上的差异

我正在使用相同的图像,我还需要从此链接中发布的图像中删除纹理

如何使用matlab从图像中删除纹理?

对此进行了讨论,我很困惑哪种滤波器(高斯LPF或理想低通)真正需要,这背后的原因是什么.哪种频率有助于这种纹理????请有人解释我!

matlab textures fft image-processing

2
推荐指数
1
解决办法
2445
查看次数

2D FFT中的3D FFT分解

基本上我使用FFT解决3D中的扩散方程,其中一种并行方法是在2D FFT中分解3D FFT.

如本文所述:https://cmb.ornl.gov/members/z8g/csproject-report.pdf

分解3d fft的方法是:

在xy方向上的2d fft在z方向上全局移位1d fft

基本上,我的问题是我不知道如何进行这种全局转置(因为我认为它是转换我假设的3d数组).有没有人来过这个?非常感谢.

parallel-processing performance fft

2
推荐指数
1
解决办法
2006
查看次数

以不同的分辨率获取输出 ifft

我正在尝试使用 scipy.fftp 在 python 中平滑和插入一些周期性数据。我已经设法获取数据的 fft,删除 wn 以上的高阶频率(通过执行 myfft[wn:-wn] = 0),然后使用 ifft(myfft) 重建数据的“平滑”版本。ifft 创建的数组与原始数据具有相同的点数。我如何使用该 fft 创建一个具有更多点的数组。

x = [i*2*np.pi/360 for i in range(0,360,30)]
data = np.sin(x)
#get fft
myfft = fftp.fft(data)
#kill feqs above wn
myfft[wn:-wn] = 0
#make new series
newdata = fftp.ifft(myfft)
Run Code Online (Sandbox Code Playgroud)

我还能够以与此处演示的相同分辨率手动重新创建系列使用 FFT 结果重新创建 时间序列数据而不使用 ifft

但是当我尝试提高 x 值数组的分辨率时,它也没有给我正确的答案。

提前致谢

尼尔

python fft scipy fftpack

2
推荐指数
1
解决办法
1093
查看次数

用loop测量cuFFT的执行时间,时间和循环次数的关系不是线性的

基本上我想通过将 cuFFT 执行函数放在 for 循环中来测量 cuFFT 函数的时间成本,这是我第一次使用的代码(这是 Nvidia 网站中用于 CUDA 的简单示例):

顺便说一下,我的CPU是Intel I7-3630QM 2.40GHz,GPU是Nvidia NVS 5200M。我使用的平台是Visual Studio 2012和CUDA 5.5,操作系统是Windows 7,64位。

#include "cuda_runtime.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <cufft.h>
#include <cuda.h>
#include <cuda_runtime_api.h>

#define NX 1024
#define NY 1024

int main(int argc, char** argv) {

int i;
int Iter;
cufftHandle plan;//A data structure named plan containing all information needed for Fourier Transform.
cufftComplex *data1;//data structure to store the real value and complex value of the …
Run Code Online (Sandbox Code Playgroud)

c c++ cuda fft visual-studio-2012

2
推荐指数
1
解决办法
634
查看次数

如何在matlab中找到主峰(fft)

我无法在此图中找到4个主要峰值

图形

信号值非常紧张,因为它们上升然后下降,使得很难找到最大值和它的索引.

function [peaks, locations] = findMaxs (mag, threshold)
len = length(mag);

prev = 1;
cur = 2;
next = 3;
k = 1; %number of peaks
while next < len
    if mag(cur) - mag(prev) > threshold
        if mag(cur) > mag(next)
            peaks(k) = mag(cur);
            fprintf('peak at %d\n', cur);
            k = k + 1;
        end
    end
    prev = cur;
    cur = next;
    next = next + 1;
end

end
Run Code Online (Sandbox Code Playgroud)

findpeaks()给了我太多结果,所以我正在使用这个功能.但是,如果我将阈值设置得太低,我会得到太多结果,如果我将它设置得太高,我会错过其中一个主要峰值.

我怎样才能做到这一点?

matlab signal-processing fft

2
推荐指数
1
解决办法
1万
查看次数

定制振荡器的任意波表

我需要为振荡器创建一个特定的自定义波形,以便与Web Audio API一起使用.

我有一个Javascript函数来输出所需的波形(对于任何给定的x,计算a在-1和1之间),绘制的结果如下所示:

自定义波形

但是,Web Audio API 文档只允许您通过createPeriodicWave函数创建基于谐波表的自定义波表,然后可以使用该表来配置自定义振荡器setPeriodicWave.是否有一种通用技术可用于根据我的波形函数计算谐波表?

fft sound-synthesis web-audio-api

2
推荐指数
1
解决办法
723
查看次数