Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Анализ сигнала произвольной формы |
Автор: df_3 5.8.2009, 15:20 |
Добрый день! Вопрос следующий: Как получить такие характеристики сигнала, представленного на картинке в приложении, как количество пиков и среднее расстояние между пиками. Сигнал снимается с осцилографа в виде файла со столбцом чисел. |
Автор: GoldFinch 5.8.2009, 17:00 |
для начала его бы отфильтровать неплохо, и смотреть на логарифмической шкале, тогда пики будут более явными |
Автор: cardinal 5.8.2009, 17:24 |
Пример здесь http://forum.vingrad.ru/index.php?showtopic=171436&view=findpost&p=1255274 |
Автор: GoldFinch 5.8.2009, 19:02 |
ну а когда данные преобразуются к нормальному виду - шум будет убран, можно будет сравнить сигнал с порогом, то что выше порога - пик - то что ниже - не-пик, посчитать число пиков и среднее расстояние |
Автор: df_3 6.8.2009, 10:49 |
пробую в матлабе. спасибо! |
Автор: df_3 6.8.2009, 11:16 | ||
cardinal, я пробую ваш код, приведеный по ссылке в результате получается тотже самый сигнал... Сначала пришлось сделать во входном файле 2 столбца time и value (изначально был только один). После этого файл читается матлабом правильно. Может я что-то не допонимаю в коде? или функция filter() не дает нужного результата для подобного типа данных?
|
Автор: cardinal 6.8.2009, 13:55 |
Попробуй другое значение Sampling time (более подходящее для твоего времени измерения). |
Автор: df_3 6.8.2009, 14:14 | ||
это типа
? |
Автор: cardinal 6.8.2009, 14:27 |
Я думаю лучше 0.0000004 и меньше... |
Автор: Pavia 6.8.2009, 14:46 |
df_3, Это нормально у него s имеет положительную степень H=1/(1+3*s); H=1*s^-1/(1*s^-1+3)=0.33*s^-1/(1+0.33*s^-1) Функции конечно поставили с ног на голову. Но это нечиго просто сигнал будет смещен в права на 1 пункт. А вот соотношение 0.92/0.08 даст интегратор на 10 отчетов. А вообще на первом ресунки ничего не видно на 1 пиксель 20 отчетов приходится. Только неясно зачем такой фильтр применять? Чтобы все данные исказить? На рисунке насколько я могу видить помимо пиков присутствует еше некоторая переодическая состовляющая вот ее я думаю надо отфильтровать, а пики считать через порог. Я вообще предлогаю Гистерезистный порог тогда о высоко частотном шуме ненадо будет беспокоится. |
Автор: cardinal 6.8.2009, 15:20 | ||
А для чего нужен RC-фильтр? Причем тут искажение? |
Автор: df_3 6.8.2009, 15:33 | ||
такое число потому, что это разрешение осцилографа в данном случае, который снимал данные. получился сигнал (см. приложение) Какие действия с ним сделать еще, что бы посчитать его характеристики? |
Автор: Pavia 6.8.2009, 15:45 |
df_3, Возьми еще немного меньше 0.0000004 а то остался еще шум. Тогда можно будет продифиренцировать и искать максимумы. |
Автор: df_3 6.8.2009, 15:53 |
вот чего я заметил. тот сигнал, что я привел, был сделан для семпла в 0.25... если ставить много меньше, то получается почти прямая типа y=x ![]() почему так? |
Автор: cardinal 6.8.2009, 16:02 |
df_3, нарисуй в Matlab'e две кривые рядом, чтобы понятней было, что происходит... |
Автор: df_3 6.8.2009, 16:16 |
нефильтрованную и фильтрованную? как нарисовать два графика в одном окне? |
Автор: cardinal 6.8.2009, 16:25 | ||
|
Автор: df_3 6.8.2009, 16:57 |
вот. сделал. |
Автор: cardinal 6.8.2009, 20:49 | ||
Тут
вместо тройки попробуй другие значения и увидишь разницу. Это есть значение RC и соответственно, чем больше оно, тем меньше верхних частот остается (читаем http://en.wikipedia.org/wiki/Low-pass_filter), то есть тем меньше высокочастотных помех в сигнале. |
Автор: df_3 7.8.2009, 00:32 | ||||
поигался с числом, почитал инфу. Подобрал семплирующий коэфициент на глаз. Но может существует способ его как-то оптимально подобрать при помощи каких-то методов? еще вопросик: не понятен вот этот учаток кода
и что значит num'? вот чего я наделал. Отфильтровал, дифференцировал (получается очень шумная кривая), отфильтровал(тем же фильтром), посчитал количество пересечений с осьо абсцисс. результат 40 пересечений что приблизительно равно количеству пиков "на глаз". возможен такой вариант решения задачи?
|
Автор: cardinal 7.8.2009, 02:02 |
http://www.mathworks.com/access/helpdesk/help/toolbox/control/index.html?/access/helpdesk/help/toolbox/control/ref/tfdata.html&http://www.google.ru/search?hl=ru&q=matlab+tfdata&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr=&aq=1s&oq= Возможен (т.к. любой вариант возможен), но мне "на глаз" не нравится. ![]() Еще раз чуть поподробнее: 1. что это за сигнал? 2. нельзя ли измерить с меньшими помехами? 3. какой ответ (сколько пиков, расстояние между ними) ты ожидаешь? |
Автор: df_3 7.8.2009, 10:13 | ||||||
мне тоже не нравится. ![]()
это сигнал с осцилографа, проще говоря, каждый пик - это событие. Это количество событий нужно посчитать (в приведенном файле их около 25). Также по возможности нужно посчитать среднее расстояние между пиками (это получается частота событий). Измерить точнее нельзя к сожалению. |
Автор: Pavia 7.8.2009, 13:04 | ||||
У меня получилось 22 пика хотя 2 из них больше на шум смахивает Так что только 20. Взял сигнал посмотрел АЧХ припомоще FFT откуда определил частоту среза. Отфильтровал сделал обратное преобразование. После продиференцировал.
Подобрал порог. h=0.0008 Красная горизонтальная линия. А после вот таким вот образом посчитал число переходов через 0 с учетом порога.
В атаче рисунок вверху исходный сигнал потом отфильтрованный и внизу продиференцированный. |
Автор: cardinal 7.8.2009, 13:33 | ||||
Читаем про выскочастотные помехи и их подавление http://www.platan.ru/library/Murata_EMI_rus.pdf
H(z)= (z-1)/z *Z(H(s)/s) (где Z это трансформация, она происходит при помощи http://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D1%86%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_Z-%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) А так вот на тему http://www.mathworks.com/access/helpdesk/help/toolbox/control/index.html?/access/helpdesk/help/toolbox/control/ref/c2d.html&http://www.google.ru/search?hl=ru&newwindow=1&q=h%28s%29+h%28z%29+c2d&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=&aq=f&oq= http://www.mathworks.com/access/helpdesk/help/toolbox/control/index.html?/access/helpdesk/help/toolbox/control/manipmod/f2-3161.html&http://www.mathworks.com/access/helpdesk/help/toolbox/control/ref/c2d.html http://www.mathworks.de/products/control/demos.html?file=/products/demos/shipping/control/notchdemo.html Добавлено через 14 минут и 52 секунды df_3, пользуйся кнопкой "быстрая цитата", тогда понятно будет кого ты цитируешь... Еще раз: ЧТО конкретно измеряется? тогда может станет понятно почему нельзя точнее. Есть предположение, что мы с последствиями разбираемся, а не с причиной...
Покажи пожалуйста картинку, если такая есть. Интересно, что FFT показывает. А насчет дифференциации - это неплохая мысль. |
Автор: Pavia 7.8.2009, 14:01 | ||
Опять детский сад. Я и так прочитал кучу книг и еще столькоже статей. Я неспорю что RC фильтр отфильтровывает высокии частоты. Вопрос в том какой лучше. А я тебе отвечу что большинство фильтеров фильтеров выполняют эту самую фультрацию. А остальные на основе них строится. Но все по разному работают. Помимо высоких частот RC портит и другии частоты откуда координаты пиков у тебя съезжают.
Я не про ето. Я в рекурсивных фильтерах застрял. Эти преобразования я знаю. Я беру строю фильтр согласно теории и он не работает так как надо. Я вижу не соответствие, но пока доконца не разобрался. Где подвох не ясно так как никаких хитрых ухищерений нет а преобразование табличное. |
Автор: cardinal 7.8.2009, 14:24 | ||
А какой же фильтр не портит другие частоты? Смотрим на http://ru.wikipedia.org/wiki/%D0%9B%D0%90%D0%A4%D0%A7%D0%A5. Апериодическое и колебательное звено - оба влияют не только на сигнал с частотой большей частоты среза. А все фильтры можно разбить на эти звенья. Другое дело, что их можно скомбинировать и добиться результата получше. Но опять же таки - помоему сейчас в сигнале проблема, а не в фильтре... где они? ![]() |
Автор: Pavia 7.8.2009, 14:45 |
Окно Хэминга + FFT показывает что шум розовый почти белый. Картинка семметричная так как сигнал действительный. Так что можно рассматривать правую половину. Частоты не выводил так как нормального компонента для вывода нет. |
Автор: cardinal 7.8.2009, 14:59 |
Ок, мерси. Ладно подождем, что скажет df_3... |
Автор: GoldFinch 7.8.2009, 15:31 |
при чем тут RC и прочие схемы? это все детали реализации, которые тут знать совсем не надо, вы же не паять эти фильтры собрались. |
Автор: cardinal 7.8.2009, 18:42 |
GoldFinch, ты о чем вообще? |
Автор: GoldFinch 7.8.2009, 18:59 |
cardinal, я о тема все же о цифровой обработке сигнала, а тут из линейных фильтров есть либо КИХ который задается произвольным массивом с коэффициентами либо есть БИХ который задается рекуррентной формулой Добавлено через 13 минут и 55 секунд чтобы решить эту задачу, не мешало бы посмотреть на нее с точки зрения теории надо из смеси сигнала с шумом выделить сигнал будем считать что сигнал - последовательность дельта функций, т.к. сигнал линеен, можно считать что сигнал сумма дельта-функций тогда задача сводится к выявлению одной дельта функции спектр шума можно посмотреть отключив сигнал спектр дельта функции - равномерен, значит чтобы определить момент появления дельта-функции можно брать любой его кусок, вернее не любой, а там где отношение сигнал\шум максимально, применив полосовой фильтр, или несколько кусков спектра сразу применив гребенчатый фильтр |
Автор: cardinal 7.8.2009, 21:10 |
GoldFinch, возьми в руки Matlab и предложи свой вариант (а то словами то каждый горазд)... ![]() |
Автор: GoldFinch 7.8.2009, 23:28 |
матлаба под рукой небыло, был маткад отрезал от записи сигнала 8192семпла, взял БПФ, увидел что примерно начиная с 45*(fдискр/8196) Гц начинается только ВЧ шум, вырезал кусок спектра от 4 до 44 *(fдискр/8196) Гц, сделал обратное преобразование - получил картинку |
Автор: cardinal 8.8.2009, 00:00 |
Ну идея понятна - ты не заглушил лишние частоты, а просто их убрал. Теперь вопросы к df_3: 1. сколько пиков ожидалось в районе i=2000 (один, как получилось или больше) 2. тоже самое в районе i=3000 (два, как получилось или больше) 3. должен ли быть пик у значения i=8000 (в решении GoldFinch'а его нет) |
Автор: GoldFinch 8.8.2009, 11:54 |
cardinal, это не "убрал" и "заглушил" а тоже фильтрация, через двукратное бпф, самый тривиальный метод |
Автор: cardinal 8.8.2009, 15:49 |
Я не говорил, что это не фильтрация ![]() |
Автор: GoldFinch 9.8.2009, 13:38 |
вообще такой сигнал можно обрабатывать как угодно синее - среднее в окне 50, зеленое - среднеквадратическое отклонение в окне 50 |
Автор: cardinal 9.8.2009, 15:33 |
df_3 до сих пор не ответил на вопросы в этом http://forum.vingrad.ru/index.php?showtopic=268767&view=findpost&p=1937943. Я считаю, что такие измерения мало что дадут... |