|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Sergey Andrianov 2:5020/1507.400 06 Feb 2003 09:46:26 To : Zahar Kiselev Subject : Re: нулевые значения функции -------------------------------------------------------------------------------- Однажды 01-Feb-03 в 02:45 Zahar Kiselev (2:5030/382.1) написал All по поводу -=- нулевые значения функции -=- ZK> Есть оцифрованный сигнал. ZK> Форма - что-то типа сильно ограниченной и слегка зашумленной синусоиды. ZK> Или так может выглядеть прямоугольный меандр с сильно заваленными фронтами ZK> и тоже добавлением шума. ZK> Hа один период сигнала есть штук пять-семь измеренных точек в зависимости ZK> от частоты сигнала в этот момент. ZK> По этой информации требуется вычислить моменты перехода сигнала через ноль. ZK> Почитал в справочинике про интерполяцию - там везде рассматривается задача ZK> нахождения значения функции в какой-то точке исходя из известных значений в ZK> других точках. То есть ищут "Y" при каком-то заданном "X". А как "выернуть ZK> наоборот" эту формулу, чтобы она давала значение Х такое, которое будет ZK> соответствовать Y=0 ? Очевидно, прохождение через 0 случается тогода, когда знаки двух соседних отсчетов не совпадают. Точка пересечения находится линейной интерполяцией. ZK> Сколько соседних точек имеет смысл использовать для вычисления при ZK> вышеупомянутой форме сигнала? Ровно 2. Kонечно можно было бы использовать и более высокий порядок интерполяции, но в рассмативаемом случае (а - сигнал зашумлен, б - присутствует ограничение, т.е. нелинейное преобразование) это приведет лишь ненужным осцилляциям с нарушением монотонности. Могут даже случиться ложные "переходы через 0". Аналогично вряд ли целесообразно применять фильтрацию - можно заработать фазовые сдвиги и, соответственно, систематическую ошибку. ZK> В идеале хотелось бы написать функцию, которая на входе берет массив, в ZK> котором несколько значений сигнала, а на выходе выдает массив значений ZK> времени, когда сигнал переходит через ноль или же этот массив не содержит ZK> ничего если функция считает, что сигнал через ноль ни разу не переходил. ZK> Значения времени предполагаются дробными, так как переход через ноль в ZK> общем случае не будет совпадать с моментом измерения. for i := 0 to N-2 do if (y[i]*y[i+1]) < 0 then {произв.отрицательно при несовпадении знаков} writeln('CrossPoint: ',x[i]*abs(y[i+1])/abs(y[i]-y[i+1]) + x[i+1]*abs(y[i])/abs(y[i]-y[i+1])); Естественно это без оптимизации - чтобы было понятнее, о чем идет речь. До свидания, в 09:05 MSK Sergey --- * Origin: Sergiev Posad (2:5020/1507.400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/52053E4220E3.html, оценка из 5, голосов 10
|