Инверсный фильтр

From
Igor Rudym (2:5015/128.33)
To
All
Date
2002-12-24T11:01:29Z
Area
RU.ALGORITHMS
Доброго времени суток, All !

Кто нибудь реализовывал субж?

фомула следующая
W(w) = G(w)/K(w)

где  G = FFT(g); g = k*y;
y - начальный вектор, k - орератор преобразования (например смаза)

y(s) = FFT(W)    - восстановленый вектор (должен быть равен начальному)

реализую следующим образом:

CVector Restore(CVector g)
{
    CComplexVector G;
    CComplexVector W
    CVector k;
    CComplexVector K;
    CVector y;
    G = FFT(g);
    for(int s=0;s<N;s++) {
        //заполняем вектор k
        for(int x=0;x<N;x++)
            k[x] = Kfunc(x-s);
        K = FFT(k);
        //заполняем вектор W
        for(int omega=0;omega<N;omega++)
            W[omega] = G[omega]/K[omega];

        //обратное преобразование Фурье
        rW = RFFT(W);

        y[s] = rW[s];
    }
    return y;
}

Но это не работает! Даже когда k берется следующим образом:
k(x-s) = 1, если x-s=0 и 0, иначе.
(единичная матрица, в этом случае g = y)
Но в таком случае наблюдается интересная вещь:
Правильные значения находяться в позиции rW[0], но это только для единичной
матрицы k.
Нужное значение k:
    | 1/d, если -d<x-s<=0
k   {
    | 0 , иначе
где d - шаг смаза.

Счастливо. Igor

... e-mail: riv@pisem.net
--- GoldED/W32 3.0.1
 * Origin: Только у нас снижены цены на бесплатную доставку! (С (2:5015/128.33)