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

 
 
> Суммирование с перекрытием и алиасинг, прошу прощения за избитость вопроса но хочу лучше понять
Сергей Ст
сообщение Jun 26 2017, 15:11
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 27-01-16
Пользователь №: 90 226



Здравствуйте ! Занимаясь шумоподавлением для звукового сигнала и применяя покадровую обработку понял что не достаточно хорошо понимаю метод суммирования с перекрытием при восстановлении очищенного от шума сигнала. Хотел бы проконсультироваться, но предварительно опишу то что сам понимаю и надеюсь что выплывут ошибки и недочеты моего понимания. Для шумоподавления я применяю метод спектрального вычитания, что аналогично применению фильтра в спектральной области с некоторой передаточной функцией. То есть очередной кадр с помощью кратковременного преобразования Фурье(с применением взвешивающего окна) преобразуется в спектральную область а дальше производится вычитание усредненного спектра шума и обратное преобразование во временную область. Кадры берутся с некоторым перекрытием. Затем полученный временной кадр очищенного сигнала суммируется с перекрытием с уже ранее очищенным участком сигнала.
Насколько я понимаю данная процедура должна быть технически аналогична ситуации когда имеется входная последовательность квазибесконечная и импульсная характеристика фильтра через который эта последовательность пропускается, достаточно короткая по сравнению с длиной входной последовательности. В этом случае принято применять так называемую секционированную свертку. Она основана на том что входная последовательность обрабатывается блоками. При этом чаще всего применяется алгоритмы свертки с использованием БПФ. То есть циклические свертки. Я нашел в литературе два предлагаемых варианта: (книжка Г. Нуссбаумер Быстрое преобразование Фурье и алгоритмы вычисления сверток)
1. Алгоритм перекрытия с суммированием.
2. Алгоритм перекрытия с накоплением.
В первом алгоритме входная последовательность разбивается на смежные (а не перекрывающиеся) блоки и свертка с ИХ фильтра производится при помощи циклического алгоритма свертки при этом последовательности дополняются нулями до некоторого размера N >= N1 + N2 - 1. N1 - длина последовательности, представляющей импульсную характеристику, N2 - длина кадра входной последовательности. Таким образом получаем результат циклической свертки который перекрывается со следующим блоком в N - N2 отсчетах. При суммировании перекрытий получаем результирующую последовательность.
Во втором алгоритме блоки изначально берутся перкрывающимися и над каждым блоком выполняется циклическая свертка. Затем первые N - N1 членов циклической свертки отбрасываются а остаются только N - N1 + 1 членов. Здесь никакого суммирования вообще не происходит. То есть последовательность выходная строится из смежных блоков правильных отсчетов. Более того в книге утверждается что этот вариант алгоритма предпочтительнее чем первый.
В случае же обработки которую рекомендуют в статьях о шумоподавлении применяется алгоритм блочной обработки который не принадлежит ни к одному из типов обработки, описанных выше. Хотя по идее любая обработка кадра входного сигнала в спектральной области - это применение фильтра с некоторой импульсной характеристикой преобразованной в частотную область (то есть передаточной функцией). И, поскольку длина кадра фиксированная, фиксированной надо полагать и эту самую импульсную характеристику. То есть можно применять один из алгоритмов описанных выше?? Но видимо не все так просто.
Теперь об оконном преобразовании Фурье и алиасинге. Алиасинг сколько я понимаю - это перетекание высокочастотных компонентов спектра в низкочастотные с отражением от середины при недостаточной частоте дискретизации. (поправьте если не прав) Оконное преобразование применяется для того чтобы в спектр попали частоты из среднего участка кадра и спектр не был бы искажен из за разрыва сигнала на границах блоков ? Я правильно понимаю ? При этом перекрытие как утверждается определяет уровень алиасинга. Вот тут я совершенно плохо понимаю как это взаимосвязано. Буду рад любой информации и подсказке где почитать о подобной обработке блоков с перекрытием.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
andyp
сообщение Jun 26 2017, 17:38
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(Сергей Ст @ Jun 26 2017, 18:11) *
...Более того в книге утверждается что этот вариант алгоритма предпочтительнее чем первый.


