|
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
|
|
Как узнать частоту звука?20.01.2012, 16:11. Показов 64851. Ответов 252
Метки нет (Все метки)
народ,подскажите кто знает.обработкой сигнала нигода не занимался,поэтому если что-то говорю не правильно
хочу программно определить к какой ноте принадлежит звук. Имею частоту дискретизации 8кГц и глубину 16 бит. значения этой выборки заносятся в массив.1)Что представляют из себя эти значения? если я правильно понял то каждый элемент массива это значение частоты в момент времени? 2)что нужно сделать с этим массивом чтобы узнать ноту?
0
|
|
| 20.01.2012, 16:11 | |
|
Ответы с готовыми решениями:
252
Как менять частоту звука на STM32 Узнать из программы частоту процессора
|
| 24.05.2013, 12:47 | |
|
Пару раз заспасибили, значит тема помогла.
Люди, подскажите как в качестве анализатора частоты прикрутить эту библиотеку в исходных кодах - http://sourceforge.net/projects/kissfft/ Главная проблема текущей версии - слишком грубое определение частоты через интервал = частота_семплирования/фреймов_в_буфере. Предлагаю поискать более точные способы замера
0
|
|
| 29.05.2013, 12:45 | ||||||
|
Вот мои результаты. Частота определяется с точностью SAMPLE_RATE/FRAMES_PER_BUFFER, как добиться определения частоты с точностью до сотых герца не меняя этих параметров?
Проблема в том, что при игре низких звуков (пятая открытая струна и тем более шестая) максимальную амплитуду имеют гармоники, а не основной тон. То есть вместо нужных 110 Гц показывает 220 Гц. Как это исправить? Код fft скопипастен с вики. dll для работы портаудио скачаны из инета, сам не компилировал.
0
|
||||||
|
|
|
| 29.05.2013, 14:02 | |
|
...намудрили, шаг по частоте в выходном спектре = частоте дискретизации / количество точек преобразования (а не количество отсчетов в сэмпле), что при 44100/1024~ 43 Гц. Ссылки на рабочие реализации FFT даны, на литературу тоже, даже FFTW либа имеет свой сайт с готовыми примерами, а вы обратились почему-то к вики. Вот и расхлебывайте.
А по сабжу, для повышения точности методов FFT используют несколько параллельно проводимых преобразований с разным количеством точек, так реализовано в некоторых цифровых осциллографах, что дает более четкую картинку спектрограммы и более высокую точность за счет совмещения нескольких спектров в единицу времени с разным разрешением по частоте. Вот так вот.
0
|
|
| 29.05.2013, 14:35 | |
|
Я не профессионал. Как использовать примеры на делфи в языке си?
Тут же передаются FFT(sampleBlock, Im, FRAMES_PER_BUFFER, POW_2, -1); почему вы делите 44100/1024 ? Не подскажете, что сделать чтобы определялись басовые ноты, а не их гармоники?
0
|
|
|
|
|
| 29.05.2013, 14:55 | |
|
...причем тут примеры на Delphi? Библиотека fftw кроссплатформенна, если речь о примерах из моих статей, то уже давно разработана библиотека fftr для сторонних разработчиков.
Насчет гармоник баса, не понял... да, нотный частотный ряд делится определенным образом (см. выше), но причем тут FFT? ХОчется точности, увеличивайте размер буфера из отсчетов для анализа и количество задаваемых точек преобразования + метод вариации количества точек преобразования и даже частот дискретизации для перекрытия заданного нотного ряда и доли герца тут не нужны - обратитесь к таблице выше (на моей памяти есть тут тема, где берется fft с миллионом точек, только тут время, время).
0
|
|
| 29.05.2013, 14:58 | |
|
Можно ли частоту уточнить интерполированием около максимума? влево и вправо по два или три значения учесть
Добавлено через 2 минуты Пятая струна имеет частоту 110 герц, но при дёргании программа распознаёт её как 220 гц. Ноты на шестой струне так же определяются не 81 гц, а 162 гц. То есть программа показывает не основную частоту, а более громкую гармонику
0
|
|
|
|
|
| 29.05.2013, 15:12 | |
|
...правильно показывает. Тут есть тема, так и называется - определение частоты основного тона, возможно вам подойдет лучше.
В то же время, вам никто не мешает увеличить разрешение по частоте, сделать FFT, скажем на 4096 точек, и применить одну маленькую хитрость (кроме уже выше рекомендованных) - сетка частот у вас дискретна и постоянна в спектре и то, что оно вам покажет ту гармонику, которая ближе и попадает в сетку - верно, но ведь и вы данную сетку можете сравнивать с сеткой нот и подобрать ближайшую ноту. Ферштеен? p.s.: теперь насчет струн, программа определяет основной тон, если гармоника в спектре имеет максимум, то она и будет основным тоном ...а то что у вас определяет все время в два раза выше говорит об ошибке в вашем алгоритме, статической погрешности, где то забыли поделить на два ...простой способ - сгенерите синусоиду в каком нить аудиоредакторе, скажем AUDACITY с заданной частотой и проверьте свой алгоритм. Андерстенд?
0
|
|
| 29.05.2013, 15:42 | |
|
Не понимаю. я на анализ передаю 16384 точек, а вы говорите 1024.
С определением нот по частоте - не проблема, задача решена полностью. Частоту на всех струнах определяет правильно, но на басовых временами определяет то правильно, то вторую гармонику за один дёрг струны.
0
|
|
|
|
|
| 29.05.2013, 15:49 | |
|
...раз не понимаете разницы между количеством отсчетов для анализа и количеством точек преобразования бабочки БПФ (ваше N в коде
), перечитайте еще раз теорию.P.S.: конечно музыкальными инструментами не увлекаюсь, не мне судить, но вы не думали, что вероятно так и есть и 'басовые' дают несколько гармоник? Просмотрите любым сторонним спектроанализатором, тем же Audacity, еще лучше, если в режиме сонограммы в виде 3D проекции, этого в ней нет, в какой-то сторонней видел ...а, в радиолюбительской утилите, микс-W что-ли.
0
|
|
|
|
|
| 29.05.2013, 16:28 | |
|
...если струна выдает несколько гармоник, то у нее по факту нет основного тона, кроме максимальной гармоники по амплитуде. Иного не дано, считайте это формантой. Голосовые связки тоже не чистую синусоиду генерируют, а набор характерных гармоник - формант (спектральный слепок).
Так и не услышал, проверяли ли сторонними анализаторами эти струны?
0
|
|
| 29.05.2013, 18:04 | |
|
Погонял струны тут http://ispectrometer.com/
На скринах: нота ми Е на 4 струне 2 лад, определяется как максимум. Всё в порядке: Вложение 274824 нота ля A на 5 струне открытой. В момент дергания струны очень повышается и сам сигнал и вторая гармоника, таким образом максимум не даёт нам истинный результат, а даёт удвоенный (не 110 а 220 что я и говорил) Вложение 274825 нота ми на 6 струне открытой. Тут даже две гармоники громче, чем основная частота: Вложение 274826 Вот и получается, что спектр нужно как то анализировать по другому, а не просто по максимуму. Программа oTuner в открытых кодах, она работает отлично. Может там (и во всех программах тюнерах) хитрый метод определения? Значит там не простой максимум, а специальный анализ результатов. Что можно предпринять? (скрины не прикрепились)
0
|
|
|
|
||
| 29.05.2013, 18:57 | ||
Спектр не виноват, он честно показывает то, что идет на самом деле. Вот постобработка эту "честность" для удобства пользователя может скрывать с глаз. К примеру, усреднение по времени. Если все нормализуется после дерганья, пусть не сразу, пусть через миллисекунд 100-500, то не приходила мысль вам, что ПО itune врет? Т.е. усредняет, сглаживает результат? Вот как то так, при данной представленной вами информации, такие выводы.
0
|
||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
| 29.05.2013, 19:28 | |
|
Rem_, а если брать несколько локальных максимумов гармоник и из них уже выбирать с наименьшей частотой? Ведь по идее взятая струна не имеет себе подобных гармоник с частотой НИЖЕ, чем взятый тон?
0
|
|
| 29.05.2013, 19:43 | |
|
Сонограммы потом, я впервые слышу это слово
по изучать надо.Voland_, я пробовал брать два пика и учитывать левый. На самых басах не работало. Вот только что разобрался, что придётся брать три. Вопрос в том, не придется ли брать четыре. Не может ли кто-нибудь посмотреть исходники http://sourceforge.net/projects/otuner или http://sourceforge.net/projects/lstune как у них определяют основной тон?
0
|
|
|
|
||
| 29.05.2013, 19:56 | ||
почитать http://www.sevin.ru/vertebrate... /706V.html
0
|
||
| 29.05.2013, 21:52 | |
|
Есть идея. Сначала как обычно определяем максимум. А вот потом нужно проанализировать частоту на октаву ниже! Если там есть пик, значит нота ниже. Если нету там пика, значит максимальная амплитуда и есть искомая нота. Какой алгоритм придумать для анализа низкой ноты? На общий уровень амплитуды, или амплитуда относительно близко расположенных нот?
0
|
|
|
|
|
| 29.05.2013, 22:06 | |
|
...логично. Действовать по аналогии, как я реализовывал поиск двух частот DTMF последовательности в спектре:
Сначала найти позицию (частоту) главного максимума, потом двигаться вниз (у меня в оба прохода было и вверх и вниз по спектру) по частотам (массиву) и искать следующий максимум (т.е. сравнивать текущее значение амплитуды с предыдущим, если стало расти - искать максимум, просто присваивать максимальное после начала роста), сравнить с определенной заданной погрешностью с октавной частотой.
0
|
|
| 29.05.2013, 22:06 | |
|
Как узнать частоту, амплетуду, длинну и т.д. звука в данный момент? Как получить частоту звука? Как узнать частоту процессора? Как узнать частоту прцессора?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр.
Дословно, отклонённая. . .
|
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы
Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
|
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
|
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2.
Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
|
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
|