1 Отредактировано Voldemar0 (06-02-2021 10:42)

Тема: Улучшение звука Фонографа

Привет!

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

Т.е. и запись сигнала приводит к потере информации и воспроизведение тоже синтезирует кучу гармоник.

С утра подумалось: а можно ли каким-то образом так обработать звук заранее, чтобы при воспроизведении на агате он стал более похожим на оригинал? Т.е. синтез файлов для Фонографа сделать на PC имея полноценный оригинал, а воспроизвести уже на агате.

Тем более сейчас есть всякие психоакустические модели, куча наработок по этой теме.

2 Отредактировано Prol (06-02-2021 12:36)

Re: Улучшение звука Фонографа

Магнитофонный вход не воспринимает амплитуду сигнала, только частоту. А значит амплитуду надо кодировать частотой, то есть использовать частотную модуляцию (ЧМ, FM). Если полосы пропускания не хватит, то оцифровка и передача в нереальном времени. В любом случае все упрется в динамик агата. Без отдельной платы цапа(декодера) не обойтись, если хочется чего-то членораздельного.

3 Отредактировано AlexBel (06-02-2021 15:40)

Re: Улучшение звука Фонографа

Voldemar0 пишет:

можно ли каким-то образом так обработать звук заранее, чтобы при воспроизведении на агате он стал более похожим на оригинал? Т.е. синтез файлов для Фонографа сделать на PC имея полноценный оригинал, а воспроизвести уже на агате.

А какой алгоритм используется "Фонографом" при оцифровке? С фиксированной частотой захватывает бит магнитофонного порта и складывает в память? Может использоваться ШИМ, может - сигма-дельта...

4

Re: Улучшение звука Фонографа

Тут вопрос не в том, как получить высокое качества звука на агате "вообще" (я бы так сразу воткнул туда mp3-декодер на DSP и не парился), а именно в том, как приблизить точность воспроизведения не меняя оборудования воспроизведения. Да, можно было бы просто задрать частоту и, используя инерционность диффузора динамика, вытянуть что-то типа УНЧ, работающего в классе D.

Но для этого нужно дёргать диффузор туда-сюда на частоте где нибудь 50-100 кгц, да ещё и иметь плавно (бит 8 хотя бы) регулируемую скважность. Для 6502 нереально.

Фонограф фиксирует время между переключениями магнитофонного входа от 0 к 1 и от 1 к 0.
И потом с тем же периодом дёргает и динамик при воспроизведении.

5 Отредактировано avivanov76 (06-02-2021 18:54)

Re: Улучшение звука Фонографа

Три соображения.

1) Стандарт для цифровых телефонных линий - это дискретизация звука на частоте 8 КГц (максимальная частота звука - 4 КГц) с 256 возможными уровнями сигнала (8-битный АЦП, динамический диапазон 48 Дб).
"Фонограф", насколько я понял его формат (http://forum.agatcomp.ru//viewtopic.php?id=100), дискретизирует звук на частоте около 30 КГц (максимальная частота звука - 15 КГц) с 2 уровнями сигнала (1-битный АЦП, динамический диапазон 0 Дб).

То есть, основная причина потери качества - в 8 раз меньшая разрядность по сравнению с телефонной линией, и при воспроизведении ее уже никак не восстановить.

"Фонограф" еще применяет RLE к оцифрованным данным, но это сжатие без потерь и на качество оно не влияет.

2) Психоакустические модели точно ничем тут не помогут, потому что они про спектральный состав сигнала. Вот если бы "Фонограф" синтезировал звук из простых синусов, то да, модели могли бы сказать - вот из этих двух синусов второй можно нафиг выкинуть, потому что человек его вообще не услышит на фоне первого.

3) Улучшить качество можно, но не сильно. Магнитофонный вход Агата распознает сигнал амплитудой примерно от 50 милливольт как "1", все что ниже - как "0" (тишину). При этом стандартное напряжение на линейном входе 0,3 В.

Первое, что можно сделать - поиграться с этим пороговым уровнем (слишком сильно снижать не стоит, потому что начнут оцифровываться шумы).

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