Overlap-save ничем не лучше overlap-add с точки зрения теории. В смысле - и в том и в другом случае получится одинаковая последовательность на выходе.

Цитата
В случае же обработки которую рекомендуют в статьях о шумоподавлении применяется алгоритм блочной обработки который не принадлежит ни к одному из типов обработки, описанных выше. Хотя по идее любая обработка кадра входного сигнала в спектральной области - это применение фильтра с некоторой импульсной характеристикой преобразованной в частотную область (то есть передаточной функцией). И, поскольку длина кадра фиксированная, фиксированной надо полагать и эту самую импульсную характеристику. То есть можно применять один из алгоритмов описанных выше?? Но видимо не все так просто.


Количество отсчетов в ЧХ полученного фильтра равно длине используемого преобразования Фурье. После обратного преобразования Фурье в общем случае получится столько же отсчетов и в ИХ. А перекрытие у Вас по длине меньше, т.е. условия использования алгоритмов overlap-add/save не выполняются.

Капитан очевидность подсказывает, что можно обеспечить требуемую длину ИХ просто сделав c ЧХ следующее преобразование IFFT ->обнуляем все, что вылазит за N1 -> FFT. Если N1 кратно N2 (N2 = k*N1, k - целое) то можно просто занулить каждый k-ый отсчет ЧХ фильтра начиная с k и получим ИХ длины N2.(Это я ступил и погорячился sm.gif)

Но в этом случае фильтр станет "не совсем винеровским" и на выходе останется недодавленная помеха, которую могли бы додавить.

В результате имеем баланс - искажения вызванные усечением ИХ фильтра vs искажения вызванные наложением при использовании циклической свертки вместо линейной. Что победит - зависит от конкретной ИХ фильтра.

Поэтому еще в той теме писал, что все эти алгоритмы шумоподавления отдают "черной магией"

Впрочем, вот есть статья о том как хорошо делать подобные свертки

Сообщение отредактировал andyp - Jun 27 2017, 12:03
Прикрепленные файлы
Прикрепленный файл  _doi_10.1109_2Ficassp.2010.5495161_.pdf ( 202.47 килобайт ) Кол-во скачиваний: 54
 
Go to the top of the page
 
+Quote Post
Сергей Ст
сообщение Jun 27 2017, 15:51
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 27-01-16
Пользователь №: 90 226



Цитата(andyp @ Jun 26 2017, 21:38) *
Количество отсчетов в ЧХ полученного фильтра равно длине используемого преобразования Фурье. После обратного преобразования Фурье в общем случае получится столько же отсчетов и в ИХ. А перекрытие у Вас по длине меньше, т.е. условия использования алгоритмов overlap-add/save не выполняются.

