RHnd 0 August 15, 2013 Posted August 15, 2013 · Report post Исходные данные - есть дискретные квантованные отсчеты некоторого сигнала. Мы знаем, что этот сигнал - выход некоторой механической системы, т.е. как минимум дважды дифференцируем. Более того, если надо, то мы можем априорно предположить некоторые ограничения на первую и вторую производные. Уровень квантования сигнала достаточно маленький по сравнению с диапазоном изменений сигнала. Частота дискретизации достаточно велика по сравнению со скоростью самого процесса. Скажем, дискретизация 1кГц при том, что в составе сигнала нет существенных компонент с частотами выше 50Гц. Записанный процесс достаточно длинный - несколько сотен тысяч отсчетов, сигнал имеет совершенно произвольную форму (с учетом дифференцируемости), но преобладают низкие частоты. Задача - как по имеющимся отсчетам оценить скорость? Какие есть оффлайновые методы? Если кто-то сможет дать ссылку на какой-то перечень или обзор, то было бы здорово. Рабочая среда - матлаб. Я бы решал задачу так - прорядил бы отсчеты, взяв, например, каждый 20-й. Полученные отсчеты описал бы каким-то сплайном, а затем по найденному сплайну вычисли бы значения производной во всех исходных точках. Плюс - в матлабе это делается в две строчки, и если исходный сигнал достаточно гладкий, то получается приемлемая точность. Но при таком методе есть недостаток - выпадают промежуточные, прореженные точки, т.е. часть информации пренебрегается. Кто как решает, на какие методы стоит посмотреть? Quote Share this post Link to post Share on other sites More sharing options...
_pv 107 August 15, 2013 Posted August 15, 2013 · Report post тогда сразу натягивать на все точки кубический сплайн со сглаживанием, это когда натягивается новая сетка, на этой сетке как и в обычном сплайне строятся полиномы 3й степени, с теми же неприрывностями производных, только наименьшими квадратами по исходным данным и только в наименьших квадратах еще квадрат второй производной добавляется, чтобы резко не менялся. а зачем вообще там сплайны? считайте скорость да фильтруйте Quote Share this post Link to post Share on other sites More sharing options...
RHnd 0 August 15, 2013 Posted August 15, 2013 · Report post Спасибо за наводку на сглаживающий сплайн. Не очень понял, что вы имеете ввиду под "натягиванием новой сетки", но попробую разобраться. А что вы имеете ввиду "считайте скорость и фильтруйте"? Вопрос - как именно считать и как фильтровать? Дополню: Так как квантование все-таки есть, то обработка экспериментальных (как и модельных) данных показывает - брать каждый отсчет даже для сглаживающего сплайна - нехорошо. Допустим, у нас некоторая небольшая постоянная скорость. Исходный сигнал представляет из себя, соответственно. прямую. Однако из-за квантования он выглядит как пять точек на одном уровне, ступенька, пять точек на следующему уровне, ступенька, и так далее. Если все точки использовать для сглаживающего сплайна, то он будет стремиться минимизировать расстояние до всех точек и аппроксимирующая кривая будет так же похожа на ступеньки, только сглаженные. В результате оценка производной по такой кривой весьма паршивая. Если же прорядить исходный сигнал и построить сглаживающий сплайн по каждому k-ому отсчету, то это затруднение исчезает при хорошем выборе k. Еще дополнительно: Разобрался, что проблема может быть решена выбором настраиваемого параметра при сглаживающей интерполяции. Т.е., почти такая же такая же степень свободы, как и шаг прореживания, разве что шаг можно (при большом желании) выбрать неравномерным. Есть ли какие-то рекомендации по выбору параметра в сглаживании сплайном, кроме как пробовать и смотреть? Quote Share this post Link to post Share on other sites More sharing options...
_pv 107 August 16, 2013 Posted August 16, 2013 · Report post А что вы имеете ввиду "считайте скорость и фильтруйте"? Вопрос - как именно считать и как фильтровать? Y' = (Y-Y[i-1]) / (X-X[i-1]) а дальше любой ФНЧ, z = z + (y-z)/K Quote Share this post Link to post Share on other sites More sharing options...
RHnd 0 August 16, 2013 Posted August 16, 2013 · Report post Это работало бы, если бы пренебрежимо малое квантование. А так после вычисления первой разности мы получим чудовищно зашумленный сигналы, до уровня непригодности. А дальнейшая фильтровка приведет к существенной задержке. И это не оффлайн метод. :) Quote Share this post Link to post Share on other sites More sharing options...
thermit 5 August 16, 2013 Posted August 16, 2013 (edited) · Report post Сначала ФНЧ, затем дифференцировать. ФНЧ ограничит полосу и не даст развалиться дифференцированию. ps Естественно, без прореживания. Прореживание без фильтрации смысла не имеет в данном случае. Edited August 16, 2013 by thermit Quote Share this post Link to post Share on other sites More sharing options...
RHnd 0 August 16, 2013 Posted August 16, 2013 · Report post Использование ФНЧ приведет к появлению задержки, что, естественно, нежелательно. Конечно, я могу пропустить сигнал через фильтр типа s/(a*s+1) или аналогичный, но смысл? Это никаким образом не использует того, что у нас уже есть все отсчеты и что мы работаем оффлайн и можем себе позволить трудоемкие вычисления. Quote Share this post Link to post Share on other sites More sharing options...
Alex11 13 August 16, 2013 Posted August 16, 2013 · Report post Если Вы работаете offline, то что Вам до задержки. Она фиксирована и строго определена фильтром. Quote Share this post Link to post Share on other sites More sharing options...
_pv 107 August 16, 2013 Posted August 16, 2013 · Report post Сначала ФНЧ, затем дифференцировать. ФНЧ ограничит полосу и не даст развалиться дифференцированию.операции линейные, от смены очерёдности результат никак не поменяется. Использование ФНЧ приведет к появлению задержки, что, естественно, нежелательно. Конечно, я могу пропустить сигнал через фильтр типа s/(a*s+1) или аналогичный, но смысл? Это никаким образом не использует того, что у нас уже есть все отсчеты и что мы работаем оффлайн и можем себе позволить трудоемкие вычисления. сделайте КИХ фильтр (у него ФЧХ линейная), сдвинув его на пол длинны, никакой задержки не будет. Quote Share this post Link to post Share on other sites More sharing options...
RHnd 0 August 16, 2013 Posted August 16, 2013 · Report post Если Вы работаете offline, то что Вам до задержки. Она фиксирована и строго определена фильтром. Простите, какая задержка фиксирована и строго определна фильтром, если мы говорим о произвольной глакой форме сигнала? UPD. Простите, понял. Вы тоже про КИХ говорили? сделайте КИХ фильтр (у него ФЧХ линейная), сдвинув его на пол длинны, никакой задержки не будет. Сдвинув его на половину длины чего? Простите, я вас не понимаю. UPD: Ага, кажется понял на счет сдвига на половину и устранение задержки. Какую форму фильтра стоит выбрать? Я сейчас поэкспериментировал с различными дифференциаторами, которые мне Matlab fdatool считает, дошел до порядка 300, но результат по качеству весьм далек от сглаживающего сплайна с хорошо выбранным коэффициентом сглаживания или с прореживанием. Quote Share this post Link to post Share on other sites More sharing options...
thermit 5 August 16, 2013 Posted August 16, 2013 · Report post _pv: операции линейные, от смены очерёдности результат никак не поменяется. да об чем речь? Конечно не поменяется. Но тут хотят прореживать/интерполировать/дифференцировать. Дык этот подход есть есть лажа. RHnd: Сдвинув его на половину длины чего? Простите, я вас не понимаю. UPD: Ага, кажется понял на счет сдвига на половину и устранение задержки. Какую форму фильтра стоит выбрать? На половину длины импульсной х-ки фильтра. Форма никакой роли не играет (если речь идет о фнч) Quote Share this post Link to post Share on other sites More sharing options...
RHnd 0 August 16, 2013 Posted August 16, 2013 · Report post Но тут хотят прореживать/интерполировать/дифференцировать. Дык этот подход есть есть лажа. Почему? Форма никакой роли не играет (если речь идет о фнч) Под формой я имею ввиду форму АЧХ фильтра. Как так роли не играет... я, конечно, в ЦОС не особо, не моя тематика, но эксперименты показывают, что очень даже играет. На сколько я понимаю, АЧХ в полосе пропускания должна быть как можно ближе к единице и все отклонения будут сказываться. Скажите, пожалуйста, что именно вы имеете ввиду, когда говорите "дифференцировать" применительно к задаче? Просто первая разность? Вспомнил, что в матлабе есть такая замечательная функция filtfilt! Можно обойтись без КИХ фильтров, использовать БИХ. Вроде, результат должен стать получше. Quote Share this post Link to post Share on other sites More sharing options...
_pv 107 August 17, 2013 Posted August 17, 2013 · Report post Вспомнил, что в матлабе есть такая замечательная функция filtfilt! Можно обойтись без КИХ фильтров, использовать БИХ. Вроде, результат должен стать получше. у БИХ фазовая характеристика не линейная, соответственно задержки будут не постоянны, как в случае с КИХ, а будут зависеть от формы сигнала. Quote Share this post Link to post Share on other sites More sharing options...
RHnd 0 August 17, 2013 Posted August 17, 2013 · Report post у БИХ фазовая характеристика не линейная, соответственно задержки будут не постоянны, как в случае с КИХ, а будут зависеть от формы сигнала. На сколько я понимаю, именно это и компенсируется функцией filtfilt. Разве нет? Quote Share this post Link to post Share on other sites More sharing options...
thermit 5 August 17, 2013 Posted August 17, 2013 · Report post RHnd: Почему? Да зачем прореживать, чтобы потом интерполировать? Тем более, сплайном. Оставляем сигнал на исходной частоте дискретизации, обрабатываем фнч с полосой равной полосе полезного сигнала (тем самым уменьшаем мощность шума) и потом обрабатываем ких с их [0.5 -0.5]. Чх такого фильтра близка к х-ке дифференциатора вблизи 0. Если сигнал проредить, придется использовать широкополосный дифференциатор. Если обработка оффлайн, можно использовать бих фнч, но с 2-й фильтрацией сигнала (после 1-ой фильтрации сигнал фильтруется еще раз задом на перед). Фаза сигнала после такой фильтрации не изменится, но будет квадрат ачх. Матлабский аналог filtfilt. Quote Share this post Link to post Share on other sites More sharing options...