![]() |
|
![]() ![]() ![]() |
|
Dimmak |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 2.12.2012 Репутация: нет Всего: нет |
Подскажите, пожалуйста!
Как нужно использовать оконные функции совместно с FFT, чтоб при обратном 'склеивании' обработанных фрагментов избежать щелчков ( создать безшовное соединение аудио-материала )? Пытался следующим образом: Оконную обработку применяю для 768 сэмплов. Дальше FFT обработка 512и центральных сэмплов. Снова беру 768 сэмплов и при этом следующие центральные 512 точно следуют за предудущей FFT секцией ( те с перекрытием, как я понимаю ). Разница существенна с оконной функцией и без нее, но заметный шов остается. ![]() Оконные функции использую hanning, hamming, nuttall... |
|||
|
||||
Pavia |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
Просто обработка идёт с перекрытием 50-80%
|
|||
|
||||
Dimmak |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 2.12.2012 Репутация: нет Всего: нет |
Совсем НЕ понятно... ![]() Те методом подбора нужно определить количество сэмплов, которые необходимо 'подвергнуть' оконной функции ( исходя из того, какая именно оконная функция используктся ( hamming и тд )) ? Так? Пожалуйста, приведите практический пример при котором получается безшовное соединение, типа: Оконная функция - hamming для 700 сэмплов FFT обработка - 512 сэмплов ... Это сообщение отредактировал(а) Dimmak - 26.12.2012, 00:09 |
|||
|
||||
vedun |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 23.12.2010 Репутация: 2 Всего: 2 |
Dimmak вы фильтр хотите сделать на основе FFT ?
|
|||
|
||||
Dimmak |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 2.12.2012 Репутация: нет Всего: нет |
ДА! ![]() Я хочу чтобы после обратного БПФ ( FFTi ) обработанные секции соединялись без швов, для чего и использую оконные функции. Это сообщение отредактировал(а) Dimmak - 26.12.2012, 02:36 |
|||
|
||||
Pavia |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
Пусть у тебя сигнал 1000 000 сэмплов.
Берёшь окно пусть 512. Применяешь окно. Делаешь БПФ фильтруешь делаешь обратный БПФ. Сдвигаешь окно на 128-256 сэмплов. количество выбираешь от скорости качества. Сново применяешь окно. Делаешь БПФ фильтруешь делаешь обратный БПФ. Результат от разных окон смешиваешь сложить и поделить там где есть перекрытие. |
|||
|
||||
Dimmak |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 2.12.2012 Репутация: нет Всего: нет |
Pavia
Описываю весь процесс, как я делал: Пусть у меня сигнал размером в 768. Делю его на две секции ( с перекрытием ) по 512 те: 1я секция это сэмплы 1-512 2я - 257-768 перекрытие в данном случае составляет 256 сэмплов ( сэмплы 257 - 512 ). Теперь для каждой секции в отдельности: 1Окно Хамминга - 2FFT - 3фильтрация - 4FFTi Теперь из первой секции я беру последние 256 сэмплов ( 257-512 ), а из второй - первых 256 сэмплов( 1-256 ), сумирую их и делю на значение, при котором достигается максимальная слитность ( 1.2, к примеру ) И соединяю все вместе: 1-256 из первой секции, секция-перекрытие 256 и последних 256 из второй секции. Но при понижение фильтруемых частот до 0.3 и ниже появляются незначительные расхождения на стыках. Так должно быть??? Это сообщение отредактировал(а) Dimmak - 26.12.2012, 12:39 |
|||
|
||||
vedun |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 23.12.2010 Репутация: 2 Всего: 2 |
Посмотрите в этой книге, на странице 265. Там описан алгоритм фильтрации на основе ДПФ, а так же как правильно разбивать сигнал на секции с последующим склеиванием. |
|||
|
||||
Dimmak |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 2.12.2012 Репутация: нет Всего: нет |
vedun Спасибо, попробую разобраться...
Если честно, то я мало чего понял из прочтенного... ![]() ![]() Это сообщение отредактировал(а) Dimmak - 26.12.2012, 13:24 |
|||
|
||||
vedun |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 23.12.2010 Репутация: 2 Всего: 2 |
Для начала лучше напишите конкретные вопросы, что именно не понятно? И напишите чёткое ТЗ, что на входе что надо получить на выходе. Я давненько вопросами ЦОС не занимался, могу попробовать вечером своими словами изложить моё понимание вопроса
![]() |
|||
|
||||
Dimmak |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 2.12.2012 Репутация: нет Всего: нет |
Супер! ![]() Меня интересует процесс обработки аудиоматериала посредством FFT преобразования с использованием оконных функций ( Hamming, Hanning... ). Нашел интерсную статью на эту тему. 'Точных' рекомендаций в ней нет и по-этому некоторые мои вопросы выходят из этой самой статьи:
Cледовательно, как я понял: оконная функция( 1024 ) - FFT ( 512 центральных ) - фильтрация - iFFT( 512 центральных )
А в данном случае речь уже идет об усреднении результатов до обратного БПФ... Вариантов много... После того, как я разобрался с FTT и алгоритмом Герцеля мне все эти оконные дела показались простой ерундой, но немного покопавшись я запутался. А задача осталась прежней - качественный FFT фильтр с перекрытием( Ну и постичь возможности, которые дает БПФ ). Мне не нужна простая реализация: я хочу именно разобраться с данным вопросом. ![]() |
||||||||
|
|||||||||
Pavia |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
Про 0.3 не очень понял. Так и должно быть. Окна не избавляют от искажений. Просто перекрытие и следующее усреднение делает их менее заметными. Чем больше окон приходиться на один сэмпл тем менее заметно.
оконная функция( 1024 ) - FFT ( 1024 центральных ) - фильтрация - iFFT( 1024 центральных ) А вот на выходе берут не все отсчёты. А только центральные и пишут стык в стык. |
||||||
|
|||||||
vedun |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 23.12.2010 Репутация: 2 Всего: 2 |
Dimmak выше вы написали что хотите реализовать фильтр на основе алгоритма БПФ. Предположительно это должен быть КИХ филтр (по буржуйски FIR). Вам наверно извесно что фильтрация есть процесс вычисления свёртки сигнала с импульсной характеристикой фильтра. Кроме того у вас наврняка есть расчитаная импульсная характеристика вашего фильтра. Дальше вы хотите ускорить вычислительный процесс за счёт применения алгоритма БПФ (FFT). Для наглядности возмём такие исходные данные:
Дополняем ИХ 63 нулями, и считаем БПФ. Результат запоминаем. Назовём вектор результата F. Входной сигнал делится на блоки по 64 отсчёта (без перекрытия, в стык). Каждый входной блок данных дополняется 64 нулями после чего расчитывается его БПФ. Результат БПФ поотсчётно умножается на F. После чего расчитываем ОБПФ, длина которого равна 128 отсчётам. Такие выходные блоки объединяются с перекрфтием 64 точки. Перекрывающиеся точки суммируются. В результате объединения мы имеем фильтрованый сигнал. Эфективность будет тем выше, чем большую размерность БПФ мы возмём. Как видите весовые функции не имеют никакого отношения к алгоритму фильтрации на основе БПФ. Они используются лишь на этапе расчёта коэфициентов фильтра (его ИХ). Сдесь я описал алгоритм перекрытия с суммированием (overlap-add). Вот как то так и надо делать цифровой фильтр в моём представлении ![]() |
|||
|
||||
Dimmak |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 2.12.2012 Репутация: нет Всего: нет |
Pavia, vedun
Как снег на голову неотложные дела, но я вернулся и снова в строю! Для того, чтобы избежать непониманий и с моей и вашей сторон предлагаю манипулировать более точными величинами. Изложу материал насколько понял: Есть 16 сэмплов ( разбил их на 2 секции для простоты и наглядности, оБПФ обозначил ==== ) секция А секция Б ( 1 2 3 4 5 6 7 8 | 1 2 3 4 5 6 7 8 ) ___=====____ ___=====____ ___======___ 1. ( для сэмлов А1 - А8 ) - Оконная функция - БПФ - фильтрация. ( для сэмплов А3-А6 ) - оБПФ. 2. ( для сэмлов А3 - Б2 ) - Оконная функция - БПФ - фильтрация. ( для сэмплов А5-А8 ) - оБПФ и тд.
3. В местах пересечения результат оБПФ( отфильтрованная волна ) суммирую и делю на 2. Так?
Не совсем понятно... vedun
К сожалению сюда я еще не добрался, но как только разберусь с оконными перекрытиями, то с радостью займусь данным материалом! ![]() Это сообщение отредактировал(а) Dimmak - 28.12.2012, 12:42 |
||||||
|
|||||||
vedun |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 23.12.2010 Репутация: 2 Всего: 2 |
![]() |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |