Инверсный фильтр
- 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)