|
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
|
|
Как узнать частоту звука?20.01.2012, 16:11. Показов 65067. Ответов 252
Метки нет (Все метки)
народ,подскажите кто знает.обработкой сигнала нигода не занимался,поэтому если что-то говорю не правильно
хочу программно определить к какой ноте принадлежит звук. Имею частоту дискретизации 8кГц и глубину 16 бит. значения этой выборки заносятся в массив.1)Что представляют из себя эти значения? если я правильно понял то каждый элемент массива это значение частоты в момент времени? 2)что нужно сделать с этим массивом чтобы узнать ноту?
0
|
|
| 20.01.2012, 16:11 | |
|
Ответы с готовыми решениями:
252
Как менять частоту звука на STM32 Узнать из программы частоту процессора
|
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
| 29.05.2013, 22:14 | |
|
ну в спектре (естественно, посчитанному не идеально), максимумов множество. Поэтому, имеет смысл идти по правильным частотам кратным и деленным на 2 в бОльшую сторону. Rem_, Вам нужен критерий, по которому вы будете идентифицировать конкретный пик. И я думаю, это как раз амплитуда, относительно соседних, не основных пиков. Как вариант - считаете среднюю амплитуду всех пиков, и если амплитуда найденного выше, то этот пик является "правильным".
0
|
|
| 30.05.2013, 10:23 | |
|
Во, придумал. Сначала ищем максимум по диапазону. Потом ищем второй максимум от начала до первого максимума! И если они отличаются ровно в два раза, значит принимаем за ноту левый пик. Потом расскажу что получилось.
Добавлено через 1 час 39 минут Нашел целые научные работы, посвященные нахождению точной ноты ![]() http://miracle.otago.ac.nz/pos... apers.html Одна из них как раз описывает теорию и использование в программе Tartini со скринами. Philip McLeod, Fast, Accurate Pitch Detection Tools for Music Analysis, PhD thesis, Department of Computer Science, University of Otago, 2008. [PDF] (2.8Mb) http://miracle.otago.ac.nz/pos... od_PhD.pdf Добавлено через 9 часов 45 минут Как я понял, там используют SNAC функцию (4.1 Special Normalisation of the Autocorrelation (SNAC) Function страница 45) А в пункте 4.3 стр.51 используют параболическую интерполяцию для нахождения координат истинного пика. Графики и использование нашел на 94 странице.
2
|
|
|
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
|
||
| 30.05.2013, 11:20 | ||
|
Алгоритм поиска я представляю себе примерно такой: Выбираете в огибающей спектра несколько максимумов (3-4). Проверяете частоты соответствующие этим пикам на кратность. Из тех что удовлетворяют, выбираете самый левый, причем надо еще ввести какой нибудь порог, ниже которого максимум не выбирать. Это так, набросок в первом приближении....
0
|
||
|
|
|
| 30.05.2013, 11:28 | |
|
TC, потестируйте (смотреть параметры тона внизу):
(ищется максимум и его частота F0, потом все локальные экстремумы (перегибы) до него, далее частоты экстремумов сравниваются с F0/2 в районе +-5 герц)
1
|
|
| 30.05.2013, 11:35 | ||
В этом и особенность реального звука от синтезированного. Колебания струны состоят из множества гармоник (на 3d очень хорошо видно). Попробую тогда так: определить максимальный пик, и проанализировать частоту ровно в два раза меньшую. Если она выделяется на фоне соседних частот (или громче определенного значения?), значит это нота. Если не выделяется, значит нота на максимальном пике.
0
|
||
|
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
|
|||
| 30.05.2013, 11:46 | |||
|
0
|
|||
| 30.05.2013, 13:30 | |
|
Всё ещё хуже
Попробовал погудеть голосом около 110 гц (A). Здесь даже третья! гармоника громче всех.Уж поймите меня правильно, но выкладывать всё нет смысла. Я играю на обычной старой акустической гитаре на ноутбуке через встроеный микрофон тут http://ispectrometer.com/ . Проблемы как раз около сотни герц начинаются, около 80 Гц уже совсем плохо определяет. На пианино и синтезаторах тоже басовые ноты должны быть тише гармоник, но их у меня нет. Моя программа подтверждает, что максимумы периодически меняются по громкости. То одну частоту определит, то другую.
0
|
|
|
|
|
| 30.05.2013, 13:39 | |
|
...если микрофон встроенный, то туда подмешиваются собственные резонансы корпуса ноута, стола и прочих окружающих предметов. Для гитары рекомендуется внешний микрофон или звукосниматель, займитесь этим, в сети множество рекомендаций.
0
|
|
| 31.05.2013, 13:32 | |
|
Решил почитать и другие материалы про тартини.
http://miracle.otago.ac.nz/pos... _Pitch.pdf 2.1 Window Selection. Размер окна берут 2048, что при 44100 составляет примерно 1/20 секунды 2.2 Applying a Windowing Function. По краям сигнал делают тише, применяют кривую Гауса (есть графики) 2.3 Performing an FFT on Windowed Data. Создают спектр частот. 2.4 Finding Gaussian Peaks. На полученных частотных коэффициентах ищут формы похожие на кривые Гауса. На основании соседних точек определяется истинная вершина, истинная частота с высокой точностью. (Fig.3) 2.5 Choosing the Fundamental. Определяют основную частоту. Берут максимальную амплитуду из найденных, и проверяют, является ли она гармоникой более низкой частоты. На примере показано что самая сильная пятая гармоника. 2.6 Calculating Which Note on the Scale. Определяют ноту. n показывает, на сколько полутонов данная частота отстоит от нижней ноты на фортепиано (A0) Десятичная часть может использоваться для отображения отклонения от ноты в музыкальных центах. (Один полутон / 100 частей = 1 музыкальный цент) Ну, покодим?
0
|
|
| 31.05.2013, 14:04 | |
|
Не по теме: ...не, есть заказ, как нибудь сами.
0
|
|
| 31.05.2013, 23:53 | |
|
Так. Есть идея в спектре использовать не параболу, а искать фигуры похожие на кривую Гаусса, и вычислять координаты вершин. На одном спектре будет по несколько вершин, из них выберем самую громкую, и кратную ей минимальную.
Подскажите, как из массива найти пики Гаусса?
0
|
|
| 10.06.2013, 18:43 | |
|
Ясно.
Проблема моего кода - определение двух громких гармоник. Она не работает, потому что на басовых струнах оригинальная нота тише целой кучи гармоник. В гауссах не понимаю, придумал вот что: Как обычно ищется максимум из спектра, строится парабола, определяется положение вершины параболы. Теперь нужно анализировать частоту в двое меньше найденной. Если в этом месте есть пик спектра, значит реальную ноту принять именно в этом месте. (Если нет тут пика, значит максимальный и есть нота). Потом анализировать частоту в три раза меньше найденной. Если и в этом месте есть пик, значит тут находится действительная нота. Надо придумать алгоритм проверки, есть в заданном месте пик или нету.
0
|
|
|
|
||||||
| 10.06.2013, 19:15 | ||||||
|
...как уже говорил, я проводил анализ следующим образом: идем по массиву точек (амплитуд) и находим максимальную, запоминаем номер этой гармоники и в следующем поиске ищем амплитуду от первой точки до номера этой гармоники-1, которая будет больше по амплитуде следующей точки+1 и больше предыдущей точки-1 - это и будут экстремумы. Далее я анализировал попадает ли текущий экстремум по частоте на половинную частоту, в вашем случае поиск продолжаем до третьей части максимальной гармоники по частоте.
Насчет параболы не понял конкретики. Моя реализация в терминах Delphi (синтаксис от Си тут незначителен):
0
|
||||||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||
| 10.06.2013, 19:30 | ||
|
Rem_, а вы на 100% уверены, что таки гармоника звука больше, чем основной тон? Что-то слабо в это верится... Может, что-то в коэффициентах разложения не так? Дайте исходник звука в PCM. ЗЫ: я представляю насколько усложнится в таком случае задача, когда вы захотите найти две струны по АЧХ ). Два закавыристых варианта - это взятая октава, и прима ).
0
|
||
| 10.06.2013, 21:43 | |
|
Voland_, листайте тему, я скрины приводил. Проблема именно на басах. тут наглядно видно http://ispectrometer.com/
Парабола вот тут откуда: есть максимальная амплитуда, я беру её, значение слева, значение справа, отправляю в функцию для определения координат вершины параболы. вершина точнее показывает частоту. Добавлено через 2 минуты (скрины на 4 странице)
0
|
|
|
|
|
| 10.06.2013, 22:10 | |
|
Rem_, но вы тоже полистайте, вас уже просили привести ваши звуковые файлы, которые вы анализируете, это совсем нетрудно - скрепочка в расширенном режиме в редакторе поста.
0
|
|
| 10.06.2013, 22:10 | |
|
Как узнать частоту, амплетуду, длинну и т.д. звука в данный момент? Как получить частоту звука? Как узнать частоту процессора? Как узнать частоту прцессора?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|