Jump to content
    

Офлафн оценка скорости по дискретным отсчетам

Исходные данные - есть дискретные квантованные отсчеты некоторого сигнала. Мы знаем, что этот сигнал - выход некоторой механической системы, т.е. как минимум дважды дифференцируем. Более того, если надо, то мы можем априорно предположить некоторые ограничения на первую и вторую производные. Уровень квантования сигнала достаточно маленький по сравнению с диапазоном изменений сигнала. Частота дискретизации достаточно велика по сравнению со скоростью самого процесса. Скажем, дискретизация 1кГц при том, что в составе сигнала нет существенных компонент с частотами выше 50Гц.

Записанный процесс достаточно длинный - несколько сотен тысяч отсчетов, сигнал имеет совершенно произвольную форму (с учетом дифференцируемости), но преобладают низкие частоты.

 

Задача - как по имеющимся отсчетам оценить скорость? Какие есть оффлайновые методы? Если кто-то сможет дать ссылку на какой-то перечень или обзор, то было бы здорово. Рабочая среда - матлаб.

 

Я бы решал задачу так - прорядил бы отсчеты, взяв, например, каждый 20-й. Полученные отсчеты описал бы каким-то сплайном, а затем по найденному сплайну вычисли бы значения производной во всех исходных точках. Плюс - в матлабе это делается в две строчки, и если исходный сигнал достаточно гладкий, то получается приемлемая точность. Но при таком методе есть недостаток - выпадают промежуточные, прореженные точки, т.е. часть информации пренебрегается. Кто как решает, на какие методы стоит посмотреть?

 

Share this post


Link to post
Share on other sites

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

а зачем вообще там сплайны? считайте скорость да фильтруйте

Share this post


Link to post
Share on other sites

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

 

А что вы имеете ввиду "считайте скорость и фильтруйте"? Вопрос - как именно считать и как фильтровать?

 

Дополню:

Так как квантование все-таки есть, то обработка экспериментальных (как и модельных) данных показывает - брать каждый отсчет даже для сглаживающего сплайна - нехорошо. Допустим, у нас некоторая небольшая постоянная скорость. Исходный сигнал представляет из себя, соответственно. прямую. Однако из-за квантования он выглядит как пять точек на одном уровне, ступенька, пять точек на следующему уровне, ступенька, и так далее. Если все точки использовать для сглаживающего сплайна, то он будет стремиться минимизировать расстояние до всех точек и аппроксимирующая кривая будет так же похожа на ступеньки, только сглаженные. В результате оценка производной по такой кривой весьма паршивая. Если же прорядить исходный сигнал и построить сглаживающий сплайн по каждому k-ому отсчету, то это затруднение исчезает при хорошем выборе k.

 

Еще дополнительно: Разобрался, что проблема может быть решена выбором настраиваемого параметра при сглаживающей интерполяции. Т.е., почти такая же такая же степень свободы, как и шаг прореживания, разве что шаг можно (при большом желании) выбрать неравномерным. Есть ли какие-то рекомендации по выбору параметра в сглаживании сплайном, кроме как пробовать и смотреть?

Share this post


Link to post
Share on other sites

А что вы имеете ввиду "считайте скорость и фильтруйте"? Вопрос - как именно считать и как фильтровать?

Y' = (Y-Y[i-1]) / (X-X[i-1])

а дальше любой ФНЧ, z = z + (y-z)/K

 

 

 

Share this post


Link to post
Share on other sites

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

И это не оффлайн метод. :)

Share this post


Link to post
Share on other sites

Сначала ФНЧ, затем дифференцировать. ФНЧ ограничит полосу и не даст развалиться дифференцированию.

 

ps

Естественно, без прореживания. Прореживание без фильтрации смысла не имеет в данном случае.

Edited by thermit

Share this post


Link to post
Share on other sites

Использование ФНЧ приведет к появлению задержки, что, естественно, нежелательно. Конечно, я могу пропустить сигнал через фильтр типа s/(a*s+1) или аналогичный, но смысл? Это никаким образом не использует того, что у нас уже есть все отсчеты и что мы работаем оффлайн и можем себе позволить трудоемкие вычисления.

 

Share this post


Link to post
Share on other sites

Если Вы работаете offline, то что Вам до задержки. Она фиксирована и строго определена фильтром.

Share this post


Link to post
Share on other sites

