W
-why-
Привет!
Может кто знает или писал сам быстрое преобразование Фурье с прореживанием по частоте?
Пытаюсь сделать уже ооочень долго :-\ или может кто наметанным галзом скажет в чем ошибка:
for (k = n-1; k >0; k--)
{
double Wk = (-2 * 3.14159) / (1 << k);
for (int j = 0; j < (1 << (n-k)); j++)
{
for (int r = 0; r < (1 << (k - 1)); r++)
{
int u = j * (1 << k) + r;
int v = u + (1 << (k - 1));
double Wkr = Wk * r;
double Sn = sin(Wkr);
double Cs = cos(Wkr);
double ReY1 = re + re[v];
double ImY1 = im + im[v];
double ReY2 = Cs * re - Sn * im - Cs * re[v] + Sn * im[v];
double ImY2 = Sn * re + Cs * im - Sn * re[v] - Cs * im[v];
re = ReY1;
re[v] = ReY2;
im = ImY1;
im[v] = ImY2;
}
}
}
Буду очень благодарна
Может кто знает или писал сам быстрое преобразование Фурье с прореживанием по частоте?
Пытаюсь сделать уже ооочень долго :-\ или может кто наметанным галзом скажет в чем ошибка:
for (k = n-1; k >0; k--)
{
double Wk = (-2 * 3.14159) / (1 << k);
for (int j = 0; j < (1 << (n-k)); j++)
{
for (int r = 0; r < (1 << (k - 1)); r++)
{
int u = j * (1 << k) + r;
int v = u + (1 << (k - 1));
double Wkr = Wk * r;
double Sn = sin(Wkr);
double Cs = cos(Wkr);
double ReY1 = re + re[v];
double ImY1 = im + im[v];
double ReY2 = Cs * re - Sn * im - Cs * re[v] + Sn * im[v];
double ImY2 = Sn * re + Cs * im - Sn * re[v] - Cs * im[v];
re = ReY1;
re[v] = ReY2;
im = ImY1;
im[v] = ImY2;
}
}
}
Буду очень благодарна