Спасибо за интересную и доступную подачу материала. Раз вы упомянули про QMF, может знаете что кроме научных статей можно почитать про расчет FIR фильтра для полифазного фильтрбанка?
По поводу моста в выпрямителе. Возможно это сделано для уменьшения фона 100гц при сетевом питании. У трансформатора есть некая емкость между обмотками, а сама сеть может работать как часть антенны (или противовеса). Однако у мостового выпрямителя есть момент времени когда все диоды закрыты (когда мгновенное напряжение на трансформаторе ниже чем напряжение на конденсаторе после диодного мосте) , и в этот момент общий провод приемника оказывается не связан ни с одним из выводов трансформатора. Соответственно это приводит к некоторой модуляции несущей. В приведенной схеме общий провод всегда связан с трансформатором, соответственно такой проблемы нет. Можно, конечно, зашунтировать конденсаторами диоды моста (и так иногда делали), но как правильно заметили, в то время намотка еще одной обмотки трансформатора не рассматривалось как что то ужасное, и могла быть альтернативой 4мконденсаторам и 2м диодам.
Сегодня получил бумажную книгу. Хочу поблагодарить за проделанную работу! Подача теории для начинающих на высоте! Но позволю себе высказать замечания по практикуму. IMHO его очень сильно порезали и упростили:
Я понимаю, что в 2020 собирать AM радиоприемник уже несколько бессмысленно, а повторяемая схема FM приемника по сложности и количеству элементов может не вписаться (хотя супергетеродин в старом издании был, почему бы ФАПЧ Полякова не предложить для повторения). Но за что практические схемы УМЗЧ вырезали? В старом издании, если не ошибаюсь, было 4 схемы двухтактных усилителей (2 в составе радиоприемников) для повторения. Одну из них я повторял и она вполне хорошо работала. В переиздании 0. При этом теория двухтактных каскадов есть. Более того УМЗЧ это то, где аналоговая схемотехника еще вполне используется на практике.
Модель терменвокса уж прям совсем игрушечная, я понимаю что мотать катушки может и не технологично, но приведенная схема вызывает много вопросов.
Автоматизация. В старом издании были прикольные штуки вроде модели светофора, а на современных микросхемах это делается еще проще и реалистичнее.
Интересная задача при декодировании аналогового TV IMHO это декодирование цвета. А именно разделение яркостного сигнала и сигнала цветовой поднесущей. Желательно без потери четкости. Я как то писал симуляцию NTSC подобного кодирования, получилось так:
Показать рыбок
Исходная картинка (здесь и далее картинки кликабельны):
Она же в черно-белом виде с поднесущей (примерно так принимал черно-белый телевизор). Если смотреть без ресайза то хорошо видна поднесущая на окрашенных деталях.
Она же после декодирования. Тут можно увидеть артефакты от примененного мной подхода к фильтрации.
Ну как сказать… Сигнал яркости модулировал по частоте несущую и записывался уже в виде ЧМ (для лучшей помехоустойчивости). Сигнал цветности (так как его полоса сильно уже) переносился вниз по частоте, таким образом занимал область спектра ниже чем минимальное значение чм сигнала яркости. Причем тут были разные способы сделать это (SECAM/MESECAM).
Офтоп уже, но сам выбор частоты поднесущей для PAL/NTCS тоже интересная тема, например она должна быть такой чтобы оставлять помеху в виде шахматного поля а не полос, так как заметности последнего сильнее.
Я как то в порядке бреда писал программу для симуляции NTCS кодирования цветности в цифре — занятная штука, особенно задача разделения яркости цветности при воспроизведении.
В ATRAC3 (https://wiki.multimedia.cx/index.php/ATRAC3#Encoding_algorithm) используются разные окна при кодировании и декодировании, можете прокомментировать такое решение?
По поводу определения неизвестной частоты в сигнале, возможно Generalized Harmonic Analysis то что вы ищете, например статья «Fast and Accurate Generalized Harmonic Analysis Using Newton’s Method». Ну и пользуясь случаем порекламирую библиотечку, которую как раз начал писать по этой статье, libgha
Идея там такая, сначала через FFT грубо ищем максимум, потом используя метод Ньютона уточняем частоту и фазу.
Работает это в предположении что в сигнале нет двух синусоид частоты которых расположены ближе частотного разрешения FFT с заданным окном.
Только в ATRAC3+ есть lossless режим. Замечу что ATRAC, ATRAC3 и ATRAC3+ это разные не совместимые между собой кодеки.
Вообще про ATRACи ходят много всяких легенд, что странно поскольку их уже достаточно давно отреверсинженерили и написали декодеры — достаточно посмотреть код в ffmpeg.
Зависит от задачи которую вы преследуете. Если по мне, то не стоит смешивать теоретические основы и примеры кодирования продвинутыми (а opus действительно крут) кодеками в одной статье. Может сложится ложное представление, что MDCT решает все проблемы. Если Вы пишите про основы (а MDCT, QMF, психоакустика на уровне определения порога маскировки — это только основы), то уместнее приводить работу более простых кодеков, например, можно обратить внимание на артефакты вызванные теми или иными преобразованиями (например послушать результат работы mdct кодека при занулении части коэффициентов). Opus и AAC достаточно много всего делают помимо MDCT чтоб достичь своих результатов. Но это все IMHO.
SBC детально не смотрел, судя по описанию в википедии да. А вот Apt-x на днях в ffmpeg залили — можно поизучать код.
Работать с MDCT не то что проще (кстати часто наоборот, например MDCT спектр синусоиды зависит от фазы, собственно часто психоакустика работает с FFT спектром), MDCT решает проблему артефактов на границе блоков. Про MDCT есть приличное видео с примерами www.youtube.com/watch?v=xLzkLc33S_U.
Спасибо.
Декодер ATRAC реализован в ffmpeg, на гитхабе есть экспериментальная реализация кодера (atracdenc), так что там все более менее понятно. В первом ATRAC стекирование из 2х QMF, вначале разбиваем на HF и LF, затем еще раз LF. В HF компенсируем задержку. Получаем 3 бенда. Потом каждый бенд подаем на MDCT, в каждом бенде можно независимо переключаться между коротким и длинным окном. Тонкость — длинное окно там с меньшим чем 50% перекрытием. Полученные после MDCT коэффициенты группируются, квантуются. Хафмана или какого либо иного VLC кодирования нет. Так что, вполне себе гибрид.
Ох, опять эта копипаста про «второй MDCT» (( Попробую расписать кратко.
В неком приближении, кодеки можно разделить на Subband, Transform, Hybrid Subband — в них исходных PCM сигнал разбивается по частотам на набор PCM сигналов. При этом так же происходит децимация — поэтому возможен алиасинг. Как правило используется PQMF filterbank. Еще раз, важно, после разбиения мы так и остаемся во временной области, просто имея несколько PCM сигналов. Дальше каждый такой сигнал можно квантовать с разной точностью, так чтоб шумы квантования были ниже порога маскировки, определяемого психоакустикой. Можно дополнительно применить ADPCM сжатие к тем диапазонам где это эффективно (так DTS делает), и т.д. К subband кодекам относятся MPEG1 Layer1, Layer2, Musepack, DTS, apt-x. Transform — Тут, как и написано, в основе MDCT преобразование, которое преобразует сигнал в частотную область. Почему MDCT, а не скажем FFT? Основная причина — MDCT позволяет эффективно бороться с согласованием на границе блоков. Плюс, не надо отдельно что то делать с комплексной частью (в результате MDCT для N входных чисел получается N/2 выходных). Далее полученные после mdct, коэффициенты можно квантовать (в самом простом случае) или попробовать дополнительно обработать. Важно — основная работа тут происходит в частотной области. К таким кодекам относятся AC3, Vorbis, AAC (большенство профилей), CELT. Hybrid (не тот который в opus) — гибрид этих подходов — вначале разбиваем на поддиапазоны (PQMF или QMF), а затем каждый отдельно преобразуем в частотное представление (MDCT). В принципе, это позволяет иметь лучшую локализацию частоты в результирующем спектре, так же это могдо бы позволить иметь разные размеры окна MDCT преобразования в разных поддиапазонах (ATRAC так делает), ну и т.д. Но в моем понимании, проблемы с из за алиасинга превосходят возможный профит, cейчас такой подход считается не удачным. К таким кодекам относятся Mpeg1 Layer3, ATRAC, AAC-SSR профиль.
+1
Более того совсем не понятно что такое "% свободной памяти", поскольку само понятие свободная память (особенно при разрешенном оверкоммите) это тема для еще нескольких статей.
Надо заметить, что если очень хочется, то прикрутить «Русский АОН» к Asterisk все же можно (хотя вряд ли нужно). Давно пробовал это «just for fun» — заставить телефоны с Русским АОНом определять номера, идея очень проста:
1. Пишем утилиту, принимающую номер телефона и выдающую «безинтервальный пакет» в поддерживаемом Asteriskом формате
2. Проверку запроса 500Гц можно проигнорировать, и проигрывать вызываемому этот «безинтервальный пакет» всегда сразу после соединения.
В другую сторону (пробовать определять Русский АОН на Asterisk), то же можно (но вот точно не нужно, хотя бы, из за автоподнятия). Но, понятно, написать анализ двухтональных посылок несколько сложнее чем их генерацию.
Спасибо за интересную и доступную подачу материала. Раз вы упомянули про QMF, может знаете что кроме научных статей можно почитать про расчет FIR фильтра для полифазного фильтрбанка?
По поводу моста в выпрямителе. Возможно это сделано для уменьшения фона 100гц при сетевом питании. У трансформатора есть некая емкость между обмотками, а сама сеть может работать как часть антенны (или противовеса). Однако у мостового выпрямителя есть момент времени когда все диоды закрыты (когда мгновенное напряжение на трансформаторе ниже чем напряжение на конденсаторе после диодного мосте) , и в этот момент общий провод приемника оказывается не связан ни с одним из выводов трансформатора. Соответственно это приводит к некоторой модуляции несущей. В приведенной схеме общий провод всегда связан с трансформатором, соответственно такой проблемы нет. Можно, конечно, зашунтировать конденсаторами диоды моста (и так иногда делали), но как правильно заметили, в то время намотка еще одной обмотки трансформатора не рассматривалось как что то ужасное, и могла быть альтернативой 4мконденсаторам и 2м диодам.
Я понимаю, что в 2020 собирать AM радиоприемник уже несколько бессмысленно, а повторяемая схема FM приемника по сложности и количеству элементов может не вписаться (хотя супергетеродин в старом издании был, почему бы ФАПЧ Полякова не предложить для повторения). Но за что практические схемы УМЗЧ вырезали? В старом издании, если не ошибаюсь, было 4 схемы двухтактных усилителей (2 в составе радиоприемников) для повторения. Одну из них я повторял и она вполне хорошо работала. В переиздании 0. При этом теория двухтактных каскадов есть. Более того УМЗЧ это то, где аналоговая схемотехника еще вполне используется на практике.
Модель терменвокса уж прям совсем игрушечная, я понимаю что мотать катушки может и не технологично, но приведенная схема вызывает много вопросов.
Автоматизация. В старом издании были прикольные штуки вроде модели светофора, а на современных микросхемах это делается еще проще и реалистичнее.
Но в целом спасибо за книгу!
Она же в черно-белом виде с поднесущей (примерно так принимал черно-белый телевизор). Если смотреть без ресайза то хорошо видна поднесущая на окрашенных деталях.
Она же после декодирования. Тут можно увидеть артефакты от примененного мной подхода к фильтрации.
Если кто захочет поэкспериментировать — код тут:
github.com/dcherednik/analogcolor
Офтоп уже, но сам выбор частоты поднесущей для PAL/NTCS тоже интересная тема, например она должна быть такой чтобы оставлять помеху в виде шахматного поля а не полос, так как заметности последнего сильнее.
Я как то в порядке бреда писал программу для симуляции NTCS кодирования цветности в цифре — занятная штука, особенно задача разделения яркости цветности при воспроизведении.
А подскажите еще, утверждение:
так же верно и для mdct?
Наверно, нужно добавить, там так же используется mdct (как и в большенстве аудиокодеков).
Идея там такая, сначала через FFT грубо ищем максимум, потом используя метод Ньютона уточняем частоту и фазу.
Работает это в предположении что в сигнале нет двух синусоид частоты которых расположены ближе частотного разрешения FFT с заданным окном.
Вообще про ATRACи ходят много всяких легенд, что странно поскольку их уже достаточно давно отреверсинженерили и написали декодеры — достаточно посмотреть код в ffmpeg.
Работать с MDCT не то что проще (кстати часто наоборот, например MDCT спектр синусоиды зависит от фазы, собственно часто психоакустика работает с FFT спектром), MDCT решает проблему артефактов на границе блоков. Про MDCT есть приличное видео с примерами www.youtube.com/watch?v=xLzkLc33S_U.
Декодер ATRAC реализован в ffmpeg, на гитхабе есть экспериментальная реализация кодера (atracdenc), так что там все более менее понятно. В первом ATRAC стекирование из 2х QMF, вначале разбиваем на HF и LF, затем еще раз LF. В HF компенсируем задержку. Получаем 3 бенда. Потом каждый бенд подаем на MDCT, в каждом бенде можно независимо переключаться между коротким и длинным окном. Тонкость — длинное окно там с меньшим чем 50% перекрытием. Полученные после MDCT коэффициенты группируются, квантуются. Хафмана или какого либо иного VLC кодирования нет. Так что, вполне себе гибрид.
В неком приближении, кодеки можно разделить на Subband, Transform, Hybrid
Subband — в них исходных PCM сигнал разбивается по частотам на набор PCM сигналов. При этом так же происходит децимация — поэтому возможен алиасинг. Как правило используется PQMF filterbank. Еще раз, важно, после разбиения мы так и остаемся во временной области, просто имея несколько PCM сигналов. Дальше каждый такой сигнал можно квантовать с разной точностью, так чтоб шумы квантования были ниже порога маскировки, определяемого психоакустикой. Можно дополнительно применить ADPCM сжатие к тем диапазонам где это эффективно (так DTS делает), и т.д. К subband кодекам относятся MPEG1 Layer1, Layer2, Musepack, DTS, apt-x.
Transform — Тут, как и написано, в основе MDCT преобразование, которое преобразует сигнал в частотную область. Почему MDCT, а не скажем FFT? Основная причина — MDCT позволяет эффективно бороться с согласованием на границе блоков. Плюс, не надо отдельно что то делать с комплексной частью (в результате MDCT для N входных чисел получается N/2 выходных). Далее полученные после mdct, коэффициенты можно квантовать (в самом простом случае) или попробовать дополнительно обработать. Важно — основная работа тут происходит в частотной области. К таким кодекам относятся AC3, Vorbis, AAC (большенство профилей), CELT.
Hybrid (не тот который в opus) — гибрид этих подходов — вначале разбиваем на поддиапазоны (PQMF или QMF), а затем каждый отдельно преобразуем в частотное представление (MDCT). В принципе, это позволяет иметь лучшую локализацию частоты в результирующем спектре, так же это могдо бы позволить иметь разные размеры окна MDCT преобразования в разных поддиапазонах (ATRAC так делает), ну и т.д. Но в моем понимании, проблемы с из за алиасинга превосходят возможный профит, cейчас такой подход считается не удачным. К таким кодекам относятся Mpeg1 Layer3, ATRAC, AAC-SSR профиль.
Как видим, нет «Второго MDCT».
Более того совсем не понятно что такое "% свободной памяти", поскольку само понятие свободная память (особенно при разрешенном оверкоммите) это тема для еще нескольких статей.
1. Пишем утилиту, принимающую номер телефона и выдающую «безинтервальный пакет» в поддерживаемом Asteriskом формате
2. Проверку запроса 500Гц можно проигнорировать, и проигрывать вызываемому этот «безинтервальный пакет» всегда сразу после соединения.
В другую сторону (пробовать определять Русский АОН на Asterisk), то же можно (но вот точно не нужно, хотя бы, из за автоподнятия). Но, понятно, написать анализ двухтональных посылок несколько сложнее чем их генерацию.