Вот здесь я немножко начинаю путаться( То есть если внимательно читать про перекрытие с накоплением то нужны блоки длиной N, при этом N >= N2 и N >= N1. Таким образом блок перекрывается с предыдущим в N - N2 отсчетах.
Выход цифрового фильтра представляет собой последовательные циклические N-точечные свертки блоков входного сигнала с блоками длины N, получившимися путем добавления N-N1 нулей к импульсной характеристике.
Далее часть отсчетов ошибочных отбрасывается а остальные накапливаются в соответствующем интервале выходного сигнала. Это я упрощенно цитирую Нуссбаумера. В нашем же случае длина блока равна длине
импульсной характеристики. И чем это плохо для применения алгоритма перекрытия с накоплением. Почему именно длина перекрытия должна быть не менее длины импульсной характеристики фильтра? Это не совсем укладывается в
голову(
andyp я прилагаю книжку Нуссбаумера в zip архиве в формате djvu. Если интересно пробегите раздел по цифровой фильтрации, использующей циклическюу свертку начиная со страницы 34. Там немножко.
Я наверняка что то упускаю что Вы сразу обнаружите...

Цитата
Капитан очевидность подсказывает, что можно обеспечить требуемую длину ИХ просто сделав c ЧХ следующее преобразование IFFT ->обнуляем все, что вылазит за N1 -> FFT.

Но в этом случае фильтр станет "не совсем винеровским" и на выходе останется недодавленная помеха, которую могли бы додавить.

В результате имеем баланс - искажения вызванные усечением ИХ фильтра vs искажения вызванные наложением при использовании циклической свертки вместо линейной. Что победит - зависит от конкретной ИХ фильтра.

Поэтому еще в той теме писал, что все эти алгоритмы шумоподавления отдают "черной магией"

Впрочем, вот есть статья о том как хорошо делать подобные свертки


Огромное спасибо за статью! Прочитаю обязательно и внимательно.


Цитата(petrov @ Jun 26 2017, 23:53) *
Если блоки при вычисленнии банка КИХ фильтров берутся со смещением в 1 отсчёт, то децимации нет, алиасинга нет, если со смещением в половину блока N, то получается децимация N/2.
Собственно от FFT можно абстрагироваться, обычные эффекты алиасинга при фильтрации и децимации-интерполяции.
FFT+полифазные фильтры - всего лишь быстрый алгоритм вычисления банка фильтров, происходящий от того факта, что гребёнка фильтров имеет общий ФНЧ прототип и вычисляется над одними и теми же данными.
Кстати, окно(ФНЧ-прототип) вовсе не обязано равнятся длине блока FFT.

Спасибо Вам большое! В общих чертах что то проясняется, но к сожалению еще не достаточно хорошо знаю теоретические основы. То есть смещение более чем на один отсчет от начала блока это прореживание по частоте ?
Насколько я помню децимация вынуждает нас применять ФНЧ. К сожалению с полифазными фильтрами не имел дела поэтому трудно что то ответить.
Еще раз спасибо!

Прикрепленные файлы
Прикрепленный файл  NFFTC.zip ( 2.47 мегабайт ) Кол-во скачиваний: 24
 
Go to the top of the page
 
+Quote Post
petrov
сообщение Jun 27 2017, 16:22
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



Цитата(Сергей Ст @ Jun 27 2017, 18:51) *
То есть смещение более чем на один отсчет от начала блока это прореживание по частоте ?


Например, если выход КИХ фильтра децимируем в 2 раза, то мы можем не вычислять отбрасываемые отсчёты, т. е. брать блоки входных отсчётов со смещением в 2 отсчёта.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Сергей Ст   Суммирование с перекрытием и алиасинг   Jun 26 2017, 15:11
|- - KalashKS   Цитата(andyp @ Jun 26 2017, 20:38) Overla...   Jun 27 2017, 10:35
||- - andyp   Цитата(KalashKS @ Jun 27 2017, 13:35) Пер...   Jun 27 2017, 12:24
|- - andyp   Цитата(Сергей Ст @ Jun 27 2017, 18:51) Во...   Jun 27 2017, 21:27
- - petrov   Цитата(Сергей Ст @ Jun 26 2017, 18:11) Ал...   Jun 26 2017, 19:53
- - thermit   http://electronix.ru/redirect.php?https://...t...   Jun 27 2017, 21:34
- - andyp   Цитата(thermit @ Jun 28 2017, 00:34) Утом...   Jun 27 2017, 21:46
- - Сергей Ст   Цитата(thermit @ Jun 28 2017, 01:34) http...   Jul 4 2017, 08:44
- - petrov   Цитата(Сергей Ст @ Jul 4 2017, 11:44) Мне...   Jul 4 2017, 09:38
- - Сергей Ст   Цитата(petrov @ Jul 4 2017, 13:38) Потому...   Jul 4 2017, 11:20
- - petrov   Цитата(Сергей Ст @ Jul 4 2017, 14:20) Даж...   Jul 4 2017, 11:36
- - Сергей Ст   Цитата(petrov @ Jul 4 2017, 15:36) Непрев...   Jul 4 2017, 12:11
- - petrov   Цитата(Сергей Ст @ Jul 4 2017, 15:11) В п...   Jul 4 2017, 13:48
|- - Сергей Ст   Цитата(petrov @ Jul 4 2017, 17:48) Пробле...   Jul 5 2017, 13:56
- - Сергей Ст   Я рискну задать глупый вопрос. Я все думал об алиа...   Jul 7 2017, 11:31
- - petrov   Цитата(Сергей Ст @ Jul 7 2017, 14:31) Я р...   Jul 7 2017, 16:31
- - Сергей Ст   Цитата(petrov @ Jul 7 2017, 20:31) Проред...   Jul 10 2017, 07:35


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

 


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


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