저는 기본 주파수를 실시간으로 얻고 고역 통과 필터를 구현하기 위해 fft를했습니다.fft에서 ifft를 계산하는 방법은 무엇입니까?
이제 필터를 적용한 후 .wav 파일로 녹음 할 수있게하려고합니다.
먼저 fft를 반전시켜야하며 이것이 내 질문입니다. 이 작업을 수행하기위한 단계는 무엇입니까?
이 project에 정의 된 FFT를 사용합니다. 정확한 FFT 및 IFFT 정의에 따라 차이는 상수이다
using System;
using System.Collections.Generic;
using System.Text;
namespace SoundLog
{
public class FourierTransform
{
static private int n, nu;
static private int BitReverse(int j)
{
int j2;
int j1 = j;
int k = 0;
for (int i = 1; i <= nu; i++)
{
j2 = j1/2;
k = 2 * k + j1 - 2 * j2;
j1 = j2;
}
return k;
}
static public double[] FFT(ref double[] x)
{
// Assume n is a power of 2
n = x.Length;
nu = (int)(Math.Log(n)/Math.Log(2));
int n2 = n/2;
int nu1 = nu - 1;
double[] xre = new double[n];
double[] xim = new double[n];
double[] magnitude = new double[n2];
double[] decibel = new double[n2];
double tr, ti, p, arg, c, s;
for (int i = 0; i < n; i++)
{
xre[i] = x[i];
xim[i] = 0.0f;
}
int k = 0;
for (int l = 1; l <= nu; l++)
{
while (k < n)
{
for (int i = 1; i <= n2; i++)
{
p = BitReverse(k >> nu1);
arg = 2 * (double)Math.PI * p/n;
c = (double)Math.Cos(arg);
s = (double)Math.Sin(arg);
tr = xre[k + n2] * c + xim[k + n2] * s;
ti = xim[k + n2] * c - xre[k + n2] * s;
xre[k + n2] = xre[k] - tr;
xim[k + n2] = xim[k] - ti;
xre[k] += tr;
xim[k] += ti;
k++;
}
k += n2;
}
k = 0;
nu1--;
n2 = n2/2;
}
k = 0;
int r;
while (k < n)
{
r = BitReverse(k);
if (r > k)
{
tr = xre[k];
ti = xim[k];
xre[k] = xre[r];
xim[k] = xim[r];
xre[r] = tr;
xim[r] = ti;
}
k++;
}
for (int i = 0; i < n/2; i++)
//magnitude[i] = (float)(Math.Sqrt((xre[i] * xre[i]) + (xim[i] * xim[i])));
decibel[i] = 10.0 * Math.Log10((float)(Math.Sqrt((xre[i] * xre[i]) + (xim[i] * xim[i]))));
//return magnitude;
return decibel;
}
}
}
속도는 문제가되지 않습니다. C#에서이를 수행해야하며 FFTW에는 C++ 만 있습니다. plz를 게시 한 파일을 어떻게 변환 할 수 있습니까? –
순방향 및 역방향 fts에는 두 가지 차이점이 있습니다. 역함수는 1/n으로 조정해야하며 지수는 음수이어야합니다. 그래서 inverse ft에 대해서 (당신의 구현을 이해한다고 가정 할 때) arg의 부호를 바꾸고 결과의 각 점에 1/n을 곱하십시오. –
또한 모든 imaginaries를 0으로 설정하여 실제 데이터에 복잡한 fft를 사용하고 있습니다. 이것은 수학적으로 건전하지만 낭비입니다. 실제 가치있는 fft에 대한 정보는 Numerical Recipes 웹 페이지 (nr.com)를보십시오. –