Забавности FFT...

Тема в разделе "WASM.HEAP", создана пользователем UbIvItS, 7 янв 2023.

  1. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    ффт - штука полезная, спору нет. Но сю радость пихают куда ни попадя, к примеру, "раскладывают" спектры далёких "звёзд". Однако, давайте-ка глянем вот на это..
    upload_2023-1-7_2-21-35.png
    это синусоида в Дикой Среде, то бишь она не имеет постоянных амплитуды и фазы. когда требуется выудить РЕАЛЬНЫЕ частоты чел голоса, эта проблема сильно вылезает :)
     
  2. aa_dav

    aa_dav Active Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    457
    Ну всё верно, да. Поэтому были поиски и есть скорее всего до сих пор других разложений. Вейвлеты, например, мне еще в институте лет 20 назад преподавали. Они как раз переменные по амплитуде.
    Главная идея у Фурье была в том, что когда изучали уравнение струны, то осознали контриинтуитивную штуку - если струну щипчиками растянуть, то ей можно придать любую форму, а если потом отпустить она начнётся колебаться по гармоническому закону и быстро превратится в какой то набор гармоник. А значит если запустить процесс математически вспять, повернуть время назад, то приходим к неожиданному выводу - наложение синусоид как будто бы способно принять любую форму (начавшись от чистых гармоник в какой то момент времени и потом развиваясь как процесс). Вот этот фактик сперва был воспринят как парадокс, какой то косяк в теории, но Фурье ЕМНИП доказал со всей строгостью, что это действительно правда.
    Однако тут надо помнить, что есть "неудобные" для разложения в гармоники сигналы которым реально надо бесконечное число составляющих, чтобы приблизиться с хорошей точностью.
     
  3. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    998
    а как правильно их выуживать? вроде где-то существуют алгоритмы, где из белого шума с большей амплитудой чем голос - вынимают речь. как сие правильное гуглить?
     
  4. LifeForceASD

    LifeForceASD Member

    Публикаций:
    0
    Регистрация:
    16 сен 2022
    Сообщения:
    43
    Адрес:
    ntoskrnl.exe
    Локаторы хороших годных обсуждений обнаружили ЭГФ в треде сиëм. Главное поменьше вялотекучести и прям тогда сегодня будем вырубать голоса рептелоендов с мембраны мироздания:crazy:
     
    q2e74 нравится это.
  5. Aoizora

    Aoizora Active Member

    Публикаций:
    0
    Регистрация:
    29 янв 2017
    Сообщения:
    362
    В одной книге видел, что при помощи дискретного преобразования Фурье можно написать даже алгоритм декодирования корректирующих кодов, которые работают в конечных полях. Интересно, в чем там идея? Типа если поле это циклическая группа, то можно провести аналогию с синусоидами? Типа и там и там период.
     
  6. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Вейвлеты локализованы по времени, поэтому позволяют узнать в какой момент времени какая частота присутствует в сигнале. По факту же это просто умножение спектра вейвлета на спектр исходного сигнала в частотной области. Там где в Фурье мы получаем дельта функцию - считай единичный пик, у вейвлетов получаем уже какую-то кривую которая охватывает какую-то часть спектра. БПФ в отличии от ПФ определено на конечной области из-за этого происходит искажение спектра, а из-за дискретизации искаженный спектр повторяется.

    Все эти изменения - это нелинейные преобразования которые искажают спектр добавляя искажения к основной синусоиде. Чтобы получить базовый тон (если это имеется в виду) какого-либо колебания нужно использовать алгоритм определения высоты (pitch-detection), который в том числе можно определить в частотной области (к примеру HPS).
     
    q2e74 нравится это.
  7. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    увы и ах, речевой аппарат тоже не выдаёт постоянного спектра.
    из белого шума можно выудить что угодно, но это уЖО из разряда артистизма а-ля "песнь далёких звёзд" :) локальную амплитуду сигнала можно щимить так: x(1)/sin(ωt1) ≈ x(2)/sin(ωt2). короче, чем большую погрешность допускаем, тем больше попаданий :)
     
    q2e74 нравится это.
  8. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Любой анализируемый сигнал в ПФ рассматривается от -∞ до +∞ и имеет единый спектр. В FFT ты берешь какую-то часть сигнала, это эквивалентно умножению на прямоугольное окно - сворачиваешь с его спектром. Далее производишь дискритизацию - повторение спектра и наложение частот. Вот из-за того что ты берешь каждый раз разный сигнал - получаешь разный спектр - что логично.

    Белый шум имеет равномерный спектр так что какой-либо сигнал на фоне шума будет выбиваться из него. Можно отфильтровать ненужные частоты, но сигнал получится искаженным. Это если имеется в виду спектр непереодического сигнала. Любой периодический сигнал просто усредняется - шум уменьшается а амплитуда полезного - остается.
     
    q2e74 нравится это.
  9. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    998
    UbIvItS, а что можете про TR-3A сказать?
    [​IMG]
     
  10. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Да, до чего ВАСМ докатился! :) БПФ - в хипе, UbIvItS - в почете! :) Одно название треда чего стоит.

    Для меня FFT - как икона для верующего, а для кого-то забавности. :)

    А если серьезно, то приятно осозновать, что кроме меня, это еще кому-то интересно.
     
  11. Talomir

    Talomir Member

    Публикаций:
    0
    Регистрация:
    13 янв 2023
    Сообщения:
    51
    Адрес:
    Slovackia
    Я не понял в чём проблема, динамический спектр, изменяющийся со временем. Как в любом анализаторе спектра по бегущему окну - отрезку времени измерений. Спектр есть у любого сигнала, в любом отрезке его существования.
     
  12. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Ну щас вам UbIvItS накидает идей. :) Вспомнилось как он один раз Thetrik'у морочил голову какими-то статистическими фильтрами и про то, где и в каких случаях лучше всего применять вокодер. :)

    Ну а если без шуток, то лучше всего искать ответы на подобные вопросы на таких вот или похожих сайтах и форумах:

    http://www.dsplib.ru/index.html

    http://ru.dsplib.org/forum/
     
  13. aa_dav

    aa_dav Active Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    457
    Когда сам с FFT разбирался позабавил один момент - задам его тут в качестве загадки для любопытствующих.
    Алгоритму мы подаём на вход массив сигнала такого как звук какой то длины и на выходе имеем массив описаний синусоид из которых он состоит. При этом для одной частоты синусоиды на выходе возвращается один результат - амплитуда и фаза (т.е. размах колебаний и с какого начального отсчёта эти колебания начинаются).
    Так вот представьте себе, что мы сделали сигнал из двух одинаковых частот, но с разными фазами и амплитудой, т.е. разного размаха и сдвинутыми друг относительно друга по времени - наложили и скормили в FFT. Но ведь исходя из структуры возвращаемых данных для одной частоты он может вернуть только одну амплитуду и фазу - две принципиально нельзя.
    Вот теперь кто не в курсе попробуйте догадаться как из такой ситуации должен выкрутиться FFT и вернуть что-то осмысленное и правильное. :)
     
  14. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Вот тут и начинаются ньюансы где и происходит растекание спектра. Умножение сигнала на какое-то окно искажает спектр, а дискретизация зацикливает его + из-за оконного эффекта частоты между бинами FFT будут растекаться по всему диапазону. Я уже где-то тут писал и даже делал анимацию поясняющую это:

    [​IMG]

    Умножая на какое-либо окно можно изменять уровень боковых лепестков и ширину основного.

    Тут нет ничего необычного, т.к. система линейна (и обладает свойствами аддитивности) то сумма двух сигналов во временной области также будет являться суммой двух сигналов в частотной, т.е. мы получим сигнал той-же частоты, но другой амплитуды и фазы. Если фазы будут противоположными то амплитуда будет равняться нулю. Нужно представлять себе результат преобразования Фурье (для реального сигнала) не как синусы и косинусы, а как синусоиду с определенной частотой и фазой:

    [​IMG]
     
    UbIvItS нравится это.
  15. Talomir

    Talomir Member

    Публикаций:
    0
    Регистрация:
    13 янв 2023
    Сообщения:
    51
    Адрес:
    Slovackia
     
  16. algent

    algent Member

    Публикаций:
    0
    Регистрация:
    11 апр 2018
    Сообщения:
    101
    Учебники математики пишутся для математиков. Там и не должны быть красивые трюки и решения для чисто инженерных, часто очень разнообразных и очень частных задач. Например, пред- и пост- обработку инженер или программер должен сам изобрести и придумать. Ну и многое другое. Я слышал про использование преобразования Гильберта после DFT. Не знаю в чём смысл, не вникал. Но у меня легко получался динамический диапазон более 80 дБ, при использовании тысяч(может больше, уже не помню) периодов для анализа - это уж совсем простой ход. Если напрячь мозги можно ещё кое-что придумать...
     
  17. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Преобразование Гильберта применяется для получения аналитического сигнала который используется к примеру для SSB молуляции/демодуляции.
     
    GRAFik нравится это.
  18. aa_dav

    aa_dav Active Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    457
    И это правильный ответ - сумма двух синусоид одинаковой частоты, но разных фаз и амплитуд будет третьей синусоидой точно такой же частоты, но (возможно) другой фазы и амплитуды.
    Это закон.
     
  19. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Thetrik, есть вот такой интересный эффект для гитары. Единственное, что не нравится, это то, что трубку нужно в рот брать, а это не гигиенично. Представляете, допустим, Трешген на такой гитаре поиграет - как потом после него играть? Это же можно глупостью какой-нибудь заразиться и превратиться в Трешгена дубль два. :)

    А если серьезно, нет ли у вас примерного представления как это можно, скажем, в виде VST-эффекта реализовать? Только без трубки - на базе каких-нибудь фильтров. Это, если я не ошибаюсь, работает по принципу резонатора, вроде бы? Есть какие-нибудь идеи?


    Смотреть примерно с 03':30" (чтобы не терять времени)

     
  20. Talomir

    Talomir Member

    Публикаций:
    0
    Регистрация:
    13 янв 2023
    Сообщения:
    51
    Адрес:
    Slovackia
    Можно сделать всё, любой звук, используя не аналоговую электронику, а программы, программные анализаторы спектра, Audacity и C# с библиотекой генерации звука NAudio, и - захват системного звука с перенаправлением в файл.