реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Определение периода сигнала, нужен простой алгоритм
ataradov
сообщение Aug 23 2010, 13:01
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



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

Нужен способ определить период, при этом сложные вычисления (типа FFT) не желательны, так как должно работать все на 8-бит микроконтроллере.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
scifi
сообщение Aug 23 2010, 14:00
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Что-то мне подсказывает, что здесь без "сложных" вычислений не обойтись. И ещё для обсуждения полезно будет указать, в каком диапазоне может меняться период.
Go to the top of the page
 
+Quote Post
ataradov
сообщение Aug 23 2010, 14:10
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



QUOTE (scifi @ Aug 23 2010, 18:00) *
И ещё для обсуждения полезно будет указать, в каком диапазоне может меняться период.

Для гитары частоты от 80 до 330 Гц. Желательно, чтобы получилось для полного диапазона фортепиано -- 27 - 4200 Гц.

Все програмные тюнеры для компа что я видел тупо измеряют частоту и пользовать их довольно сложно из-за того, что правильно они показывают только долю секунды.

Китайский аппаратный тюнер работает значительно лучше, но все-равно на басовых струнах подглючивает.

Интерес чисто академический, особой практической цели не преследует. Ну если получится удобоваримый алгоритм можно и железку сделать.
Go to the top of the page
 
+Quote Post
Microwatt
сообщение Aug 23 2010, 14:16
Сообщение #4


Гуру
******

Группа: Почетный участник
Сообщений: 6 851
Регистрация: 25-08-08
Из: Запорожье
Пользователь №: 39 802



Цитата(Taradov Alexander @ Aug 23 2010, 16:01) *
На картинке приведено несколько периодов колебания басовой струны гитары. Красным отмечен ожидаемый период. Необходимо определить частоту колебаний, но прямой подсчет дает в 2 раза завышенный результат, так как там полно гармоник, но на глаз период хоршо заметен. При этом амплитуда "внутреннего" колебания изменяется от полного пропадания, до равной и даже большей, чем "основного" колебания.

Нужен способ определить период,

Странная проблема.... "Ожидаемый период"- скорее всего, "неожиданный", это попытка измерить вторую субгармонику.
Из теории колебаний период однозначно связан с основонй частотой колебаний. Никакие гармоники не могут изменить его, могут изменить только форму колебаний, но не период. Т.е тембр струны может быть разным, но не основонй тон, частота.
Посему, нужно считать время меж пересечениями сигналом нуля, это даст полупериод. Время между фронтами или спадами даст период. Сигнал перед оцифровкой нужно пропустить через нуль-компаратор (усилитель с большим коэффициентом усиления).
"Ля" первой октавы должно давать 440гц.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Aug 23 2010, 14:31
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(Taradov Alexander @ Aug 23 2010, 17:01) *
так как должно работать все на 8-бит микроконтроллере.



В настоящее время уже очень странное требование.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
ataradov
сообщение Aug 23 2010, 14:47
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



QUOTE (Microwatt @ Aug 23 2010, 18:16) *
Странная проблема.... "Ожидаемый период"- скорее всего, "неожиданный", это попытка измерить вторую субгармонику.

Красным изображен период соответствующей частоте 82 Гц, 6 струна гитары. Синим - реальное колебание этой струны. Есть моменты, когда реальное колебание почти синус, но большую часть времени по нему бегут такие "волны". Програмные тюнеры схватываются за моменты чистой синусоиды, но они длятся долю секунды.

QUOTE (Microwatt @ Aug 23 2010, 18:16) *
Из теории колебаний период однозначно связан с основонй частотой колебаний. Никакие гармоники не могут изменить его, могут изменить только форму колебаний, но не период. Т.е тембр струны может быть разным, но не основонй тон, частота.

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

