Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование оконных функций, совместно с FFT обработкой 
:(
    Опции темы
Dimmak
  Дата 25.12.2012, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 2.12.2012

Репутация: нет
Всего: нет



Подскажите, пожалуйста!
Как нужно использовать оконные функции совместно с FFT, чтоб при обратном
'склеивании' обработанных фрагментов избежать щелчков ( создать безшовное соединение аудио-материала )?
Пытался следующим образом:
Оконную обработку применяю для 768 сэмплов.
Дальше FFT обработка 512и центральных сэмплов.
Снова беру 768 сэмплов и при этом следующие центральные 512 точно следуют за предудущей FFT секцией ( те с перекрытием, как я понимаю ). Разница существенна с оконной функцией и без нее, но заметный шов остается.  smile 
Оконные функции использую hanning, hamming, nuttall... 
PM MAIL   Вверх
Pavia
Дата 25.12.2012, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Просто обработка идёт с перекрытием 50-80%
PM MAIL   Вверх
Dimmak
  Дата 26.12.2012, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 2.12.2012

Репутация: нет
Всего: нет



Цитата

Просто обработка идёт с перекрытием 50-80%

Совсем НЕ понятно...  smile 
Те методом подбора нужно определить количество сэмплов, которые необходимо 'подвергнуть' оконной функции ( исходя из того, какая именно оконная функция используктся ( hamming и тд )) ?
Так?
Пожалуйста, приведите практический пример при котором получается безшовное соединение, типа:
Оконная функция - hamming для 700 сэмплов
FFT обработка - 512 сэмплов ... 

Это сообщение отредактировал(а) Dimmak - 26.12.2012, 00:09
PM MAIL   Вверх
vedun
Дата 26.12.2012, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 23.12.2010

Репутация: 2
Всего: 2



Dimmak вы фильтр хотите сделать на основе FFT ?
PM ICQ Skype Jabber   Вверх
Dimmak
Дата 26.12.2012, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 2.12.2012

Репутация: нет
Всего: нет



Цитата

Dimmak вы фильтр хотите сделать на основе FFT ?

ДА!  smile 
Я хочу чтобы  после обратного БПФ ( FFTi ) обработанные секции соединялись без швов,
для чего и использую оконные функции. 

Это сообщение отредактировал(а) Dimmak - 26.12.2012, 02:36
PM MAIL   Вверх
Pavia
Дата 26.12.2012, 05:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Пусть у тебя сигнал 1000 000 сэмплов.
Берёшь окно пусть 512.
Применяешь окно. Делаешь БПФ фильтруешь делаешь обратный БПФ. 
Сдвигаешь окно на 128-256 сэмплов. количество выбираешь от скорости качества.  Сново применяешь  окно. Делаешь БПФ фильтруешь делаешь обратный БПФ.  
Результат от разных окон смешиваешь сложить и поделить там где есть перекрытие. 
PM MAIL   Вверх
Dimmak
  Дата 26.12.2012, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
vedun
Дата 26.12.2012, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 23.12.2010

Репутация: 2
Всего: 2



Цитата(Dimmak @ 26.12.2012,  02:16)
ДА!  smile 
Я хочу чтобы  после обратного БПФ ( FFTi ) обработанные секции соединялись без швов, для чего и использую оконные функции.

Посмотрите в этой книге, на странице 265. Там описан алгоритм фильтрации на основе ДПФ, а так же как правильно разбивать сигнал на секции с последующим склеиванием.
PM ICQ Skype Jabber   Вверх
Dimmak
  Дата 26.12.2012, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 2.12.2012

Репутация: нет
Всего: нет



vedun Спасибо, попробую разобраться...
Если честно, то я мало чего понял из прочтенного...  smile 
  smile 

Это сообщение отредактировал(а) Dimmak - 26.12.2012, 13:24
PM MAIL   Вверх
vedun
Дата 26.12.2012, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 23.12.2010

Репутация: 2
Всего: 2



Для начала лучше напишите конкретные вопросы, что именно не понятно? И напишите чёткое ТЗ, что на входе что надо получить на выходе. Я давненько вопросами ЦОС не занимался, могу попробовать вечером своими словами изложить моё понимание вопроса smile
PM ICQ Skype Jabber   Вверх
Dimmak
Дата 26.12.2012, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 2.12.2012

Репутация: нет
Всего: нет



Цитата

могу попробовать вечером своими словами изложить моё понимание вопроса

Супер!  smile

Меня интересует процесс обработки аудиоматериала посредством FFT преобразования с использованием оконных функций ( Hamming, Hanning... ).

Нашел интерсную статью на эту тему. 'Точных' рекомендаций в ней нет и по-этому некоторые мои вопросы выходят из этой самой статьи: 

Цитата

http://websound.ru/articles/theory/filter.htm
понятно, что после применения любой оконной функции речь уже не идет о том, чтобы просто синтезировать сигнал обратно и получить исходную функцию. Информация с концов блока почти не используется, мы её просто не восстановим. Синтезировать, однако, можно, если пользоваться более хитрыми приемами работы. Тут мы подходим ко второму важному принципу работы с FFT, не очень обязательному при работе с полными блоками, но уже почти обязательному при работе с оконными функциями: блоки FFT обработки должны перекрываться.

Так или иначе, в FFT анализе применяются две технологии. Первая - использование результатов FFT разложения для синтеза лишь центральной части исходной функции. Например, FFT = 1024, но мы используем данные FFT преобразования для обратного синтеза лишь, к примеру, центральных 600 отсчетов, а не всех 1024-х. Соответственно, второй принцип, следующий из этого - исходные FFT блоки тоже должны перекрываться, хотя бы для того, чтобы мы могли исходно синтезировать сигнал обратно. Бывает полезно, однако, перекрывать их еще сильнее, используя усреднение результатов на стыке блоков. Это - обычно тот параметр, который отвечает за качество FFT разложения (и, соответственно, обработки).


Цитата

1. Например, FFT = 1024, но мы используем данные FFT преобразования для обратного синтеза лишь, к примеру, центральных 600( скорее 512 ) отсчетов, а не всех 1024-х.


Cледовательно, как я понял:
оконная функция( 1024 ) - FFT ( 512 центральных ) - фильтрация - iFFT( 512 центральных ) 

Цитата

2. Бывает полезно, однако, перекрывать их еще сильнее, используя усреднение результатов на стыке блоков. Это - обычно тот параметр, который отвечает за качество FFT разложения (и, соответственно, обработки)

А в данном случае речь уже идет об усреднении результатов до обратного БПФ... Вариантов много...

После того, как я разобрался с FTT и алгоритмом Герцеля мне все эти оконные дела показались простой ерундой, но немного покопавшись я запутался.
А задача осталась прежней - качественный FFT фильтр с перекрытием( Ну и постичь возможности, которые дает БПФ ). Мне не нужна простая реализация: я хочу именно разобраться с данным вопросом.  smile 

PM MAIL   Вверх
Pavia
Дата 26.12.2012, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Цитата

Но при понижение фильтруемых частот до 0.3 и ниже появляются незначительные расхождения на стыках. Так должно быть???

Про 0.3 не очень понял. Так и должно быть. Окна не избавляют от искажений. Просто перекрытие и следующее усреднение делает их менее заметными. Чем больше окон приходиться на один сэмпл тем менее заметно.

Цитата

их и делю на значение, при котором достигается максимальная слитность
 ( 1.2, к примеру )
 Я бы делил бы на число окон на сэмпл. 

Цитата

Cледовательно, как я понял:
оконная функция( 1024 ) - FFT ( 512 центральных ) - фильтрация - iFFT( 512 центральных ) 
 Не правильно поняли.   На входе окна идут с перекрытием.
оконная функция( 1024 ) - FFT ( 1024 центральных ) - фильтрация - iFFT( 1024 центральных )  
А вот на выходе берут не все отсчёты. А только центральные и пишут стык в стык. 
PM MAIL   Вверх
vedun
Дата 26.12.2012, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 23.12.2010

Репутация: 2
Всего: 2



Dimmak выше вы написали что хотите реализовать фильтр на основе алгоритма БПФ. Предположительно это должен быть КИХ филтр (по буржуйски FIR). Вам наверно извесно что фильтрация есть процесс вычисления свёртки сигнала с импульсной характеристикой фильтра. Кроме того у вас наврняка есть расчитаная импульсная характеристика вашего фильтра. Дальше вы хотите ускорить вычислительный процесс за счёт применения алгоритма БПФ (FFT). Для наглядности возмём такие исходные данные:
Код

Длина ИХ фильтра    - 65 отсчётов
Длина блока данных  - 64 отсчёта
Размерность БПФ     - 128 точек

Дополняем ИХ 63 нулями, и считаем БПФ. Результат запоминаем. Назовём вектор результата F.
Входной сигнал делится на блоки по 64 отсчёта (без перекрытия, в стык). Каждый входной блок данных дополняется 64 нулями после чего расчитывается его БПФ. Результат БПФ поотсчётно умножается на F. После чего расчитываем ОБПФ, длина которого равна 128 отсчётам. Такие выходные блоки объединяются с перекрфтием 64 точки. Перекрывающиеся точки суммируются. В результате объединения мы имеем фильтрованый сигнал. Эфективность будет тем выше, чем большую размерность БПФ мы возмём. Как видите весовые функции не имеют никакого отношения к алгоритму фильтрации на основе БПФ. Они используются лишь на этапе расчёта коэфициентов фильтра (его ИХ). Сдесь я описал алгоритм перекрытия с суммированием (overlap-add). Вот как то так и надо делать цифровой фильтр в моём представлении smile
PM ICQ Skype Jabber   Вверх
Dimmak
  Дата 28.12.2012, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
Цитата

Вам наверно извесно что фильтрация есть процесс вычисления свёртки сигнала с импульсной характеристикой фильтра. Кроме того у вас наврняка есть расчитаная импульсная характеристика вашего фильтра.

К сожалению сюда я еще не добрался, но как только разберусь с оконными перекрытиями, то с радостью займусь данным материалом!  smile 

Это сообщение отредактировал(а) Dimmak - 28.12.2012, 12:42
PM MAIL   Вверх
vedun
Дата 28.12.2012, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 23.12.2010

Репутация: 2
Всего: 2



Цитата(Dimmak @ 28.12.2012,  12:34)
...
Изложу материал насколько понял: 
Есть 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 ) - оБПФ и тд.
 На первый взгляд это не фильтр а просто "некая манипуляция с сигналом". Что вы при такой обработке хотите иметь на выходе? И что во фразе "БПФ - фильтрация" понимается под словом фильтрация?

Цитата
К сожалению сюда я еще не добрался, но как только разберусь с оконными перекрытиями, то с радостью займусь данным материалом!  smile
 С этого надо было начинать, иначе с перекрытием вряд ли разберётесь   smile 
PM ICQ Skype Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1194 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.