На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Правила раздела "Программирование звука"
0) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с записью, обработкой, воспроизведением звука. Перед созданием темы подумайте, не будет ли она уместнее в разделах Разработка и тестирование программ, Наши исходники, а особенно Разовые заказы и подработки
1) На Раздел распространяются все Правила форума.Огромная просьба с ними внимательно ознакомиться.
2) Запрещается давать бессмысленные ответы вроде: "Снеси Мастдай", "ХП рулит", "Поставь Линукс" и т.д.
3) Запрещается создавать темы, в которых Вы намереваетесь получить ссылку на кряки, серийники и т.п. Также запрещено любое обсуждение p2p (peer-to-peer) сетей (BitTorrent, eDonkey и т.д.).
4) Реклама всякого рода пресекается беспощадно.
5) Используйте тэг [CODE] для выделения кода программы (непременно с указанием языка программирования - выбрать из списка. В противном случае бессмысленно!). Уважайте тех, кто будет читать ваш код!
6) Если решение вашей проблемы найдено, то не забываем помечать тему специальной функцией "Вопрос решён". Вам всего лишь требуется при написании последнего ответа поставить одну единственную галочку прямо над формой ответа.
7) Если вы хотите получить совет для конкретной платформы/языка программирования, обязательно укажите их в вопросе

8) Если не прикрепляются/не скачиваются файлы, читаем Не прикрепляется / не скачивается файл. Любые обсуждения в данном разделе проблем с приложением файлов считаются оффтопиком! Со всеми вытекающими.

9) NEW! Уважаемые новички! Мы приветствуем Ваше желание научить всех посетителей раздела правильному программированию. Но огромная просьба, перед тем, как писать поучения в старых (последний ответ - "старее" месяца, а особенно, если вопрошавший не появляется на форуме уже не первый месяц, в чем можно убедиться в его профиле) темах, хорошо подумать, будет ли кому-нибудь, кроме Вас cамих, это интересно. Попытки накрутки количества тематических сообщений за счёт поднятия древних неактуальных тем ("некрофилия") будут наказываться по велению левой пятки модераторского состава (см. пп.12, 13 Правил)



Нарушение Правил может повлечь наказание со стороны модераторов.



user posted imageFAQ Раздела user posted imageПоиск в Разделе user posted imageMSDN Library Online | Ваше мнение о модераторах: user posted imageBarazuk user posted imageRikkie
Модераторы: barazuk
  
