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

 
 
> Resampling 44100 -> 12800, нужна помощь по реализации.
evil_laugh
сообщение Dec 18 2012, 16:00
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 4-10-11
Пользователь №: 67 546



Приветствую уважаемых гуру цифровой обработки sm.gif

Прошу помочь мне с алгоритмом, который бы осуществлял изменение частоты дискретизации сигнала с 44100 до 12800 Гц. Сигнал - 16битные отсчёты с микрофона, обычный PCM.

Требования к передискретизатору следующие:

а) пропускание частоты сигнала в полосе от 0 до 6 кГц с неравномерностью АЧХ не более 3 дБ
б) подавление сигнала в полосе 6200 Гц - 6400 Гц не меньше, чем на 60 дБ
в) и самое главное - крайне жёсткие требования к объёму используемой оперативной памяти и процессорного времени. Процессор, для которого пишется алгоритм, помимо передискретизации загружен ещё тонной задач. Оперативной памяти для алгоритма может быть выделено не более 2 кБ. Время - как всегда, чем меньше, тем лучше.

Расскажу о том, какие исследования я провёл в этой области.

  1. Естественно, что чтобы сделать изменение Fд 44100->12800, нужно сперва повысить частоту в 128 раз, потом понизить в 441 раз. Фильтр, который нужен для такой передискретизации в один каскад, имеет больше 7000 коэффициентов (рассматриваем КИХ-фильтрацию), поэтому вариант с таким алгоритмом отпал сразу.
  2. Следующим моим шагом было создание многокаскадной системы: сперва повышение частоты в 2*4*16=128 раз, потом её уменьшение в 21*7*3=441 раз. Естественно, использовалось полифазное разбиение фильтров. На входе алгоритма был 441 отсчёт, на выходе - 128. Всё работало и обеспечивало требуемые параметры АЧХ, однако требовалось много места (нужно же где-то хранить 441*2*8 промежуточных отсчётов сигнала на высокой частоте) и много процессорного времени. Поэтому от этого алгоритма тоже пришлось отказаться. Было поставлено требование: только однокаскадная передискретизация.
  3. Попутно, кстати, была прочитана горка литературы по фильтрам Фарроу, Ланцоша и прочим полиномиальным фильтрам, но ввиду почти полного отсутствия вменяемых реализаций с графиками и прочими данными - я понял только общий принцип и то, что обмануть никого не удастся и всё равно придётся реализовывать огроменный фильтр.
  4. Дальше попробовал сделать так: разработать фильтр с меньшим количеством отсчётов, а при фильтрации проводить интерполяцию полученных значений. При этом было решено поступиться требованиями к переходной полосе фильтра и сделать так, чтобы на 6200 Гц обеспечивалось подавление не ниже 15 дБ, но все дальнейшие частоты выше какой-то величины (у меня получилось 7 кГц) всё равно должны были подавляться не меньше, чем на 60 дБ. Алгоритм был написан на Си и показал свою работоспособность. Казалось бы, всё в порядке и можно писать программу для DSP, но меня не покидало ощущение того, что можно попробовать что-то ещё. Поэтому плавно переезжаем к...
  5. ...фильтрации в частотной области, которую я решил рассмотреть как вариант реализации передискретизатора. Что нужно? Правильно, взять ДПФ исходных 441 точек сигнала, занулить ненужные гармоники, выкинуть ненужные 441-128 отсчётов из середины спектра и золотой ключик у меня в кармане. Однако снова возник ряд проблем. Первая - это "как быстро взять ДПФ 441 точек?". Дополнение нулями до 512 точек, судя по всему, не прокатывает - для передискретизации в частотной области придётся выкинуть нецелое количество точек. Ладно, для этого вопроса решение было найдено путём штудирования книжки Блейхута "Быстрые алгоритмы цифровой обработки", откуда я выудил алгоритмы Кули-Таки и алгоритм Гуда-Томаса (который прекрасно работает для числа 441, ибо это 3*3*7*7 - произведение простых чисел). Решение спорное, впрочем, ибо архитектура DSP, ИМХО, ну ни разу не приспособлена для подобного рода выкрутасов со всеми этими адресными тасованиями, тем более в моём дилетантском исполнении. Впрочем, возникает вторая проблема, которая затмевает собой первую: как избежать эффекта Гиббса в данной ситуации? Напрашивается всем известный overlap-save, однако не получится ли так, что время, затрачиваемое на вычисление "лишних" точек, которые потом выкидываются, сведёт весь выигрыш от используемого алгоритма на нет?



Собственно, у меня вопрос к уважаемому сообществу: что можно ещё придумать, чтобы выполнить задачу? Приветствуются пинки ногами, крики "пшёл вон, нуб", а также ссылки на авторитетные источники, личный опыт и другую информацию. Напомню задачу: 44100 -> 12800. пропускание 0-6 кГц с неравномерностью 3 дБ, подавление 6200-6400 минимум 60 дБ, минимум процессорного времени, 2 кБ памяти.

Спасибо sm.gif


Сообщение отредактировал evil_laugh - Dec 18 2012, 16:03
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
evil_laugh
сообщение Dec 20 2012, 09:32
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 4-10-11
Пользователь №: 67 546



Большое всем спасибо за грамотные и содержательные ответы. Картина значительно прояснилась. Попробую повысить частоту дискретизации и потом использовать Лагранжа.