Spoiler

http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=873&download=1

Чтобы с этим побороться нужно сжать динамический диапазон. В звуковых редакторах есть такой эффект - "компрессор". Он делает тихие звуки громче, а громкие - оставляет как есть. С его помощью можно улучшить разборчивость тихих звуков.

Еще можно сделать программную оцифровку с учетом ошибки квантования. Проблема 1-битного АЦП в том, что он весь диапазон напряжений от 50 до 300 мВ превратит в "1", а диапазон от -300 мВ до 49 мВ - в "0".

Если представить, что выход АЦП сразу идет на ЦАП, то получается, что у нас на входе АЦП 50 мВ, а на выходе ЦАП сразу 300 мВ. На входе АЦП 0, а на выходе ЦАП -300 мВ.

Если на каждом шагу вычитать из входного сигнала сигнал с "как бы выхода ЦАП", то у нас будет напряжение ошибки. Это напряжение нужно прибавить к входному сигналу на следующем шаге оцифровки и тогда ошибка будет учтена. Разрядность АЦП это не повысит, но ошибка будет "размазана" по соседним отсчетам и будет менее заметна на слух.

Post's attachments

Attachment icon Phonograph.png 35.17 kb, 116 downloads since 2021-02-06 

6 Отредактировано Voldemar0 (07-02-2021 09:55)

Re: Улучшение звука Фонографа

Я вот о чём -то таком и думал, но меньше о конкретных алгоритмах, а больше о том, как начать такую работу. Например, если сигнал разбить на фреймы по 20 мс и каждый фрейм разложить на гармоники.
Затем выкинуть инфранизкие и ультравысокие частоты, которые, скорее всего, не сильно нужны. Ну пусть будет полоса 200-8000 Гц.

А затем выбрать пару наиболее мощных гармоник и, оставив только их, синтезировать сигнал в 1 бит, причём сэмулировать также и дискретность фонографа в периоде, который он может воспроизвести.
И затем оценить ошибку спектров. Также синтезировать сигнал по алгоритму фонографа и тоже оценить ошибку спектров (полученного и исходного). Можно также поиграть с уровнем входного сигнала в алгоритме фонографа.
Мне интересно, что в итоге получиться, особенно если таких 20мс фреймов взять штук 100 ?

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

==

По поводу голосовой связи (которая не только телефонная, но и радиосвязь):
Как-то возникала иногда проблема со служебными радиостанциями (FM): пользователь утверждал, что его радиостанция имеет очень плохой звук, тяжело разобрать слова. Я проводил разные тесты (чувствительность, выходная мощность, глубина модуляции, прохождение тестового сигнала в 1 КГц),
ни никаких отклонений от образцовых станций не находил. Когда эта проблема проявилась раз на третий, стал разбираться, попробовал что-нибудь говорить и слушать себя. Это сложно, поэтому приспособил mp3-плейер в качестве тангенты. Быстро удалось выяснить, что проблема была в повреждениях динамиков - что-то отклеивалось или замусоривалось и начинали здорово портить речь, хотя чистые тона воспроизводились неплохо.

Но тут вылезло интересное: радиотракт ужасно портил музыку. Причем если голос был заметно громче мелодии, то слова передавались разборчиво, а если где-то вровень - получалась жуткая каша из звуков. Было перепробовано несколько радиостанций, были перепробованы разные уровни сигнала с плейера. Я даже сравнил передачу в аналоговом FM-режиме и в цифре (кодек AMBE, но он заточен только под голос, так что его поведение ещё можно понять) - пофиг, всё равно получается каша из звуков, солиста почти не разберёшь.

Я не знаю, в чём тут причина. На первый взгляд радиостанция должна срезать все лишние частоты и воспроизводить то, что осталось. Слушали же музыку когда-то на длинных и средних волнах - там же тоже полоса не сильно выше 3000 КГц была. Возможно, что современные радиостанции имеют какие-то алгоритмы подчёркивания-улучшения голоса, но эти алгоритмы совсем не ожидают на входе музыку.