> Суммирование с перекрытием и алиасинг, прошу прощения за избитость вопроса но хочу лучше понять
    Здравствуйте ! Занимаясь шумоподавлением для звукового сигнала и применяя покадровую обработку понял что не достаточно хорошо понимаю метод суммирования с перекрытием при восстановлении очищенного от шума сигнала. Хотел бы проконсультироваться, но предварительно опишу то что сам понимаю и надеюсь что выплывут ошибки и недочеты моего понимания. Для шумоподавления я применяю метод спектрального вычитания, что аналогично применению фильтра в спектральной области с некоторой передаточной функцией. То есть очередной кадр с помощью кратковременного преобразования Фурье(с применением взвешивающего окна) преобразуется в спектральную область а дальше производится вычитание усредненного спектра шума и обратное преобразование во временную область. Кадры берутся с некоторым перекрытием. Затем полученный временной кадр очищенного сигнала суммируется с перекрытием с уже ранее очищенным участком сигнала.
    Насколько я понимаю данная процедура должна быть технически аналогична ситуации когда имеется входная последовательность квазибесконечная и импульсная характеристика фильтра через который эта последовательность пропускается, достаточно короткая по сравнению с длиной входной последовательности. В этом случае принято применять так называемую секционированную свертку. Она основана на том что входная последовательность обрабатывается блоками. При этом чаще всего применяется алгоритмы свертки с использованием БПФ. То есть циклические свертки. Я нашел в литературе два предлагаемых варианта: (книжка Г. Нуссбаумер Быстрое преобразование Фурье и алгоритмы вычисления сверток)
    1. Алгоритм перекрытия с суммированием.
    2. Алгоритм перекрытия с накоплением.
    В первом алгоритме входная последовательность разбивается на смежные (а не перекрывающиеся) блоки и свертка с ИХ фильтра производится при помощи циклического алгоритма свертки при этом последовательности дополняются нулями до некоторого размера N >= N1 + N2 - 1. N1 - длина последовательности, представляющей импульсную характеристику, N2 - длина кадра входной последовательности. Таким образом получаем результат циклической свертки который перекрывается со следующим блоком в N - N2 отсчетах. При суммировании перекрытий получаем результирующую последовательность.
    Во втором алгоритме блоки изначально берутся перкрывающимися и над каждым блоком выполняется циклическая свертка. Затем первые N - N1 членов циклической свертки отбрасываются а остаются только N - N1 + 1 членов. Здесь никакого суммирования вообще не происходит. То есть последовательность выходная строится из смежных блоков правильных отсчетов. Более того в книге утверждается что этот вариант алгоритма предпочтительнее чем первый.
    В случае же обработки которую рекомендуют в статьях о шумоподавлении применяется алгоритм блочной обработки который не принадлежит ни к одному из типов обработки, описанных выше. Хотя по идее любая обработка кадра входного сигнала в спектральной области - это применение фильтра с некоторой импульсной характеристикой преобразованной в частотную область (то есть передаточной функцией). И, поскольку длина кадра фиксированная, фиксированной надо полагать и эту самую импульсную характеристику. То есть можно применять один из алгоритмов описанных выше?? Но видимо не все так просто.
    Теперь об оконном преобразовании Фурье и алиасинге. Алиасинг сколько я понимаю - это перетекание высокочастотных компонентов спектра в низкочастотные с отражением от середины при недостаточной частоте дискретизации. (поправьте если не прав) Оконное преобразование применяется для того чтобы в спектр попали частоты из среднего участка кадра и спектр не был бы искажен из за разрыва сигнала на границах блоков ? Я правильно понимаю ? При этом перекрытие как утверждается определяет уровень алиасинга. Вот тут я совершенно плохо понимаю как это взаимосвязано. Буду рад любой информации и подсказке где почитать о подобной обработке блоков с перекрытием.
      SergeiSX
      Предлагаю вам сделать подобные сообщения на разных форумах. dsplib.ru electronix.ru dxdy.ru и др.
      И послушайте ответы.
      Правильный обед должен состоять из 5 блюд приготовленных из 33 ингредиентов.
        Цитата SergeiSX @
        Алиасинг сколько я понимаю - это перетекание высокочастотных компонентов спектра в низкочастотные с отражением от середины при недостаточной частоте дискретизации.

        Нет. От частоты дискретизации он не зависит.

        const
        WindowSize=128; //размер окна
        fd=200; // частота дискретизации

        Одна синусоида частотой 9.375 гц, другая 9 гц как вы понимаете их спектр должны выглядит как одна и вторая палка. Ближе всего красная, а вот у синей проблема.
        Вся проблема в том что как говорят Фурье раскладывает на свои частоты. Отсюда и алиасинг.

        ExpandedWrap disabled
          procedure TForm1.Button7Click(Sender: TObject);
          const
            WindowSize=128; //число отсчётов
            fd=200;  // частота дискретизации
           
          var
           i:Integer;
           a,a1,a2,b:TArrayReal;
           z,z2:TArrayComplex;
          begin
           //создаём сигнал
           SetLength(a,10000);
           GenSin(a,fd,9.375,0);
           // копируем блок, для красивого графика +1 элемент
           SetLength(a1, WindowSize+1);
           Move(a[0], a1[0], (WindowSize+1)*SizeOf(a[0]));
           AddArrayInChart(Chart1,a1,4,fd);
           SetLength(a1, WindowSize); // обрезаем лишний элемент
           
           // Вычисляем спектр
           CopyInRe(z,a1);
           FFT(z,False);
           Amp(a2,Z);
           //do_db(a2);
           AddArrayInChart(Chart2,a2,$80000000+3,fd);
           
           SetLength(a,0);
           SetLength(a1,0);
           SetLength(a2,0);
           SetLength(Z,0);
           
           SetLength(a,10000);
           GenSin(a,fd,9,0);
           // копируем блок, для красивого графика +1 элемент
           SetLength(a1, WindowSize+1);
           Move(a[0], a1[0], (WindowSize+1)*SizeOf(a[0]));
           AddArrayInChart(Chart1,1,a1,4,fd);
           SetLength(a1, WindowSize); // обрезаем лишний элемент
           
           // Вычисляем спектр
           CopyInRe(z,a1);
           FFT(z,False);
           Amp(a2,Z);
           //do_db(a2);
           AddArrayInChart(Chart2,1,a2,$80000000+3,fd);
          end;


        user posted image

        Добавлено
        Откуда берутся ложные частоты?
        По сути мы сами взяли и не заметили как проделали следующее. Взяли синусоиду. Обрезали на середине периода периодически повторили.

        user posted image
        А произошло это когда мы подменили преобразование Фурье на ряд Фурье. РЯД ФУРЬЕ РАСКЛАДЫВАЕТ ТОЛЬКО ПЕРИОДИЧЕСКИЕ СИГНАЛЫ. Т.е те которые укладываются в период ряда Фурье.
        Сообщение отредактировано: Pavia -
        Правильный обед должен состоять из 5 блюд приготовленных из 33 ингредиентов.
          Здравствуйте, Pavia! Спасибо Вам за развернутый ответ! Я попытался на других форумах задать этот же вопрос.
          Многое становится понятно. Если я правильно понял, интервал исходного сигнала, используемый для преобразования в ряд Фурье, становится периодом этого сигнала с точки зрения ряда Фурье. И возникают искажения на границах интервалов. Они (искажения) проявляются в результате преобразования в виде дополнительных спектральных компонент. В свете этого я правильно понимаю что оконное преобразование призвано уменьшить разрывы на границах блоков? Спектр каждого блока при этом будет отражать только частотные компоненты в центральной части блока. Немножко путанно выражаюсь, извините.
          У меня есть статья, в которой алиасинг напрямую связыают с частотой дискретизации. Я ее прилагаю. Интересно Ваше мнение.

          Еще раз огромное Спасибо !

          Прикреплённый файлПрикреплённый файлAliasing.zip (34,62 Кбайт, скачиваний: 9)
            SergeiSX
            Это популярная литература. Я было право подумал вы знакомы с книгой А.Б.Сергиенко_Цифровая обработка сигналов.
            Эта книга обязательна к прочтению и изучению. С неё стоит начать изучение обработки сигналов.

            Цитата
            Если частота гармонического сигнала больше частоты Найквиста, восстановленный по дискретным отсчетам аналоговый сигнал (как и в предыдущем случае, он показан пунктирной линией) будет также гармоническим, но с иной частотой (рис. 3,3, в), Данный эффект носит название появления ложных частот (aliasing), мы продолжим его рассмотрение в следующем разделе «Спектр дискретного сигнала».


            При децимации мы наблюдаем ложные частоты, за счёт их переноса.
            Правильный обед должен состоять из 5 блюд приготовленных из 33 ингредиентов.
              Спасибо! Я знаком с этой книгой но внимательно пока что не читал. Обязательно почитаю! А мой вопрос про применение окон - я правильно понимаю зачем нужны окна при кратковременном преобразовании Фурье?
                SergeiSX
                Это да тут у нас мыслисхожи.
                Правильный обед должен состоять из 5 блюд приготовленных из 33 ингредиентов.
                  Спасибо!
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script Execution time: 0,1124 ]   [ 21 queries used ]   [ Generated: 22.09.17, 13:22 GMT ]