Сначала ФНЧ, затем дифференцировать. ФНЧ ограничит полосу и не даст развалиться дифференцированию.
операции линейные, от смены очерёдности результат никак не поменяется.

Использование ФНЧ приведет к появлению задержки, что, естественно, нежелательно. Конечно, я могу пропустить сигнал через фильтр типа s/(a*s+1) или аналогичный, но смысл? Это никаким образом не использует того, что у нас уже есть все отсчеты и что мы работаем оффлайн и можем себе позволить трудоемкие вычисления.

сделайте КИХ фильтр (у него ФЧХ линейная), сдвинув его на пол длинны, никакой задержки не будет.

 

Share this post


Link to post
Share on other sites

Если Вы работаете offline, то что Вам до задержки. Она фиксирована и строго определена фильтром.

Простите, какая задержка фиксирована и строго определна фильтром, если мы говорим о произвольной глакой форме сигнала? UPD. Простите, понял. Вы тоже про КИХ говорили?

 

сделайте КИХ фильтр (у него ФЧХ линейная), сдвинув его на пол длинны, никакой задержки не будет.

Сдвинув его на половину длины чего? Простите, я вас не понимаю. UPD: Ага, кажется понял на счет сдвига на половину и устранение задержки. Какую форму фильтра стоит выбрать? Я сейчас поэкспериментировал с различными дифференциаторами, которые мне Matlab fdatool считает, дошел до порядка 300, но результат по качеству весьм далек от сглаживающего сплайна с хорошо выбранным коэффициентом сглаживания или с прореживанием.

Share this post


Link to post
Share on other sites

_pv:

операции линейные, от смены очерёдности результат никак не поменяется.

 

да об чем речь? Конечно не поменяется. Но тут хотят прореживать/интерполировать/дифференцировать. Дык этот подход есть есть лажа.

 

 

RHnd:

Сдвинув его на половину длины чего? Простите, я вас не понимаю. UPD: Ага, кажется понял на счет сдвига на половину и устранение задержки. Какую форму фильтра стоит выбрать?

 

 

На половину длины импульсной х-ки фильтра. Форма никакой роли не играет (если речь идет о фнч)

Share this post


Link to post
Share on other sites

Но тут хотят прореживать/интерполировать/дифференцировать. Дык этот подход есть есть лажа.

Почему?

 

Форма никакой роли не играет (если речь идет о фнч)

Под формой я имею ввиду форму АЧХ фильтра. Как так роли не играет... я, конечно, в ЦОС не особо, не моя тематика, но эксперименты показывают, что очень даже играет. На сколько я понимаю, АЧХ в полосе пропускания должна быть как можно ближе к единице и все отклонения будут сказываться.

Скажите, пожалуйста, что именно вы имеете ввиду, когда говорите "дифференцировать" применительно к задаче? Просто первая разность?

 

 

Вспомнил, что в матлабе есть такая замечательная функция filtfilt! Можно обойтись без КИХ фильтров, использовать БИХ. Вроде, результат должен стать получше.

 

 

Share this post


Link to post
Share on other sites

Вспомнил, что в матлабе есть такая замечательная функция filtfilt! Можно обойтись без КИХ фильтров, использовать БИХ. Вроде, результат должен стать получше.

у БИХ фазовая характеристика не линейная, соответственно задержки будут не постоянны, как в случае с КИХ, а будут зависеть от формы сигнала.

Share this post


Link to post
Share on other sites

у БИХ фазовая характеристика не линейная, соответственно задержки будут не постоянны, как в случае с КИХ, а будут зависеть от формы сигнала.

На сколько я понимаю, именно это и компенсируется функцией filtfilt. Разве нет?

Share this post


Link to post
Share on other sites

RHnd:

Почему?

 

Да зачем прореживать, чтобы потом интерполировать? Тем более, сплайном.

Оставляем сигнал на исходной частоте дискретизации, обрабатываем фнч с полосой равной полосе полезного сигнала (тем самым уменьшаем мощность шума) и потом обрабатываем ких с их [0.5 -0.5]. Чх такого фильтра близка к х-ке дифференциатора вблизи 0. Если сигнал проредить, придется использовать широкополосный дифференциатор.

 

Если обработка оффлайн, можно использовать бих фнч, но с 2-й фильтрацией сигнала (после 1-ой фильтрации сигнал фильтруется еще раз задом на перед). Фаза сигнала после такой фильтрации не изменится, но будет квадрат ачх. Матлабский аналог filtfilt.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...