Надо учиться пользоваться Матлабом, а то симуляция различных вариантов много времени занимает sm.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- evil_laugh   Resampling 44100 -> 12800   Dec 18 2012, 16:00
- - Serg76   дробный ресамплер на основе все того же полифазног...   Dec 18 2012, 16:09
|- - evil_laugh   Цитата(Serg76 @ Dec 18 2012, 19:09) дробн...   Dec 18 2012, 16:18
|- - Serg76   Цитата(evil_laugh @ Dec 18 2012, 19:18) С...   Dec 18 2012, 16:28
- - beaRTS   Цитата(evil_laugh @ Dec 18 2012, 20:00) П...   Dec 18 2012, 16:20
|- - evil_laugh   Цитата(beaRTS @ Dec 18 2012, 19:20) если ...   Dec 18 2012, 16:24
- - des00   Цитата(evil_laugh @ Dec 18 2012, 11:00) П...   Dec 18 2012, 16:43
|- - evil_laugh   Цитатане знаю даже, при таких исходных параметрах ...   Dec 18 2012, 16:47
||- - Serg76   Цитата(evil_laugh @ Dec 18 2012, 20:47) В...   Dec 18 2012, 16:53
||- - des00   Цитата(evil_laugh @ Dec 18 2012, 11:47) А...   Dec 18 2012, 16:59
|- - Самурай   Цитата(des00 @ Dec 18 2012, 19:43) судя п...   Dec 18 2012, 17:08
|- - Serg76   Цитата(Самурай @ Dec 18 2012, 20:08) Филь...   Dec 18 2012, 17:29
|- - Самурай   Соврал немного про каскады 4/7 и 4/3, фильтры там ...   Dec 18 2012, 17:41
- - Serg76   ну вот, судя по расчетам des00 я вроде не так и да...   Dec 18 2012, 16:44
- - evil_laugh   Цитата(Serg76 @ Dec 18 2012, 19:53) не зн...   Dec 18 2012, 17:36
|- - Serg76   Цитата(evil_laugh @ Dec 18 2012, 21:36) В...   Dec 18 2012, 17:53
|- - alex_os   А если так попробовать: 1. Делаем ФHЧ тактовой 441...   Dec 19 2012, 05:28
- - evil_laugh   Цитата(alex_os @ Dec 19 2012, 08:28) А ес...   Dec 19 2012, 18:30
|- - alex_os   Цитата(evil_laugh @ Dec 19 2012, 21:30) В...   Dec 20 2012, 04:35
|- - Serg76   Цитата(evil_laugh @ Dec 19 2012, 21:30) С...   Dec 20 2012, 16:16
- - thermit   Результат соответствует действительности. точност...   Dec 19 2012, 20:51
|- - des00   Цитата(thermit @ Dec 19 2012, 15:51) Можн...   Dec 20 2012, 06:00
|- - alex_os   Цитата(des00 @ Dec 20 2012, 09:00) сделал...   Dec 20 2012, 06:25
- - thermit   Цитатаalex_os: По моим оценкам полинома 3го поряд...   Dec 20 2012, 07:41
|- - alex_os   Цитата(thermit @ Dec 20 2012, 10:41) Для ...   Dec 20 2012, 17:12
|- - Serg76   Цитата(alex_os @ Dec 20 2012, 21:12) Част...   Dec 20 2012, 18:19
- - evil_laugh   Serg76, похоже, Вы познали Дао. У меня только один...   Dec 20 2012, 18:35
|- - Serg76   Цитата(evil_laugh @ Dec 20 2012, 22:35) S...   Dec 20 2012, 18:54
|- - evil_laugh   Цитата(Serg76 @ Dec 20 2012, 21:54) да ка...   Dec 20 2012, 19:03
|- - Serg76   Цитата(evil_laugh @ Dec 20 2012, 23:03) Т...   Dec 20 2012, 19:30
|- - evil_laugh   Цитата(Serg76 @ Dec 20 2012, 22:30) Да, о...   Dec 20 2012, 20:09
|- - Serg76   Цитата(evil_laugh @ Dec 21 2012, 00:09) Э...   Dec 20 2012, 20:24
|- - evil_laugh   Цитата(Serg76 @ Dec 20 2012, 23:24) нет, ...   Dec 20 2012, 20:43
|- - alex_os   Цитата(Serg76 @ Dec 20 2012, 23:24) нет, ...   Dec 21 2012, 06:32
|- - Serg76   Цитата(alex_os @ Dec 21 2012, 09:32) Т.е ...   Dec 21 2012, 06:50
|- - evil_laugh   Цитата(Serg76 @ Dec 21 2012, 09:50) Наско...   Dec 22 2012, 08:31
- - thermit   ЦитатаSerg76: Насколько я понимаю, thermit предлаг...   Dec 21 2012, 07:34
|- - Serg76   Цитата(thermit @ Dec 21 2012, 11:34) 1. Ф...   Dec 21 2012, 07:57
- - thermit   ЦитатаSerg76: Схемы реализации разные - либо в ви...   Dec 21 2012, 09:03
|- - Serg76   Цитата(thermit @ Dec 21 2012, 12:03) Одно...   Dec 21 2012, 09:23
|- - Serg76   Sorry, что-то глюкнуло   Dec 21 2012, 09:26
- - thermit   Цитатаevil_laugh: Тут столкнулся с рядом проблем, ...   Dec 22 2012, 09:22
- - Serg76   ну давайте, попробуем по пунктам: Цитата1. Нужно т...   Dec 22 2012, 09:31


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

 


RSS Текстовая версия Сейчас: 17th June 2025 - 13:00
Рейтинг@Mail.ru


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