Я думаю, что все эти ответы до сих пор довольно плохи (включая мой собственный предыдущий...), после того, как я немного обдумал проблему, я бы предложил следующее:
1) возьмите 1-секундную выборку входного сигнала (не обязательно, чтобы она была такой большой, но это упрощает несколько вещей)
2) за всю секунду подсчитайте переходы через ноль. на данный момент у вас есть cps (количество циклов в секунду) и известна частота генератора. (если это то, что вы хотели знать)
3) теперь возьмите меньший сегмент выборки для работы: возьмите ровно 7 пересечений нуля. (так что теперь ваш рабочий буфер, если его визуализировать, должен выглядеть как одно из графических представлений, которые вы опубликовали с исходным вопросом.) используйте этот небольшой рабочий буфер для выполнения следующих тестов. (нормализация рабочего буфера на этом этапе может облегчить жизнь)
4) тест на прямоугольную волну: пересечение нуля для прямоугольной волны всегда является очень большой разницей, ищите большую дельту сигнала, за которой следует небольшое движение или его отсутствие до следующего пересечения нуля.
5) тест на пилообразную волну: аналогичен прямоугольной волне, но за большой дельтой сигнала будет следовать линейная постоянная дельта сигнала.
6) тест на треугольную волну: линейные постоянные (малые) дельты сигнала. найдите пики, разделите на расстояние между ними и рассчитайте, как должна выглядеть треугольная волна (в идеале), теперь проверьте фактический сигнал на отклонение. установите порог допустимого отклонения, и вы сможете определить, смотрите ли вы на треугольник или синус (или что-то параболическое).
person
kent
schedule
31.07.2009