Идентификация общих периодических сигналов (прямоугольная, синусоидальная, пилообразная и т. д.)

Без какого-либо взаимодействия с пользователем, как программа сможет определить, какой тип сигнала присутствует в записи с АЦП?

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

Различные сигналы

Я также предложу несколько (наивных) идей, и вы можете проголосовать за них или против.


person endolith    schedule 17.07.2009    source источник
comment
можно ли с уверенностью предположить, что на вход подается монофонический сигнал? (т.е. одна нота, сыгранная одним инструментом?)   -  person kent    schedule 17.07.2009
comment
да. Я не имею в виду конкретное приложение, но я представляю себе непрерывные периодические волны одной частоты.   -  person endolith    schedule 17.07.2009


Ответы (7)


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

При этом возьмите один период (приблизительно) формы волны.

Теперь возьмите ДПФ этого сигнала и немедленно скомпенсируйте фазовый сдвиг первого бина (первый бин является основным, ваша задача будет проще, если все фазы относительные). Теперь нормализуйте все бины так, чтобы основная гармоника имела единичное усиление.

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

person Dave Gamble    schedule 17.07.2009
comment
Однако вам также нужно отслеживать этот фазовый сдвиг, чтобы идентифицировать разные полярности волн, верно? - person endolith; 17.07.2009
comment
Верно. Это также будет намного проще, если вы скомпенсируете фазу основного сигнала. - person Dave Gamble; 18.07.2009
comment
Лучше бы взяли БПФ нескольких периодов волны, по мере подавления шумов. - person endolith; 23.07.2009
comment
В качестве альтернативы, если вы можете их выровнять, вам лучше суммировать несколько периодов волны (и среднего), а затем БПФ. - person Dave Gamble; 05.08.2009

Выполните БПФ, найдите пики нечетных и четных гармоник и сравните скорость, с которой они уменьшаются, с библиотекой общих сигналов... пиков... соотношений.

person endolith    schedule 17.07.2009
comment
Этот метод кажется более надежным, чем работа во временной области, поскольку вы все еще можете идентифицировать волны, прошедшие фазовый сдвиг и фильтрацию. - person endolith; 17.07.2009

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

person endolith    schedule 17.07.2009
comment
Я думаю, что это наиболее практичный подход, предполагая, что вы также меняете фазу сигналов сравнения. - person MusiGenesis; 31.07.2009
comment
Вы можете определить фазу, сначала найдя пересечение нуля, чтобы не тратить время на сдвиг волн во все возможные фазы. - person endolith; 02.08.2009

Этот ответ предполагает отсутствие шума и то, что это простое академическое упражнение.

Во временной области возьмите выборку разностью выборки формы волны. Гистограммируйте результаты. Если распределение имеет резко выраженный пик (моду) в нуле, это прямоугольная волна. Если распределение имеет резко выраженный пик при положительном значении, оно является пилообразным. Если распределение имеет два резко очерченных пика, один отрицательный и один положительный, то это треугольник. Если распределение широкое и имеет пики с обеих сторон, это синусоида.

person Community    schedule 29.07.2009

вооружитесь дополнительной информацией...

Я предполагаю, что вы уже знаете, что теоретически идеальная синусоида не имеет частичных гармоник (т.е. только основная)... но поскольку вы работаете с АЦП, вы можете выбросить идею теоретически идеальной синусоиды в окно... ... вы должны бороться с алиасингом и определять, что является «настоящими» частичными изображениями, а что артефактами... удачи.

следующая информация взята из этой ссылки о csound.

(*) Пилообразная волна содержит (теоретически) бесконечное число гармонических парциальных частей, каждая из которых находится в отношении обратного парциального числа. Таким образом, основная (1) имеет амплитуду 1, вторая частичная 1/2, третья 1/3 и n-я 1/n.

(**) Прямоугольная волна содержит (теоретически) бесконечное число парциальных гармоник, но только гармоники с нечетными номерами (1,3,5,7,...) Амплитуды находятся в отношении обратного числа парциальных гармоник , как пилообразные волны. Таким образом, основная (1) имеет амплитуду 1, третья частичная 1/3, пятая 1/5 и n-я 1/n.

person kent    schedule 17.07.2009

Я думаю, что все эти ответы до сих пор довольно плохи (включая мой собственный предыдущий...), после того, как я немного обдумал проблему, я бы предложил следующее:

1) возьмите 1-секундную выборку входного сигнала (не обязательно, чтобы она была такой большой, но это упрощает несколько вещей)

2) за всю секунду подсчитайте переходы через ноль. на данный момент у вас есть cps (количество циклов в секунду) и известна частота генератора. (если это то, что вы хотели знать)

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

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

5) тест на пилообразную волну: аналогичен прямоугольной волне, но за большой дельтой сигнала будет следовать линейная постоянная дельта сигнала.

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

person kent    schedule 31.07.2009
comment
Предполагая, что это что-то вроде реальных аудиоданных, подсчет пересечений нуля не будет работать очень хорошо. Как заметил Дэйв Гэмбл, автокорреляция — лучший способ определить основную частоту звукового сигнала. - person MusiGenesis; 31.07.2009
comment
Если сигнал действительно зашумлен, подсчет пересечений нуля должен работать. Однако было бы лучше измерить расстояние между пересечениями нуля, отбросить любые выбросы и усреднить. - person endolith; 02.08.2009

Сначала найдите базовую частоту и фазу. Вы можете сделать это с помощью БПФ. Нормализация выборки. Затем вычтите каждый образец с образцом формы волны, которую вы хотите протестировать (та же частота и та же фаза). Возведите результат в квадрат, сложите все это и разделите на количество образцов. Наименьшее число — это форма волны, которую вы ищете.

person Tymenyel    schedule 24.12.2014