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

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

  1. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Это довольно известный Talkbox эффект. Есть уже готовые vst-реализации.
    В программном виде это реализуется довольно интересно, сначала выделяются форманты посредством кепстрального преобразования и лифтрации (так кстати и высоту тона можно оценить, определить шипящие звуки или нет и вообще через кепстр работают большинство систем распознавания речи), а затем происходит перемножение спектров синтезатора/гитары и данных формант как в обычном вокодере. Очень хорошая книга есть по всему этому - Introduction to Digital Speech Processing (Lawrence R. Rabiner and Ronald W. Schafer)
    Все это можно заметно упростить с ухудшением характеристик, не определять форманты либо вообще использовать набор фильтров управляемых спектром голоса через детектор огибающей.
     
    GRAFik нравится это.
  2. algent

    algent Member

    Публикаций:
    0
    Регистрация:
    11 апр 2018
    Сообщения:
    101
    Почитал, интересно. Но я читал один источник и пожалуй поверхностно, но блин ... :). Сначала БПФ, потом фильтр Гильберта, потом ОБПФ. И это лишь только получили ортогональное дополнение сигнала, всё относительно сложно и наворочено.
    Я реверсил гораздо более простой код: АОН получал от аналоговой АТС последовательность из произведений двух частот, каждое произведение - это код десятичной цифры, и при помощи ПФ(ну почти, если без лишних подробностей), выделял последовательность кодов - цифр. Уже на этой стадии, имхо, результат был отличный, даже на паршивой линии. На этой теме нельзя было заработать, но я увлёкся и не хило поэкспериментировал. Однако, несмотря на уже хороший результат, потом было ещё это преобразование Гильберта. Дело давнее, но вот почему-то уверен на 99%, что это было оно самое и я вроде как всё не плохо помню...
     
    GRAFik нравится это.
  3. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.241
    вопрос в том, что источник сигнала/шума не имеет постоянного спектра + методы выявления частот источника далеки от идеала. мы практически только о локальных (по времени и месту) замерах спектра можем говорить. что ещё более примечательно, замер сигнала тоже изменяет сигнал в силу внутренних шумов девайса и неравномерности коэффициентов затухания/резонанса по целевому диапазону. получается, что живой мозг распознаёт голоса не столько по спектру, сколько по иным характеристикам (к примеру, алгоритм интонаций).
     
  4. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    999
    ну не, живой мозг работает иначе. он строит сигнал и выставляет сторожа на запуск. Как если бы примерно поняв частоты голоса диктора, фонемы алгоритм отстраивал самостоятельно, предлагая послушать свое решение подпадающее под зашумленный оригинал.
     
  5. GRAFik

    GRAFik Active Member

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


    Теория воплощенная в практике :)





     
  6. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Точно произведение? Скорее всего речь идет о DTMF когда суммой двух частот передают код нажатой клавиши (или номер). Есть несколько алгоритмов декодирования, но преобразование Гильберта тут не нужно. Я помню что АОНы типа "Русь" на Z80 пропускали через компаратор и по биениям вычисляли код. Для DTMF есть алгоритм Гёрцеля, который позволяет вычислять спектр только нужного бина (+ у него не нужно иметь количество выборок кратной степени 2, что уменьшает влияние растекания спекта). Кстати изучая DSP я сам пришел к алгоритму позволяющему производить перерасчет спектра "на лету" через 1 комплексное умножение и 1 сложение, оказалось что это и есть - модифицированный алгоритм Гёрцеля.

    На бесконечном интервале - спектр постоянный. FFT измеряет спектр периодического бесконечного сигнала, в этом и суть.

    Наши органы слуха не делают FFT, у нас спектр извлекается через набор фильтров если можно так сказать. При чем каждый фильтр имеет разную добротность, а расположение фильтров нелинейно. Мы легко можем услышать разницу между 100 и 110ГЦ, но не слышим ее между частотами 3000 и 3010Гц. А как мозг определяет голоса я не знаю. Определенно сама речь распознается посредством анализа формант, а основной тон тут вообще не имеет значения, т.к. можно произносить речь шепотом (т.е. пропускать белый шум через формантный фильтр) и мозг вполне различает, но убрав формантную составляющую уже все будет неразборчиво.

    Посмотри спектр зашумленного сигнала, уровень спектра шума на фоне полезного сигнала очень мал, т.к. вся энергия шума распределяется по спектру. Если у тебя уровень спектра шума больше уровня полезного сигнала и спектр шума перекрывает диапазон полезного сигнала - я думаю мозг уже не сможет распознать речь. Если же сигнал периодический, то его легко можно "выудить" усреднением (не знаю мозг способен на это).
     
    q2e74 нравится это.
  7. algent

    algent Member

    Публикаций:
    0
    Регистрация:
    11 апр 2018
    Сообщения:
    101
    Тогда поленился строить графики sin(x)*sin(y) и sin(x) + sin(y), а сейчас уже поздно. Но для sin(x)*sin(y) вроде и так очевидно, что кол-во нулей у sin(x), в результате суммируется с кол-вом нулей sin(y). В картинке которую видел на осцилле, вероятно так и было.
    А по поводу алгоритмов и фамилий: Про Уолша помните ?? Нам всем привычно, что мгновенное значение амплитуды - это число, по сути это ближе всего к float. Но идея сделать значение амплитуды - 1 бит - то самое "что АОНы типа "Русь" на Z80 пропускали через компаратор", имхо, на идею которой надо давать имя автора, не тянет. Так вот в более поздней "Русь" на i8031, там именно ПФ, но только представление одно битное, так сказать от Уолша :lol:. Не удивлюсь, если этому "ноухау", тоже дали персональное имя - имя "Гёрцеля", а букву `ц` я возможно и вправду потерял :).
    пс. теорию по этой теме я читал "по диагонали", ибо она простая и интуитивно понятная. Если вдруг там есть более весомые причины для той чести, что было оказана Уолшу и пр., не судите строго :).
     
    q2e74 нравится это.
  8. Thetrik

    Thetrik UA6527P

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

    Насчет WHT, я знаком немного, но я не использовал его на практике, т.к. для качественного анализа спектра он не подходит т.к. раскладывает по меандрам, соответственно вклад вносят все гармоники конкретного меандра. Для 1-битного возможно подходит, но если ты видел спектр у реального однобитного сигнала, то хз как там.

    Попробовал сравнить спектры WHT и FFT - тут все наглядно видно, даже фаза сигнала сильно меняет спектр:

    [​IMG]
     
    algent, Application и q2e74 нравится это.
  9. R81...

    R81... Active Member

    Публикаций:
    0
    Регистрация:
    1 фев 2020
    Сообщения:
    153
    "100 и 110ГЦ, но не слышим ее между частотами 3000 и 3010Гц."
    Естественно - для большинства людей.
    https://studme.org/38573/psihologiya/konstanta_vebera_bugera

    А вот насчет шума для эрудита Убивца - ЧГК был вопрос: Как разговаривает племя, обитающее в районе очень шумного водопада?
    Ответ знатоков - ~"с помошью жестов" неправильный.
    Внимание! Правильный ответ - ~"они разговаривают обычно. т.к. не 'слышат' шума водопада".
    P.S. Помнится так, но за достоверность не отвечу.
     
    q2e74 нравится это.
  10. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    R81..., в оригинале так
    Путешественник неподалеку от Ниагарского водопада обнаружил племя индейцев. У индейцев всего племени очень огромные уши, а у вождя вогнутый лоб. Удивившись, путешественник спрашивает у вождя ― Скажи мне, почему у всего твоего племени огромные уши, а у тебя вогнутый лоб?
    На что вождь ответил ― Подожди с полчаса сам все увидишь и поймешь...
    Смотрит путешественник народ племени периодически прислушивается, оттягивают уши, через полчаса воины племени обступают вождя и спрашивают Что это? Что это шумит о великий вождь?
    На что вождь раздражено хлопает себя по лбу и говорит ― Это Ниагара шумит, идиоты, Ниагара!!!
     
    q2e74 нравится это.
  11. Thetrik

    Thetrik UA6527P

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

    [​IMG]
    --- Сообщение объединено, 17 янв 2023 ---
    При усреднении 512, можно выделить сигнал из белого шума амплитуда которого в 20раз ниже:
    AVERAGE512.png
     
    q2e74 и Application нравится это.
  12. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    999
    Thetrik, увы речь - это не две синусоиды. Просто посмотришь на всякие наушники шумадавы к айфонам и всяких алис, и как-то неуютно становится. Как они это делают?
     
  13. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Так любой полезный сигнал, будь то речь или еще распределяет энергию между определенными частотами, тогда как белый шум - между всеми. Конечно речь не получится извлечь если ее уровень будет в 20 раз ниже, но можно получить вполне приемлемый уровень при разумных уровнях шума. Даже для белого шума спектральное вычитание будет работать, а для какого-то специфичного - подавно.
    --- Сообщение объединено, 17 янв 2023 ---
    Я не знаю конечно как именно эти устройства делают, но обычно либо Noise-gate либо Noise-Reduction. Noise-gate - это когда у тебя стоит порог ниже которого громкость просто зануляется, шумы имеют тихий уровень и алгоритм следит когда внешний сигнал упадет до определенного уровня и просто зануляет его. Когда он выходит из порога - включает. Тут еще задается время, в течении которого все эти переходы происходят. Noise-Reduction удаляет шумы в частотной области, тут более сложный и ресурсоемкий алгоритм. Здесь берется кусок чистого шума из исходного сигнала, анализируется его спектр через FFT, далее для всего сигнала происходит вычитание спектра шума из спектра всего сигнала. По сути - это тот же самый вокодер, только умножается спектр не напрямую на спектр шума, а на спектр обратный спектру шума.
    --- Сообщение объединено, 17 янв 2023 ---
    Вот тут как-раз то что нужно описано http://www.dspguide.com/ch17/2.htm
    [​IMG]
     
    q2e74 нравится это.
  14. algent

    algent Member

    Публикаций:
    0
    Регистрация:
    11 апр 2018
    Сообщения:
    101
    Thetrik, Один бит конечно даст плохое качество, но ему требуются столь скромные вычислительные ресурсы, что хочется приглядеться к нему. Как вы помните, в АОНе используется компаратор. Я провёл на заскринненом рисунке, белую линию примерно по уровню нуля.
    upload_2023-1-18_3-50-23.png
    И ниже места, где интересные спектральные "кульбиты" полностью отбрасываются компаратором, при переходе к 1-му биту. Возникает мысль, а если перед компаратором продифференцировать сигнал? А как это сделано в АОНе?? Нашёл схему 17-ой Руси:
    upload_2023-1-18_4-1-35.png

    И действительно, перед компаратором сигнал проходит через разделительный конденсатор С8. Имхо, это должно улучшать качество анализа.
    --- Сообщение объединено, 18 янв 2023 ---
    поправлюсь - может улучшить. серьёзных расчётов тут ессно нет.
     
  15. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
  16. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Thetrik, интересно, вам когда-нибудь с программой Матлаб приходилось иметь дело? И еще интересно ваше отношение к фреймворку JUCE и к SDK VST3, что на ваш взгляд более предпочтительнее. Просто многие советуют работать с JUCE, а многие говорят, что для более лучшего понимания работы VST-плагина - лучше работать с SDK VST3. Интересна ваша точка зрения, исходя из вашего опыта.
     
  17. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    С онлайн версией работал, вот как раз чтобы FWHT сделать.

    Я работал только с vst2.4. VST3 - просто изучал архитектуру, с JUCE не работал.
     
  18. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.241
    а толку??? бесконечный интервал в данном случае - лишь бесполезная абстракция.
    не тон имеет значение, а алгоритм его изменения - у чела скорость речи, амплитуда и ударения в словах меняются по алгоритмам эмоциональной окраски.
    аналоговый ффт и делается чрез акустические фильтры - в итоге вычислений либо совсем не требуется, либо они минимальны.
    постоянное нахождение рядом с источником шума большой амплитуды (выше 80 дБ) приводит к крайне печальным последствиям https://www.cdc.gov/nceh/hearing_loss/what_noises_cause_hearing_loss.html
    впрочем, эта табличка сильно неполная - там не только глухота приходит, но и получается деградация внутренних органов, коя сильно ускоряется по мере смещения к низким частотам :)
     
  19. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Ну так я по-моему в процитированном посте написал в чем суть.

    Еще раз - тон не имеет значения, а тем более алгоритм его изменения. Почему - уже написал. Возможно ты под тоном понимаешь что-то свое.

    Это не FFT.
     
  20. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.241
    https://en.wikipedia.org/wiki/Tone_(linguistics)
    название в данном случае неважно - речь идёт о процессе разбиения сигнала на отдельные частоты и/ль сборки сигнала - вот и получаем условное название «аналоговый ффт».