|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Evgenij Masherov 2:5020/175.2 24 Dec 2002 15:22:29 To : Igor Rudym Subject : Инверсный фильтр -------------------------------------------------------------------------------- Tue Dec 24 2002 11:01, Igor Rudym wrote to All: IR> фомула следующая IR> W(w) = G(w)/K(w) IR> где G = FFT(g); g = k*y; IR> y - начальный вектор, k - орератор преобразования (например смаза) IR> y(s) = FFT(W) - восстановленый вектор (должен быть равен начальному) IR> реализую следующим образом: IR> CVector Restore(CVector g) IR> { IR> CComplexVector G; IR> CComplexVector W IR> CVector k; IR> CComplexVector K; IR> CVector y; IR> G = FFT(g); IR> for(int s=0;s<N;s++) { IR> //заполняем вектор k IR> for(int x=0;x<N;x++) IR> k[x] = Kfunc(x-s); IR> K = FFT(k); IR> //заполняем вектор W IR> for(int omega=0;omega<N;omega++) IR> W[omega] = G[omega]/K[omega]; IR> //обратное преобразование Фурье IR> rW = RFFT(W); IR> y[s] = rW[s]; IR> } IR> return y; IR> } IR> Hо это не работает! Даже когда k берется следующим образом: IR> k(x-s) = 1, если x-s=0 и 0, иначе. IR> (единичная матрица, в этом случае g = y) IR> Hо в таком случае наблюдается интересная вещь: IR> Правильные значения находяться в позиции rW[0], но это только для IR> единичной матрицы k. IR> Hужное значение k: IR> | 1/d, если -d<x-s<=0 IR> k { IR> | 0 , иначе IR> где d - шаг смаза. Это известные штуки, связанные с тем, что БПФ считает данные циклическими. Hужно делать сие через свертку с наложением. IR> ... e-mail: riv@pisem.net Евгений Машеров АКА СанитарЖеня --- ifmail v.2.15dev5 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/33008210dd70.html, оценка из 5, голосов 10
|