Воспоминания об этой загадке меня и подтолкнули к мысли о том, что если звук для фонографа готовить по какому-то сложному алгоритму - исключить из звука что-то лишнее, то можно будет слегка скомпенсировать этим проблемы однобитного ЦАП.

7

Re: Улучшение звука Фонографа

Ну да, если найти способ хорошо сравнивать спектры, то автоподбор можно сделать просто "в лоб" - перебором параметров. Правда это будет нехилая такая вычислительная задача. Допустим, у нас регулятор тембра с двумя ручками ("верхи" и "басы") и две ручки в компрессоре ("порог" и "степень компресии"). У каждой ручки для простоты 10 положений. Итого 10 в 4 четвертой степени вариантов.

Со сравнением спектров заковыка в том, что вариант, где расхождений меньше, вполне может звучать хуже. Какие-то мелкие погрешности в громкости одних частей спектра могут быть заметнее на слух, чем полное пропадание других.

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

Но вообще, у меня сомнения, что овчинка стоит такой капитальной выделки. Вот если бы "Фонографом" записывать речь - тут да, можно было отрезать лишние частоты, уменьшить динамический диапазон до минимума и тогда возможно качество было бы сносным. Но если так обработать музыку, от нее мало что останется.

У каждого музыкального звука есть два ключевых параметра - высота тона и громкость. После компрессирования и прохождения через 1-битный АЦП останется, по сути, только высота тона :) А если все звуки одинаковой громкости, то музыка превратится в кашу. И тут как ручки не крути, Hi-Fi качества все равно не добиться.

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

Voldemar0 пишет:

радиотракт ужасно портил музыку

В радиостанциях компрессия голосового сигнала используется с 60-х. Так что ничего удивительного. По-моему, даже в журнале "Радио" про это писали.

Кстати, почитал внимательно инструкцию к фонографу и понял, что автор практически и добился эффекта компрессора :) Потому что с выхода для наушников уровень сигнала в несколько раз выше, чем с линейного выхода, и проблема слишком высокого порогового уровня в Агате решается. А дальше операционник в Агате перегружается :)

8 Отредактировано pvaWatson (08-02-2021 22:32)

Re: Улучшение звука Фонографа

Я пробовал подойти с другой стороны - реализовать программный ШИМ на Агате (точнее в эмуляторе Одинцова). В результате категорически не хватало производительности ЦП Агата: получилось добится 8 уровней амплитуды [т.е. фактически 3х битный ЦАП], но при этом частота дискретизации была около 5 килогерц. Синтезированный таким образом синусоидальный сигнал по частоте не превышал 1 кГц с кучей гармоник и сильным свистом с частотой дискретизации. Впрочем, есть шанс, что эмулятор не идеально реализует работу динамика и на реальном железе звучало бы иначе.

9 Отредактировано Voldemar0 (09-02-2021 09:09)

Re: Улучшение звука Фонографа

> Но вообще, у меня сомнения, что овчинка стоит такой капитальной выделки.

"Капитальность" - это дело здесь субъективное. Возможно, для кого-то это неделя возни с кодом и первоначальные проверки в mathlab.
Тут же даже знания по агату особо не нужны. Я опубликовал этот пост только как интересную идею, может кто-то найдёт её занимательной и попробует реализовать.


> Наверно, психоакустические модели можно было бы применить именно тут, для обработки спектров перед сравнением.

Именно это я и имел ввиду в первом сообщении: выкинуть из спектра заранее всё, что для музыки будет иметь минимальную (и даже среднюю) ценность.

И ещё: предполагаю, что задача близка к тому, что наверняка пытались делать в 90-е с AdLib: там же тоже были вопросы о том, можно ли автоматически преобразовать WAV в MOD, STM и прочие "нотные" форматы. Больших успехов не достигли, но может что-то всё таки удалось ?


> Впрочем, есть шанс, что эмулятор не идеально реализует работу динамика и на реальном железе звучало бы иначе.

Если послушать jukebox на реале (а может и в эмуляторе это будет слышно?) - слышен тихий постоянный свист.
То же есть и в musiceditor'е.

