|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Igor Rudym 2:5015/128.33 24 Dec 2002 12:01:29 To : All Subject : Инверсный фильтр --------------------------------------------------------------------------------
Кто нибудь реализовывал субж?
фомула следующая
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;
}
Hо это не работает! Даже когда k берется следующим образом:
k(x-s) = 1, если x-s=0 и 0, иначе.
(единичная матрица, в этом случае g = y)
Hо в таком случае наблюдается интересная вещь:
Правильные значения находяться в позиции rW[0], но это только для единичной
матрицы k.
Hужное значение 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)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/39313e084186.html, оценка из 5, голосов 10
|