QUOTE (Microwatt @ Aug 23 2010, 18:16) *
Посему, нужно считать время меж пересечениями сигналом нуля, это даст полупериод. Время между фронтами или спадами даст период. Сигнал перед оцифровкой нужно пропустить через нуль-компаратор (усилитель с большим коэффициентом усиления).
"Ля" первой октавы должно давать 440гц.

Это все в теории (ну и на практике для более высокочастотных струн), но не работает для басовых струн, у них очень богатый спектр.

QUOTE (Oldring @ Aug 23 2010, 18:31) *
В настоящее время уже очень странное требование.

В конечном итоге важны цена и потребление. Если по цене действительно можно найти альтернативы, то по потреблению уже сложнее (ну если не пускать АРМ на 16 МГц, конечно).

Кроме применение мощного процессор противоречит самой идее простого гитарного тюнера.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Aug 23 2010, 15:17
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(Taradov Alexander @ Aug 23 2010, 18:47) *
В конечном итоге важны цена и потребление. Если по цене действительно можно найти альтернативы, то по потреблению уже сложнее (ну если не пускать АРМ на 16 МГц, конечно).

Кроме применение мощного процессор противоречит самой идее простого гитарного тюнера.


У вас действительно миллионные тиражи, чтобы бороться за плюс-минус доллар цены?
Задача явно для 16-битного DSP. По потреблению скорее всего DSP окажется эффективнее 8-битника - потребуется меньше команд для реализации одинакового алгоритма. Тем более, если он будет спать, когда не нужен.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
ataradov
сообщение Aug 23 2010, 15:27
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



QUOTE (Oldring @ Aug 23 2010, 19:17) *
У вас действительно миллионные тиражи, чтобы бороться за плюс-минус доллар цены?

Нет, у меня вообще нет планов по выпуску его. Возможно DSP будет и лучше. Можно убрать из вопроса требование к ресурсам.

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

-----------
Прицепил wav-файл с записью звука всех струн, если кому интересно поэкспериментировать.
В матлабе можно сделать data = wavread('guitar2.wav'); и он весь ваш smile.gif

Сообщение отредактировал Taradov Alexander - Aug 23 2010, 15:31
Прикрепленные файлы
Прикрепленный файл  guitar2.wav.zip ( 890.05 килобайт ) Кол-во скачиваний: 63
 
Go to the top of the page
 
+Quote Post
Alex11
сообщение Aug 23 2010, 15:28
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Вы бы поиграли с модельками, тем более, что у Вас есть разные варианты записанного сигнала. Возможно, что Вам будет достаточно очень небольшого по буферу Фурье, чтобы определить основную частоту. Нужно только разойтись с гармониками, а дальше уточнить частоту по огибающей.
Go to the top of the page
 
+Quote Post
ataradov
сообщение Aug 23 2010, 15:51
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



QUOTE (Alex11 @ Aug 23 2010, 19:28) *
Вы бы поиграли с модельками, тем более, что у Вас есть разные варианты записанного сигнала. Возможно, что Вам будет достаточно очень небольшого по буферу Фурье, чтобы определить основную частоту. Нужно только разойтись с гармониками, а дальше уточнить частоту по огибающей.
Я и играюсь тут, просто коллективный разум хотел еще привлечь, иожет велосипед изобретаю.

Так же попробовал метод описанный в одном из блогов:
QUOTE
The solution I used is a pretty simple one. We set two thresholds (a positive and a negative one), and start counting when the signal value becomes higher than the positive threshold. We keep counting and wait for the signal to go below the negative threshold, then wait for it to go above the positive one again. This sometimes helps us count only the transitions we’re interested in.

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

Вот 4 последовательных периода наложенные друг на друга. Видно, что они отличаются незначительно, но внутри самого периода у них есть особенности и характерные неравномерности. Но сам период я вычислил зная частоту струны и то, что струна был настроена.

В идеале нужен алгоритм, который найдет подобную зависимость и определит период.

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Microwatt
сообщение Aug 23 2010, 16:06
Сообщение #11


Гуру
******

