Аудио SSTC с сигма-дельта модулятором
По мотивам теслы mutabor'а захотелось и мне сделать сстц с сигма-дельта модуляцией. Естественно, это будет долгострой, так как времечка у меня всегда не хватает, но интересно жеж разобраться в тонне математики. Возможно, и вам будет интересно, поэтому буду сюда отписываться о прогрессе.
Естественно, первое с чего я начал - это сам модулятор. Если кратко, то весь цимус сигма-дельта модуляторов (по сравнению с ШИМом) в том, что можно отдельно управлять АЧХ сигнала и АЧХ шума, и, таким образом, вытеснить шум в область ультразвука, где его никто и не услышит. Чем больеш порядок модулятора - тем больше можно вытеснить шум в ультразвук, но тем нестабильнее сам моделятор. При любом неловком движении модулятор высокого порядка превращается в генератор.
Сначала я попробовал сделать подулятор первого порядка, чтобы было с чем сравнивать.
Звучит он довольно отвратно. Естественно, модулятор был модифицирован до второго порядка:
Звучит он уже намного лучше, но, все-равно, шумит довольно сильно.
Небольшими усилиями воли, модулятор разросття до третьего порядка. В этот раз в более общей форме и с управляемым нулем в передаточной характериситке шума:
Шума этого модулятора уже практически не сылшно, поэтому он и сойдет за рабочий вариант. Вот, к примеру, спектр выходного сигнала этого модулятора при подаче на выход 1кгц:
Видно и ноль в шуме и, что даже на 20кгц сохраняется 50dB сигнал/шум. Не аудиофильски, конечно, но, на практике, его не слышно.
Сделать его в аналоге уже довольно сложно, да и не интересно, поэтому это все я постараюсь впихнуть в свою старую любимую плис xc3s50an. К сожалению, в ней не хватает ресурсов чтобы сделать все "в лоб", поэтому нам с вами предстоит увлекательное создание специализированного процессора под эту задачу.
Естественно, первое с чего я начал - это сам модулятор. Если кратко, то весь цимус сигма-дельта модуляторов (по сравнению с ШИМом) в том, что можно отдельно управлять АЧХ сигнала и АЧХ шума, и, таким образом, вытеснить шум в область ультразвука, где его никто и не услышит. Чем больеш порядок модулятора - тем больше можно вытеснить шум в ультразвук, но тем нестабильнее сам моделятор. При любом неловком движении модулятор высокого порядка превращается в генератор.
Сначала я попробовал сделать подулятор первого порядка, чтобы было с чем сравнивать.
Звучит он довольно отвратно. Естественно, модулятор был модифицирован до второго порядка:
Звучит он уже намного лучше, но, все-равно, шумит довольно сильно.
Небольшими усилиями воли, модулятор разросття до третьего порядка. В этот раз в более общей форме и с управляемым нулем в передаточной характериситке шума:
Шума этого модулятора уже практически не сылшно, поэтому он и сойдет за рабочий вариант. Вот, к примеру, спектр выходного сигнала этого модулятора при подаче на выход 1кгц:
Видно и ноль в шуме и, что даже на 20кгц сохраняется 50dB сигнал/шум. Не аудиофильски, конечно, но, на практике, его не слышно.
Сделать его в аналоге уже довольно сложно, да и не интересно, поэтому это все я постараюсь впихнуть в свою старую любимую плис xc3s50an. К сожалению, в ней не хватает ресурсов чтобы сделать все "в лоб", поэтому нам с вами предстоит увлекательное создание специализированного процессора под эту задачу.
Итаксь, набросал процессор для этого проектика. Задача процессора, фактически, умножать и складывать, используя при этом поменьше аппаратных ресурсов и делая это как можно быстрее, поэтмоу он получился доволньо простой.
Работает он с числами с фиксированной запятой 0q31. К примеру, интегратор на нем, выглядит вот так:
nop тут для того, чтобы успела завершиться предыдущая комманда. В таких глубокоэмбеддед штуках часто проще сделать вот такие хаки, чем выдумывать синхронизацию. Но и этот мелкий процессор забил 60% плисины (естественно, их забил не сам процессор, а умножитель). Если кому интересно, вот полный код:
Теперь нужно написать хотябы простой модулятор для этого проца, попутно его обезбаживая
Работает он с числами с фиксированной запятой 0q31. К примеру, интегратор на нем, выглядит вот так:
Код: Выделить всё
in 0x00
lda 0x00
ldb 0x01
nop
stradd 0x01
done
nop тут для того, чтобы успела завершиться предыдущая комманда. В таких глубокоэмбеддед штуках часто проще сделать вот такие хаки, чем выдумывать синхронизацию. Но и этот мелкий процессор забил 60% плисины (естественно, их забил не сам процессор, а умножитель). Если кому интересно, вот полный код:
Теперь нужно написать хотябы простой модулятор для этого проца, попутно его обезбаживая
После небольшего ковыряния с процессором оказалось, что он не успевает все посчитать, поэтому переписал я на жесткую логику и все работает нормально. Добился совпадения сигналов с моделью. Теперь нужно бы написать приемник аудиосигнала.
Написал приемник spdiff, он-же toslink и прицепил к нему модулятор. Пришлось немного поиграться, так как это все никак не хотело запускаться как в симуляторе. В итоге, оно заработало. Не так хорошо, как предсказывал симулинк, но заработало. Вот видео
-
- Сообщения: 93
Качество вполне себе
То есть по сути на выходе мы получаем сигнал включена или нет тесла в данном периоде, эдакий высокочастотный интерраптер, я правильно понимаю?
Если так, то на ум сразу приходит условный компаратор, который сравнивает ток вторички с аналоговым аудиосигналом.
Ех, а у меня без дела валяется coreEP4CE10.
Короче было бы здорово, если б ты сделал видео, где на пальцах объясняешь как работает сигмадельта. Статейки я почитал, картина немного-немного начала вырисовываться, но далеко не всё понятно, например как поток нулей и единиц на выходе магическим образом преобразуется в число. Это я про АЦП. Не совсем про твою схему, конечно.
Хотелось бы узнать о преимуществах схемы по сравнению с компаратором. В сигмадельте используется виртуальное интегрированное значение, коэффециентами подстраиваются скорости нарастания/затухания, как я понимаю, а тут можно считать реальный ток. Если я совсем уж чушь говорю, ткни носом, а)
То есть по сути на выходе мы получаем сигнал включена или нет тесла в данном периоде, эдакий высокочастотный интерраптер, я правильно понимаю?
Если так, то на ум сразу приходит условный компаратор, который сравнивает ток вторички с аналоговым аудиосигналом.
Ех, а у меня без дела валяется coreEP4CE10.
Короче было бы здорово, если б ты сделал видео, где на пальцах объясняешь как работает сигмадельта. Статейки я почитал, картина немного-немного начала вырисовываться, но далеко не всё понятно, например как поток нулей и единиц на выходе магическим образом преобразуется в число. Это я про АЦП. Не совсем про твою схему, конечно.
Хотелось бы узнать о преимуществах схемы по сравнению с компаратором. В сигмадельте используется виртуальное интегрированное значение, коэффециентами подстраиваются скорости нарастания/затухания, как я понимаю, а тут можно считать реальный ток. Если я совсем уж чушь говорю, ткни носом, а)
эдакий высокочастотный интерраптер, я правильно понимаю?
Именно так
Если так, то на ум сразу приходит компаратор, который сравнивает ток вторички с аналоговым аудиосигналом.
Скорее-всего, такая штуковина возбудится из-за двух полюсов в обратной связи. Плюс ток померять с достаточной для аудио точносью в тесле не так то просто. Это не токовая защита. Тут-же, все обратные связи внути и в цифре, что гарантирует их стабильность. Кроме того, сама передаточная характеристика огибающей теслы тут сыграет как ФНЧ, что еще улучшит сигнал/шум.
coreEP4CE10, да, это монстрячая штуковина по сравнению с тем, что у меня тут, но у меня эта платка уже есть, плюс она заточена под теслы, так-что пришлось впихиваться в нее.
2 BSVi: Интересные картинки, но многое не понятно, вот например: ты из однобитного формата (в симуляшке) делаешь многобитный, это FIR фильтр с дециматором делают? Какая у тебя частота на выходе модулятора и после дециматора, и сколько фактически бит на один отсчет получается в итоге?
И еще гдето читал, что модуляторы выше второго порядка в тех же АЦП не используется, т.к они потенциально неустойчивы.
И еще гдето читал, что модуляторы выше второго порядка в тех же АЦП не используется, т.к они потенциально неустойчивы.
ты из однобитного формата (в симуляшке) делаешь многобитный, это FIR фильтр с дециматором делают?
ага.
Какая у тебя частота на выходе модулятора и после дециматора, и сколько фактически бит на один отсчет получается в итоге?
После модулятора 500кгц, после дециматора 45кГц.
И еще гдето читал, что модуляторы выше второго порядка в тех же АЦП не используется, т.к они потенциально неустойчивы.
Даже второй порядок не устойчив если его в лоб делать. Тут нужно немного магии с математикой и можно стабилизировать все. В промышленных применениях есть модуляторы до 5того порядка если в лоб и есть еще топологии, где ошибка последнего бита не загоняется в обратную связь, там вообще порядок может быть какой угодно. Но тут это все избыточно
Сейчас проектик остановился на том, что мне нужно сделать PLL и, собственно, саму теслу
М-мм, а PLL то зачем?
Ааа..кажись догадался - чтобы не мучиться с синхронизацией при слабом сигнале? Ну да, у меня была такая проблема - после долгого перерыва между импульсами следующая пачка идет с рассинхроном по фазе, правда это было только с ШИМом (он у меня на частоте 22кГц был) + после 3-5 импульсов синхронизация восстанавливалась. Более того, у ФАПЧи тоже будет эта проблема. И кстати, все равно придется постоянно вкачивать некоторую среднюю мощность в пушистик -почему это так я приводил ссылку на обсуждение с математиками электроникса, вывод был такой: чтобы звуковые колебания создаваемые кустиком были без искажений нужно постоянно иметь кустик как можно большего объема, который модулируется на небольшой процент от этого объема. При этом сигнал ОС с катушки будет достаточно мощным, чтобы и тактировать модулятор, и управлять драйвером.
С другой стороны имея плисину грех не попробовать сделать на ней цифровой ФАПЧ
Ааа..кажись догадался - чтобы не мучиться с синхронизацией при слабом сигнале? Ну да, у меня была такая проблема - после долгого перерыва между импульсами следующая пачка идет с рассинхроном по фазе, правда это было только с ШИМом (он у меня на частоте 22кГц был) + после 3-5 импульсов синхронизация восстанавливалась. Более того, у ФАПЧи тоже будет эта проблема. И кстати, все равно придется постоянно вкачивать некоторую среднюю мощность в пушистик -почему это так я приводил ссылку на обсуждение с математиками электроникса, вывод был такой: чтобы звуковые колебания создаваемые кустиком были без искажений нужно постоянно иметь кустик как можно большего объема, который модулируется на небольшой процент от этого объема. При этом сигнал ОС с катушки будет достаточно мощным, чтобы и тактировать модулятор, и управлять драйвером.
С другой стороны имея плисину грех не попробовать сделать на ней цифровой ФАПЧ
Да, PLL для того, чтобы это все не заглохло при низких скважностях. Но, действительно, судя по всему, работало бы и без него, но уже, хоть коряво, но написал. Силовуха пока очень слабенькая, но уже что-то работает:
Прикольно такой маленький пуфыстик, а играет бойко
Кстати еще можно как посмотреть на результат работы -щуп положить рядом и длительность развертки сделать 500мкс/дел. или около того -будет видно огибающую несущей (сам аудиосигнал)
Кстати еще можно как посмотреть на результат работы -щуп положить рядом и длительность развертки сделать 500мкс/дел. или около того -будет видно огибающую несущей (сам аудиосигнал)
будет видно огибающую несущей (сам аудиосигнал)
Не будет, будет просто сплошная колбаса.
Попробовал мегагерц. Силовая не тянет
Значит глубина модуляции маленькая, у меня хорошо просматривалось. Кстати я еще вместо аудио выводил чисто синус, на макс.амплитуде хорошо видно когда упирается в ограничение, ну и вообще искажения можно сразу увидеть. Но по-любому играет она именно за счет АМ
Кстати идея, если уж ты будешь делать цифровой ФАПЧ, может попробовать ЧМ модуляцию реализовать? Идея в следующем (не знаю как реализуется цифровой ФАПЧ, расскажу на примере аналогового, но думаю ты поймешь идею) в аналоговом ФАПЧе есть фазовый детектор и фильтр, с выхода которого сигнал заводится на ГУН, так вот если к этому сигналу приплюсовать некий внешний сигнал, то он будет модулировать генератор по частоте. Получим ЧМ модуляцию. Но посколько катушка это резонансный контур, отклонение от резонансной частоты будет модулировать и амплитуду (что нам и нужно). Только для получения более-менее качественного АМ нужно работать не на самом резонансе, а немного в стороне от него -чтобы в одну сторону сигнал нарастал, а в другую убывал. Плюс идеи в том, что тогда можно будет просто выкинуть сигма-дельта модулятор
Кстати идея, если уж ты будешь делать цифровой ФАПЧ, может попробовать ЧМ модуляцию реализовать? Идея в следующем (не знаю как реализуется цифровой ФАПЧ, расскажу на примере аналогового, но думаю ты поймешь идею) в аналоговом ФАПЧе есть фазовый детектор и фильтр, с выхода которого сигнал заводится на ГУН, так вот если к этому сигналу приплюсовать некий внешний сигнал, то он будет модулировать генератор по частоте. Получим ЧМ модуляцию. Но посколько катушка это резонансный контур, отклонение от резонансной частоты будет модулировать и амплитуду (что нам и нужно). Только для получения более-менее качественного АМ нужно работать не на самом резонансе, а немного в стороне от него -чтобы в одну сторону сигнал нарастал, а в другую убывал. Плюс идеи в том, что тогда можно будет просто выкинуть сигма-дельта модулятор
- iEugene0x7CA
- Адепт
- Сообщения: 1570
- Откуда: Киев
mutabor писал(а):Кстати идея, если уж ты будешь делать цифровой ФАПЧ, может попробовать ЧМ модуляцию реализовать? Идея в следующем (не знаю как реализуется цифровой ФАПЧ, расскажу на примере аналогового, но думаю ты поймешь идею) в аналоговом ФАПЧе есть фазовый детектор и фильтр, с выхода которого сигнал заводится на ГУН, так вот если к этому сигналу приплюсовать некий внешний сигнал, то он будет модулировать генератор по частоте. Получим ЧМ модуляцию. Но посколько катушка это резонансный контур, отклонение от резонансной частоты будет модулировать и амплитуду (что нам и нужно). Только для получения более-менее качественного АМ нужно работать не на самом резонансе, а немного в стороне от него -чтобы в одну сторону сигнал нарастал, а в другую убывал. Плюс идеи в том, что тогда можно будет просто выкинуть сигма-дельта модулятор
Игрался с 4046 микросхемкой, а?
На самом деле у подобного решения не мало минусов:
1. Косвенная AM модуляция через FM не особо эффективна, и как следствие — звук получается паршивым, как со старого радио;
2. Работая вне резонанса теряется эффект ZCS, а это значительные потери КПД.
Пропуск импульсов с синхронизацией ОС этот эффект сохраняет, а сигма-дельта — лишь более эффективное по сравнению с ШИМ решение.
PLL'ка тоже не лишняя, она не даст катушке заглохнуть в результате внешних воздействий или угасания стримера из-за модуляции.
По сути проект чересчур сложен, с этим не поспорю. Однако в нём всё сделано т.с. по-правильному. Идей как сделать ещё круче у меня лично нет.
iEugene0x7CA писал(а):Игрался с 4046 микросхемкой, а?
На самом деле у подобного решения не мало минусов:
1. Косвенная AM модуляция через FM не особо эффективна, и как следствие — звук получается паршивым, как со старого радио;
2. Работая вне резонанса теряется эффект ZCS, а это значительные потери КПД.
Пропуск импульсов с синхронизацией ОС этот эффект сохраняет, а сигма-дельта — лишь более эффективное по сравнению с ШИМ решение.
PLL'ка тоже не лишняя, она не даст катушке заглохнуть в результате внешних воздействий или угасания стримера из-за модуляции.
По сути проект чересчур сложен, с этим не поспорю. Однако в нём всё сделано т.с. по-правильному. Идей как сделать ещё круче у меня лично нет.
Было дело Правда тогда я еще мало понимал, сейчас -гораздо лучше
Еслибы я знал ПЛИСКИ я бы сам чтото такое попробовал, хоть я и аналоговик, но в цифре гораздо интереснее реализовывать идеи - не мешают никакие наводки и особенности аналоговой схемы, и ктобы не повторил cхему и алгоритм -работать будет точно также, и с математической точностью
По поводу замечаний -оно как бы да, но всё же...Сильно ли будет уходить схема от ZCS? Да не особо, тут сильно менять амплитуду не надо, да и чем дальше отойдет от резонанса, тем и ток ниже, поэтому нагрев думаю не особо увеличится. Ну а насчет низкой эффективности АМ -наверно да, линейность там не супер, возможно будут искажения. Но в любом случае если эту фишку можно реализовать попутно, то почему бы не проверить этот вариант?
Сделать такую штуку можно, но сейчас у меня не классическая PLL, а, скорее, random walk filter, поэтому как-нибуть попозже. Кроме того, глубокой модуляции на одном контуре дя еще и с переменной добротностью не получить, как мне кажется. Мне интересно сделать именно классическую AM, а не FM, детектируемую контуром.
Сейчас мне кажется, что лучше попробовать многобитный сигма-дельта модулятор. Это типа ШИМа, но последний бит ШИМа модулируется как сигма-дельта.
К примеру, у нас частота 500кГц. Частота ПЛИС, к примеру, 100МГц. В период влезает 100 отсчетов, что соответствует 6.6 бита или 40дБ С/Ш. Дальше прибавляем СД модулятор второго порядка, но прибавляет еще 30дб, итого получается 70дб, что уже эквивалентно 12 битам. На самом деле, можно затактировать отдельно ШИМ-модулятор и поднять частоту до ~200МГц в моей плисинке, что добавит еще 6дб. Тоесть из этой системы можно добиться примерно 78дб. На видео, для сравнения, примерно 30дб.
Сейчас мне кажется, что лучше попробовать многобитный сигма-дельта модулятор. Это типа ШИМа, но последний бит ШИМа модулируется как сигма-дельта.
К примеру, у нас частота 500кГц. Частота ПЛИС, к примеру, 100МГц. В период влезает 100 отсчетов, что соответствует 6.6 бита или 40дБ С/Ш. Дальше прибавляем СД модулятор второго порядка, но прибавляет еще 30дб, итого получается 70дб, что уже эквивалентно 12 битам. На самом деле, можно затактировать отдельно ШИМ-модулятор и поднять частоту до ~200МГц в моей плисинке, что добавит еще 6дб. Тоесть из этой системы можно добиться примерно 78дб. На видео, для сравнения, примерно 30дб.
Т.е ты хочешь делать частоту ШИМ равную частоте вторички? Не пугают жесткие переключения?
Т.е ты хочешь делать частоту ШИМ равную частоте вторички?
Ага
Не пугают жесткие переключения?
Если они контроллируемые, чего их бояться то. Больше пугает передача переменной скважности через GDT. Хотя, можно читерить и использовать фэйзшифтинг вместо ШИМ.
Форма импульсов какая -трехуровневая манипуляция (короткий в плюс, потом ноль до следующего полупериода и короткий в минус)? Мы такую использовали както, как раз для управления полумостом через транс. Ферриты были обычные Н2000, вроде проблем не было, хотя давно это было...
Итак, сделал первый эксперемент. Оно вполне себе работает, но слышны искажения и шумит тесла доволньо сильно. Шум, очевидно, связан с низкой рабочей частотой. А вот искажения, как я и предпологал, с формой синусоиды.
Сергей, поясни пожалуйста по второму рисунку с точки зрения мат анализа. На первом ты берешь интеграл от sin x dx. Т.е. sin это рабочая частота самой катушки (резонансная). Вторая картинка несовсем понятна.
PS как работает дельта сигма модулятор в курсе, с математической стороны не совсем.
PS как работает дельта сигма модулятор в курсе, с математической стороны не совсем.
На последнем видео, 2:12 минуте.
Вторая картинка - это зависимость площади под синусоидой от длинны куска синусоиды, который мы отрезаем. Площадь под функцией равна интегралу этой функции.
Сделал катушку на 2МГц. Чесно-говоря, я разочарован. Шипит она так-же, как и на 500кГц, а усититель E-класса модулируется сигнма-дельта модулятором отвратно. Это и понятно - ему нужно много циклов, чтобы получился стационарный E-классный режим. Поэтому, нельзя так просто брать и выбрасывать импульсы накачки. Похоже, нормально модулировать его можно только аналоговым образом, как это и делают другие ребята, которые работали над аудиотеслами.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя