|
Методы фильтрации сигнала, получение частотных составляющих сигнала - спектра |
|
|
|
Mar 5 2013, 07:18
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 1-12-06
Пользователь №: 23 016

|
Цитата(STAR_IK @ Mar 5 2013, 10:33)  А что вы привязались к 8-битному контроллеру? Только потому что вы его знаете, а другие нет? Всегда контроллер выбирается под задачу, а не наоборот! 8ми битные контроллеры не предназначены для ЦОС. А от треугольных окон вы собираетесь уходить, используя банк фильтров вместо БПФ? Это на работу алгоритма не скажется впоследствии? Да просто упростить максимально хочу и посмотреть где предел после которого не выйдет распознать сносно команду. В перспективе хочу на 8ми битном сделать еще и для дешевизны. А сейчас макетка работает на AVR32 UC3 серии. На ней быстро за секунду распознает после произнесения слова. Но как сказал хочу максимально оптимизировать и упростить устройство по всем параметрам. На работу алгоритма не скажется. Поскольку это всего лишь вычисление признаков сигнала. Чем больше полос спектра разрешение тем лучше распознавание. Там разные реализации MFCC есть. И по кол-ву фильтров и по кол-ву DCT коэффициентов и по диапазону этих коэф-тов. По методам классификации нейронные сети или HMM тоже по арзному делают. Цитата Какие 20 штук фильтров? Нужно рассчитать только одно окно, которое длиннее окна БПФ в целое число раз. Там не сигнал должен быть длиннее, а окно БПФ будет короче. Почитайте еще это http://www.dsplib.ru/content/polyphasefft/polyphase.htmlДа я смотрел на dsplib.ru там понятнее всего расписано, но видимо ничего не понял. Спасибо. У Лайноса просто написано что нужно расчитать фильтр его ИХ будет требуемым окном. Значит например у нас сигнал длинной секунда при Fs=8000 соответственно 8000 отсчетов. Я разбиваю сигнал на временные окна чтобы для каждого вычислить гребенку-спектр, например 20 окон таймслотов. Получаю 400 значений в окне. Проверяю на четность потому что длина сигнала будет разной. (это алгоритм захвата выделения команды возвращает разные длины сигнала в зависимости кто как сказал слово - быстрее медленнее). Накладываю окно на 400 значений после него на краях задавленый сигнал будет в завис от окна. Делю эти 400 значений после окна на 20 полос окнами да? Почленно складываю эти 20 каналов по 20 значений и эти 20 значений кидаю на FFT так? Не понимаю как делать из 20ти значений FFT там ничего не успеет посчитаться. Или суб полосы нужны просто для уменьшения вычислений? И их не нужно 20шт по кол-ву требуемых полос? А достаточно 4-5 как у Лайноса?
Сообщение отредактировал TViT - Mar 5 2013, 19:25
|
|
|
|
|
Mar 5 2013, 11:54
|
Местный
  
Группа: Участник
Сообщений: 239
Регистрация: 15-11-09
Из: Санкт-Петербург
Пользователь №: 53 639

|
Цитата(STAR_IK @ Mar 5 2013, 10:33)  А что вы привязались к 8-битному контроллеру? Только потому что вы его знаете, а другие нет? Всегда контроллер выбирается под задачу, а не наоборот! 8ми битные контроллеры не предназначены для ЦОС. А от треугольных окон вы собираетесь уходить, используя банк фильтров вместо БПФ? Это на работу алгоритма не скажется впоследствии? Эй, уважаемый, полегче на поворотах! Особенно с фразой " не предназначены для ЦОС". В корне неверная фраза. Докажу в пять минут: вспомните старые добрые АОНы. Ничего, что там выполнялась фильтрация и DTMF-детектирование с помощью алгоритма Гёрцеля пусть и на отсчётах с сильно пониженной разрядностью (вплоть до 1р.). А ваш покорный слуга успешно упихал в ATmega прогу, которая реагировала на хлопок в ладоши (не на любой громкий звук, а именно на хлопок!). И ничего влезло и не плохо работало. Так что не надо маленьких-восьмиразрядненьких обижать. Насчёт "контроллер выбирается под задачу" верно, да не совсем, иначе тоже можно дойти до маразма. Знавал одного знакомого DSP'шника, которому подай обязательно плавающую запятую и программить он готов только с объектами в полном комфорте. В результате у чела ничего не получилось, он уволился, а в хитросплитении его классов мне теперь разбираться приходится
|
|
|
|
|
Mar 6 2013, 05:59
|
Частый гость
 
Группа: Свой
Сообщений: 136
Регистрация: 10-04-09
Из: Омск
Пользователь №: 47 461

|
Цитата(Kluwert @ Mar 5 2013, 17:54)  Эй, уважаемый, полегче на поворотах! Особенно с фразой " не предназначены для ЦОС". В корне неверная фраза. Докажу в пять минут: вспомните старые добрые АОНы. Ничего, что там выполнялась фильтрация и DTMF-детектирование с помощью алгоритма Гёрцеля пусть и на отсчётах с сильно пониженной разрядностью (вплоть до 1р.). А ваш покорный слуга успешно упихал в ATmega прогу, которая реагировала на хлопок в ладоши (не на любой громкий звук, а именно на хлопок!). И ничего влезло и не плохо работало. Так что не надо маленьких-восьмиразрядненьких обижать. Насчёт "контроллер выбирается под задачу" верно, да не совсем, иначе тоже можно дойти до маразма. Знавал одного знакомого DSP'шника, которому подай обязательно плавающую запятую и программить он готов только с объектами в полном комфорте. В результате у чела ничего не получилось, он уволился, а в хитросплитении его классов мне теперь разбираться приходится  Да, конечно, при желании можно и на 8-битных ЦОС делать, и компьютеры на лампах, и автомобиль из дерева и шкур животных... Раньше люди катались и радовались. Я надеюсь у вас не такое авто, а свой язвительный пост выписали не на ламповом компьюторе. Задача инженера заключается в оценке современной элементной базы и выбора оптимальных элементов по критериям цена/характеристики для выбранной задачи. Рассматривать 8-битные контроллеры для задач ЦОС, при том, что цена современных 32 и 16-битных контроллеров и DSP вплотную приблизилась к цене 8-битных, а потом еще 90% рабочего времени тратить на то, чтобы уместить алгоритм в эти 8 бит без потере качества это как минимум не профессионально. Тем более когда задача - распознование речи. Каждому контроллеру должно быть свое место.
Сообщение отредактировал STAR_IK - Mar 6 2013, 06:01
|
|
|
|
|
Mar 6 2013, 07:25
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 1-12-06
Пользователь №: 23 016

|
Господа ненадо возвышаться друг перед другом, каждый прав и не прав по своему. Серьезные люди вроде. Я преследую несколько задач. Одни из них это опитизация кода и познание на примере распознавания.
Лучше напишите что нибудь по полифазному ФФТ. Вам основные шаги описать 5 предложений с вашим опытом.
STAR_IK посмотрите личку. Kluwert тоже.
Сообщение отредактировал TViT - Mar 6 2013, 07:37
|
|
|
|
|
Mar 6 2013, 09:41
|
Частый гость
 
Группа: Свой
Сообщений: 136
Регистрация: 10-04-09
Из: Омск
Пользователь №: 47 461

