[問題] FFT
我這邊有一段FFT程式 可是他規定是只能用256點去跑
請問各位 有沒有辦法再這段程式的基礎上改成可以給定任意點呢?
void FFT(double *segment, double **X)
{
int M = 8 , iN = Dim;
int i, j, k, limit_1, limit_2, limit_3, ij, il;
double farg, fpi = 3.1415926, fCos, fSin, fbr, fbi, fcr, fci, fx1, fx2;
double *fxr = new double[window + 1];
double *fxi = new double[window + 1];
//****************** 將segment[256] => fxr[window] *************//
for (i = 1; i <= window; i++)
fxr[i] = fxi[i] = 0; //初始化fxr[window], fxi[window]
for (i = 1; i <= window; i++)
fxr[i] = segment[i - 1]; //將原始信號的256點個值 => fxr[window]
// ***************** 傅立葉主程式開始 *************//
limit_1 = iN - 1;
limit_2 = iN / 2;
ij = 1;
// **************** 重排輸入值 ************//
for (i = 1; i <= limit_1; i++)
{
if ((float) i <= ((float) ij - 0.01))
{
fx1 = fxr[ij];
fx2 = fxi[ij];
fxr[ij] = fxr[i];
fxi[ij] = fxi[i];
fxr[i] = fx1;
fxi[i] = fx2;
}
il = limit_2;
while(1)
{
if ((float)il > ((float) (ij) - 0.01))
break;
ij -= il;
il /=2;
}
ij += il;
}
// **************** 傅立葉轉換 *************** //
for(i = 1; i <= M; i++) // (limit_1, limit_2) =>(1, 256) (2, 128) (4, 64) (8, 32)..(256,1)
{
limit_1 = (int) pow(2, i - 1);
limit_2 = (int) pow(2, (M - i));
for(j = 1; j <= limit_2; j++) //(1:256) (1:128) (1:64)..........(1:1)
{
for (k = 1; k <= limit_1; k++)
{
limit_3 = (k - 1) + (j - 1) * 2 * limit_1 + 1; //Odd Points
//*******************
fbr = fxr[limit_3];
fbi = fxi[limit_3];
fcr = fxr[limit_3 + limit_1];
fci = fxi[limit_3 + limit_1];
//*******************
farg = 2.0 * fpi * (k - 1) * limit_2 / iN;
fCos = cosl (farg);
fSin = sinl (farg);
//*******************
fx1 = fcr * fCos + fci * fSin ;
fx2 = fci * fCos + (0 - fcr) * fSin ; //
fxr[limit_3] = fbr + fx1;
fxi[limit_3] = fbi + fx2;
fxr[limit_3 + limit_1] = fbr - fx1;
fxi[limit_3 + limit_1] = fbi - fx2;
}
}
}
//
for (i = 1; i <= window; i++)
{
X[0][i - 1] = fxr[i];
X[1][i - 1] = fxi[i];
}
//cout << "X[] = " << X[0][0];
delete[] fxr, fxi;
}
謝謝各位了!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.120.90.193
推
03/29 20:14, , 1F
03/29 20:14, 1F
推
03/30 00:22, , 2F
03/30 00:22, 2F
→
03/30 00:23, , 3F
03/30 00:23, 3F
→
03/30 00:23, , 4F
03/30 00:23, 4F
→
03/30 22:45, , 5F
03/30 22:45, 5F
→
03/31 13:05, , 6F
03/31 13:05, 6F
→
03/31 13:28, , 7F
03/31 13:28, 7F
→
03/31 22:18, , 8F
03/31 22:18, 8F
推
04/02 14:23, , 9F
04/02 14:23, 9F
→
04/02 16:32, , 10F
04/02 16:32, 10F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章