Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Алгоритм на основе FFT и интерполяции
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Burenkov Sergey
Доброго дня!
Нашел в сети древнюю статью про тюнер для пианино, там сигнал после ких фильра подается на бпф с последующей интерполяцией по двум соседним бинам. Мне непонятен следующий момент:
Описан Down Sampling, как я понял по описанию тут после фильтра в массив для бпф заносится каждый 11 сэмпл, чтобы увеличить разрешение по частоте... в этом случае разрешение будет 2.112 Гц на бин, но тогда при размере буфера в 512 сэмплов частота самого последнего бина будет только 1кГц, а нужно определять до 4кГц. Тут видимо я что то недопонимаю
Если кому-то не лень прочитать статью, буду благодарен за советы!
KalashKS
А какая у вас частота дискретизации?
При 96кГц и прореживании в 11 раз должно быть видно до 96/22=4.3 кГц с разрешением 17 Гц при длине окна 512 отсчетов. На сколько точность оценки поднимет интерполяция, не знаю.
Burenkov Sergey
Извиняюсь) ссылку то не привел на статью http://www.tedknowlton.com/resume/CCPPT.htm
Тут используется 11,894 Hz
KalashKS
Целиком не прочитал, выделил основное. Для настройки разных нот применяется разный коэффициент децимации. Не знаю, насколько снижение точности при этом критично для струн, настраиваемых в унисон, а для различных нот оно должно быть не так заметно.
Burenkov Sergey
Цитата(KalashKS @ Jan 11 2013, 15:41) *
Целиком не прочитал, выделил основное. Для настройки разных нот применяется разный коэффициент децимации. Не знаю, насколько снижение точности при этом критично для струн, настраиваемых в унисон, а для различных нот оно должно быть не так заметно.

Спасибо. Жалко, тогда автоматически определить ноту не получается...
Alexey Lukin
Определить ноту можно и без прореживания, тут особая точность по частоте не нужна.
Alex11
В статье, похоже, пытались минимальными аппаратными средствами получить максимальную точность определения частоты. Можно получить ту же точность увеличив буфер. При этом не требуется различное прореживание для различных нот, достаточно длинного буфера. Время счета, естественно, возрастает. Но для современных DSP это не проблема. RealTime все равно получается. В статье не учтено совершенно различие частоты для нескольких струн, по которым ударяет одна клавиша. Это упомянуто во введении, а дальше как-то опущено. Мне кажется, что точность настройки должна быть очень хорошей. Можно смотреть по огибающей, но, мне кажется, лучше применить окно, чтобы увеличить разрешение по частоте.
Для одной частоты можно получить интерполяцией очень высокую точность ее определения. Когда же там смесь близких частот, то нужно их разрешать, чтобы понять какая струна дает какую частоту.
Burenkov Sergey
Цитата(Alexey Lukin @ Jan 25 2013, 03:00) *
Определить ноту можно и без прореживания, тут особая точность по частоте не нужна.

На низких нотах разница между двумя соседними нотами чуть больше герца, точность нужна хорошая.


Цитата(Alex11 @ Jan 26 2013, 04:43) *
В статье, похоже, пытались минимальными аппаратными средствами получить максимальную точность определения частоты. Можно получить ту же точность увеличив буфер. При этом не требуется различное прореживание для различных нот, достаточно длинного буфера. Время счета, естественно, возрастает. Но для современных DSP это не проблема. RealTime все равно получается. В статье не учтено совершенно различие частоты для нескольких струн, по которым ударяет одна клавиша. Это упомянуто во введении, а дальше как-то опущено. Мне кажется, что точность настройки должна быть очень хорошей. Можно смотреть по огибающей, но, мне кажется, лучше применить окно, чтобы увеличить разрешение по частоте.
Для одной частоты можно получить интерполяцией очень высокую точность ее определения. Когда же там смесь близких частот, то нужно их разрешать, чтобы понять какая струна дает какую частоту.

У меня немного другая задача, мне не нужно определять частоту для двух струн, только для одной. Более длинная выборка это не только время счета но время самой выборки. Например, нота Ми большой октавы, ее частота 82.41Гц. на пол тона ниже (на 9,63Гц) на частоте 77.78Гц находится ми бемоль, т.е. даже если я определю частоту с точностью 0,5Гц я получу на этих нотах ошибку в 5%, это будет заметно на слух. Можно поподробнее насчет "окна"?
KalashKS
Цитата(Burenkov Sergey @ Jan 11 2013, 22:01) *
Спасибо. Жалко, тогда автоматически определить ноту не получается...


Тут, если вычислительные мощности позволяют, можно последовательными приближениями ее определить. Если я правильно считаю, то без прореживания при длине окна 512 можно определить ноту с точностью до октавы. После этого можно проредиться и на следующем шаге определить уже и саму ноту. При меньшем окне понадобится больше шагов, но при этом может снизится вычислительная сложность.
Alexey Lukin
Цитата(Burenkov Sergey @ Jan 29 2013, 10:33) *
На низких нотах разница между двумя соседними нотами чуть больше герца, точность нужна хорошая.

Я имел в виду, что без прореживания можно определить примерное положение ноты, а затем уже выбрать нужный коэффициент прореживания в зависимости от этого.
Burenkov Sergey
Спасибо всем за советы, буду пробовать. Отпишу по результату)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.