Но этого нет в простых звуковых прогах.

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

10 Отредактировано avivanov76 (09-02-2021 16:39)

Re: Улучшение звука Фонографа

Voldemar0 пишет:

Я опубликовал этот пост только как интересную идею, может кто-то найдёт её занимательной и попробует реализовать.

Это понятно, просто разработчик "Фонографа" закрыл все пути для серьезного улучшения звука, отказавшись от PWM.

Voldemar0 пишет:

И ещё: предполагаю, что задача близка к тому, что наверняка пытались делать в 90-е с AdLib: там же тоже были вопросы о том, можно ли автоматически преобразовать WAV в MOD, STM и прочие "нотные" форматы. Больших успехов не достигли, но может что-то всё таки удалось ?

Э... Возможно, я что-то не понял, но тут как бы совсем разные вещи вместе смешаны.

AdLib не умеет воспроизводить MOD-ы и STM-ы. AdLib - это FM синтезатор, там нет поддержки оцифрованного звука (PCM), а MOD-ы и STM-ы - это именно наборы оцифрованных звуков. Поэтому AdLib и был побежден SoundBlaster-ом, у которого такая возможность была.

Но поскольку в AdLib есть возможность управлять громкостью синтезированного звука (и ЦАП там тоже есть, хоть и недоступный напрямую), то есть и обходной путь вывести PCM. Просто синтезируется инфра (или ультра) звук (за пределами слышимости), у которого с частотой сэмплирования меняется громкость.
Кстати, такой же трюк делали и с AY-3-8912 - там тоже есть 4-разрядный ЦАП (причем, нелинейный) .

Но это все не имеет отношения к нотным форматам - на входе был WAV, a звук игрался за счет того, что процессор напрямую управлял микрухой синтезатора.

И это не имеет отношения к "Фонографу", потому что в Агате нет никакого скрытого ЦАП-а. Все что можно сделать - это использовать PWM.

Я слышал про другую задачу - из WAV сделать MIDI, то есть, именно набор нот. Но эта задача обычными алгоритмами не решается. Нельзя понять, как получился конкретный спектр, потому что почти всегда есть много способов его получить за счет разных сочетаний инструментов. А если нельзя понять наверняка, какие инструменты играют, то и ноты между ними начинают распределяться неправильно.

Voldemar0 пишет:

Думаю, в jukebox как раз и пытались сделать какой-то нетипичный синтез звука, возможно, что-то вроде PWM.
Но код их я не копал, так что не знаю что внутри.

Да и копать не надо, автор сам это все с картинками описал https://arachnoid.com/electric_duet/.

11

Re: Улучшение звука Фонографа

> Э... Возможно, я что-то не понял, но тут как бы совсем разные вещи вместе смешаны.

Я имел ввиду именно абстрактную задачу: преобразовать WAV в некий формат отдельных нот. Не важно, как это воспроизводится: FM-генератор или библиотека семплов через DAC - всё равно они не могут воспроизвести WAV напрямую (если исключить случай, когда из исходного WAV собирается новая библиотека инструментов. Или весь WAV загоняется в библиотеку как одна нота :).

> Да и копать не надо, автор сам это все с картинками описал https://arachnoid.com/electric_duet/.

Статья супер ! Особенно img 2 :)

12 Отредактировано AlexBel (10-02-2021 09:09)

Re: Улучшение звука Фонографа

Для преобразования аудиофайла в MIDI есть программы, одна из них - WIDI. Может, она не самая лучшая, но она работает. Можно попробовать: https://rutracker.org/forum/tracker.php?nm=widi
Конечно, не стоит ожидать, что она разложит по нотам любой аудиофайл с кучей инструментов, но с простыми мелодиями она справится. Есть и другие программы, насколько я помню, даже по MS-DOS.
Подумал, может, пригодится...

13

Re: Улучшение звука Фонографа

Сейчас послушал фонографские записи: верхи там прям в кашу наматывает, а вот голос вполне разборчивым остаётся. Возможно, если даже просто срезать частоты выше 5-8 кгц - будет заметно лучше.