|
Цитата(TViT @ Mar 5 2013, 13:18)  Значит например у нас сигнал длинной секунда при Fs=8000 соответственно 8000 отсчетов. Я разбиваю сигнал на временные окна чтобы для каждого вычислить гребенку-спектр, например 20 окон таймслотов. Получаю 400 значений в окне. Проверяю на четность потому что длина сигнала будет разной. (это алгоритм захвата выделения команды возвращает разные длины сигнала в зависимости кто как сказал слово - быстрее медленнее).
Накладываю окно на 400 значений после него на краях задавленый сигнал будет в завис от окна. Делю эти 400 значений после окна на 20 полос окнами да? Почленно складываю эти 20 каналов по 20 значений и эти 20 значений кидаю на FFT так?
Не понимаю как делать из 20ти значений FFT там ничего не успеет посчитаться. Или суб полосы нужны просто для уменьшения вычислений? И их не нужно 20шт по кол-ву требуемых полос? А достаточно 4-5 как у Лайноса? Ну во-первых, для FFT лучше буфер длинной 2^m, т.е. если хотите близкое к 20, то либо 16, либо 32. Полифазное FFT – это по сути обычное FFT, но который проредили по частоте, т.е. часть выходных коэффициентов просто взяли и выкинули. А если они нам их все равно выкидывать, зачем их рассчитывать? Но чтобы восполнить пробелы в частотном спектре, возникшие вследствие прореживания, нужно расширить АЧХ оставшихся бинов. Бин это по сути один из фильтров, образующих гребенку и имеющий АЧХ применяемого окна, разумеется смещенной по частоте. Так вот, в случае обычного FFT с прямоугольным окном АЧХ бина имеет вид sinc-функции. Применяя окно мы изменяем АЧХ бина, при этом расширяя его. Следовательно нужно подобрать такое окно, которое нам даст нужное перекрытие АЧХ бинов при частотном прореживании, т.е. полифазном FFT. На прикрепленном рисунке приведены АЧХ бинов для обычного FFT с прямоугольным окном и полифазного с прореживанием в 2 раза для прямоугольного окна и рассчитанного заранее. Окно рассчитывается как КИХ фильтр. Видно что частотное перекрытие сохранилось, но количество бинов уменьшилось в 2 раза, а следовательно и требуемые ресурсы на вычисление уменьшились в 2 раза. Поясню как получается прореживание по частоте, если вы еще не поняли из ссылки, которую я привел. Берем буфер размера 2*N и складываем первую половину буфера со второй, после чего от буфера размера N делаем обычное FFT. Перейдем к вашему примеру. Берем буфер 384 (400 не подходит, т.к. не делится на степень двойки) и применяем к нему окно. Потом делим его например на 12 более мелки буферов и получаем буфер размером 32 от которого и вычисляем FFT. В итоге на выходе получаем разом 32 коэффициента, пропорциональных энергии сигнала, попавшей в полосу одного фильтра гребенки (бина). Итого одно окно размером 384 и одно FFT для расчета сразу 32 отчетов. Если не хотите терять сигнал в промежутках, когда он подавляется окном, то нужно также делать FFT с перекрытием.
|
|
|
|
|
Mar 6 2013, 16:42
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 1-12-06
Пользователь №: 23 016

|
Вот оно в чем дело.... Понятно. Хитро придумано! Нам не нужно делить сигнал в 20 раз по желаемому кол-ву полос, а разделить нужно на столько чтобы получить требуемое кол-во бинов. Они же сконцентрированные в соответствующем бине частоы попадающие в полосу пропускания окна. Ну только в вашем примере 32 чтобы степень 2 получалась для FFT. Я думал накладываем окно Блэкмана или Хэмминга чтобы устранить взаимное влияние соседних буферов, делим на 20 потом почленно складываем и накладываем еще окно и потом на FFT. Остался вопрос как ИХ КИХ фильтра может быть окном, оно же примерно имеет вид sin(x)/x http://dmilvdv.narod.ru/SpeechSynthesis/index.html?fir.html. Я бы понял если АЧХ КИХ фильтра была окном она хоть похожа на окно. А когда что-то похожее на затухающее колебание это может быть окном? (уже чувствую вопрос дилетанта) Спасибо Старик! ))
Сообщение отредактировал TViT - Mar 6 2013, 17:09
|
|
|
|
|
Mar 7 2013, 08:22
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 1-12-06
Пользователь №: 23 016

|
А мне свертку делать моего вх буфера 384 сэмпла с ИХ КИХ фильтра, но тогда я уничтожу частоты вне ПП КИХ фильтра или почленное умножение как написано на dsplib в теме полифазного FFT, если умножение то ИХ КИХ фильтра должна быть длиной 384 отсчета так? По длине вх буфера.
|
|
|
|
|
Mar 7 2013, 18:57
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 1-12-06
Пользователь №: 23 016

|
Цитата(SyncLair @ Mar 7 2013, 16:07)  Эххх вы бы не могли мне случайно подсказать современный 32 битный микропроцессор который работает на 150 С и стоит ну рублей 1000 и меньше. Помоему есть соответствующая ветка по микроконтроллерам... И сайты производителей где приводятся таблицы хар-к производимых микросхем... Еще спросите как пройти в универмаг...
|
|
|
|
|
Mar 8 2013, 15:18
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 1-12-06
Пользователь №: 23 016

|
Все Старик догнал, собственно вы все и расписали даже думать не нужно! Вот выдались праздники не торопясь прочитал еще раз вдумчиво все и понятно стало. Извиняюсь. ))) Если что должен пишите в личку, а засим кланяюсь и выражаю респект и уважуху! ))
Сообщение отредактировал TViT - Mar 8 2013, 15:20
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|