Группа: Почетный участник
Сообщений: 6 851
Регистрация: 25-08-08
Из: Запорожье
Пользователь №: 39 802



Цитата(Taradov Alexander @ Aug 23 2010, 18:51) *
Он дает правильное определение чаще чем обычный подсчет переходов через ноль, но все-равно ошибается, когда амплитуда "помехи" достаточно велика.

Вот 4 последовательных периода наложенные друг на друга. Видно, что они отличаются незначительно, но внутри самого периода у них есть особенности и характерные неравномерности. Но сам период я вычислил зная частоту струны и то, что струна был настроена.

В идеале нужен алгоритм, который найдет подобную зависимость и определит период.

Вы привели картинки неполностью, неаккуратно наложенных колебаний. Форма их может несколько отличаться, но частота (период) одинаковы.
Возможно, я чего-то в Вашей формулировке не понимаю, но ни о каких "помехах" речь идти не должна. Период легко должен определяться через подсчет времени переходов через нуль. Вы как и чем пытаетесь измерять? Неужели по-эмбеддерски, с помощью АЦП?
Go to the top of the page
 
+Quote Post
ataradov
сообщение Aug 23 2010, 16:18
Сообщение #12


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



QUOTE (Microwatt @ Aug 23 2010, 20:06) *
Возможно, я чего-то в Вашей формулировке не понимаю, но ни о каких "помехах" речь идти не должна.

На первой картинке я черным изобразил период синуса (как смог, извините) 82 Герц. Я вполне уверен, что струна колеблется именно с этой частотой. Искажение ("провал") по центру - это особенность огибающей этой струны, простое определение по пересечениям даст удвоенную частоту.

Вторая картинка - то-же эффект, но не так сильно выраженный. Период сигнала заключен между двумя большими "горбами".

Так что просто посчетом переходов через ноль нельзя отделаться.

--------------------
И еще один рисунок где проблема видна очень хорошо. Период OK по переходам через 0 определится правильно, период BAD - нет.



Сообщение отредактировал Taradov Alexander - Aug 23 2010, 16:31
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 

Прикрепленные изображения
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Aug 23 2010, 17:42
Сообщение #13





Guests






Судя по Вашему описанию и картинкам, главное отличие основной частоты от остальных в том, что ее амплитуда
меняется гораздо медленнее - практически постоянна на их фоне. Если это предположение верно, то попробуйте
за него как-то "зацепиться" при выработке алгоритма.
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 23 2010, 17:51
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Может я чего-то не понял, но почему из всего спектра нельзя выбрать наименьшую частоту? К тому же, если диапазон изменения основной частоты при разном натяжении для каждой струны примерно известен, то можно корреляцию с требуемой частотой посчитать.
Go to the top of the page
 
+Quote Post
ataradov
сообщение Aug 23 2010, 18:29
Сообщение #15


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



QUOTE (rezident @ Aug 23 2010, 21:51) *
Может я чего-то не понял, но почему из всего спектра нельзя выбрать наименьшую частоту? К тому же, если диапазон изменения основной частоты при разном натяжении для каждой струны примерно известен, то можно корреляцию с требуемой частотой посчитать.
Вот спектр той-же 6-ой струны. Нужен какой-то хороший критерий поиска. Курсором помечена нужная частота. Слева от нее сравнимого уровня "палка" 50 Гц - это похоже сеть, не ожидал ее тут увидеть, попробую отфильтровать. Максимум - это 160 Гц, та самая "помеха".

Кроме того приведеный FFT сделан по 83000 точек (вся выборка), если делать окнами реального размера, то получется каша и недостаточное разрешение (хотя для первого приближения может и подойдет).

Делать фильтры на частоты конкретных струн нельзя, так как они могу быть значительно рассторены (иногда специально), нужно именно определить частоту и сказать к какой ноте она ближе всего и на сколко процентов не совпадает с ней.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01509 секунд с 7
ELECTRONIX ©2004-2016