Быстрый выбор между интегральной версией cos и инфинитезимальной

biblioteka

Задана относительная точность tol (например tol=1e-4)
Нужно для худшего случая выбрать между такими версиями:
Интегральной (точной): cosI=(sin(c.*b)-sin(c.*a./(c*(b-a; и
Инфинитезимальной (приближение, точечное значение): cosI=cos(c.*(b-a)/2);
Как это быстро сделать (нужно для автоматического применения)
Исправил нормировку для Интегральной версии (конечно нормировка на отрезок интегрирования)

biblioteka

Нужно для следующей задачи:
Есть фильтр, использующий тригонометрические функции (синус и косинус).
Есть временной ряд t1,t2,...,tn и соответствующие значения F1,F2,...,Fn
На самом меде ti- это время центра временного отрезка с deltaTi=bi-ai, ti=(bi-ai)/2.
Очевидно, что для высоких частот, мы уже не можем пренебречь разностью между cos(c*ti) и её интегральной версией int(cos(c*tai,bi). Для низких же частот эта разность пренебрежима и хочется быстро определить для заданной относительной точности максимальную компоненту для которой следует вычислять интеграл.
Это важно для сигналов около Найквестовского предела, где интегральная версия очень сильно отличается от инфинитезимальной:
Фильтр и сейчас хорошо работает, но хочется ещё и истинную форму сигнала восстановить, т.к. это важно для интерпретации сигнала:
Сигнал до фильтрации (маленькая его часть):

После фильтрации:
 
Хорошо видно, что сигнал имеет разрешение всего несколько отсчётов. Естественно эти отсчёты не мгновенные измерения. Так время интернирования для события масштабом 90 минут составляет 30 минут. В этом режиме мы не при каких условиях не можем пренебречь интегрированием.
В тоже время на больших масштабах или при более высоком врменном разрешении мы спокойно можем пренебречь этим фактом:
Сигнал до фильтрации (маленькая его часть) (другой сигнал):

После фильтрации:

Замечу, что форма обоих сигналов приблизительно одинакова, хотя масштабы и амплитуды разные.

TANNNNA

Можно попробовать с помощью фильтров lowpass / highpass разделить сигнал на две компоненты относительно некоторой частоты. Для каждой компоненты вычислить энергию сигнала, где больше, тот фильтр и применять.

TANNNNA

Еще вариант, вычислить автокорреляцию сигнала. Если период меньше определенного значения, то применять более точный метод.

biblioteka

разделить сигнал на две компоненты относительно некоторой частоты.
В том то и вопрос, что нужно найти ту пограничную частоту, при которой переходить от интегральной версии к простой. Она будет явно зависеть от заданной относительной точности.

TANNNNA

можно ли тогда уточнить, у тебя есть только исходный сигнал и тебе надо привести его к хорошему виду, или известны параметры генератора, то есть как часто появляются пики на чистом сигнале.

TANNNNA

"относительная точность", я так понимаю, это аналог того, что известно "отношение сигнал/шум" для отфильтрованного сигнала?

Sensor4ik

Иди от низких частот к высоким, пользуясь простой версией. Каждые, скажем, 10 шагов по частоте для проверки вычисляй точную. Как только разница больше tol, переходи на точную. Уже будет лучше, чем только простая версия. Если хочется совсем красиво, можешь заложить в алгоритм, чтобы он вернулся по частотам на 10 шагов назад (будем считать, что нам лень точно определять частоту, проще с запасом вернуться на 10 шагов назад) и с того момента все пересчитал по точной формуле.

biblioteka

В общем решение оказалось не очень сложным.

Вводя понятие относительной ошибки и зная где разность максимальная (в 0-е для косинуса) мы используя Тэелоровское разложение (его первую компоненту) мы находим что частоты которые меньше нулевой (самой высокочастотной (Найквестовской в
nu0/nu=sqrt(2/(3*d*pi*a, где d- относительная точность и a=D/2 - половина отрезка интегрирования.
Правильность расчётов показывает следующий график для относительной точности d=0.0001 и a=0.96

Теперь осталось решить вопрос с соответствующей нормировкой для компонент.
Так для чисто численных методов эта нормировка не нужна, но для правильной интерпретации амплитуды она скорее всего нужна. Особенно это важно знать для субнайквестовских частот.
Оставить комментарий
Имя или ник:
Комментарий: