Страница 1 из 2

Аудио SSTC с сигма-дельта модулятором

Добавлено: 07 янв 2016, 12:32
BSVi
По мотивам теслы mutabor'а захотелось и мне сделать сстц с сигма-дельта модуляцией. Естественно, это будет долгострой, так как времечка у меня всегда не хватает, но интересно жеж разобраться в тонне математики. Возможно, и вам будет интересно, поэтому буду сюда отписываться о прогрессе.

Естественно, первое с чего я начал - это сам модулятор. Если кратко, то весь цимус сигма-дельта модуляторов (по сравнению с ШИМом) в том, что можно отдельно управлять АЧХ сигнала и АЧХ шума, и, таким образом, вытеснить шум в область ультразвука, где его никто и не услышит. Чем больеш порядок модулятора - тем больше можно вытеснить шум в ультразвук, но тем нестабильнее сам моделятор. При любом неловком движении модулятор высокого порядка превращается в генератор.

Сначала я попробовал сделать подулятор первого порядка, чтобы было с чем сравнивать.
m1.gif
m1.gif (8.71 КБ) 27951 просмотр


Звучит он довольно отвратно. Естественно, модулятор был модифицирован до второго порядка:

m2.gif
m2.gif (11.44 КБ) 27951 просмотр

Звучит он уже намного лучше, но, все-равно, шумит довольно сильно.

Небольшими усилиями воли, модулятор разросття до третьего порядка. В этот раз в более общей форме и с управляемым нулем в передаточной характериситке шума:
m3.gif

Шума этого модулятора уже практически не сылшно, поэтому он и сойдет за рабочий вариант. Вот, к примеру, спектр выходного сигнала этого модулятора при подаче на выход 1кгц:
sp.gif

Видно и ноль в шуме и, что даже на 20кгц сохраняется 50dB сигнал/шум. Не аудиофильски, конечно, но, на практике, его не слышно.

Сделать его в аналоге уже довольно сложно, да и не интересно, поэтому это все я постараюсь впихнуть в свою старую любимую плис xc3s50an. К сожалению, в ней не хватает ресурсов чтобы сделать все "в лоб", поэтому нам с вами предстоит увлекательное создание специализированного процессора под эту задачу.

Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 08 янв 2016, 14:55
BSVi
Итаксь, набросал процессор для этого проектика. Задача процессора, фактически, умножать и складывать, используя при этом поменьше аппаратных ресурсов и делая это как можно быстрее, поэтмоу он получился доволньо простой.

Работает он с числами с фиксированной запятой 0q31. К примеру, интегратор на нем, выглядит вот так:

Код: Выделить всё

   in 0x00
   lda 0x00
   ldb 0x01
   nop
   stradd 0x01
   done


nop тут для того, чтобы успела завершиться предыдущая комманда. В таких глубокоэмбеддед штуках часто проще сделать вот такие хаки, чем выдумывать синхронизацию. Но и этот мелкий процессор забил 60% плисины (естественно, их забил не сам процессор, а умножитель). Если кому интересно, вот полный код:

 Код

Код: Выделить всё

module processor(
   input clk,
   input start,
   input [31:0] sample,
   output reg on
   );

// instruction regs
parameter O_DONE = 0;
parameter O_LDA =  1;
parameter O_LDB =  2;
parameter O_STRMUL = 3;
parameter O_STRADD = 4;
parameter O_STRSIGN = 5;
parameter O_IN  = 6;
parameter O_OUT = 7;
parameter O_NOP = 8;

reg [3:0]   opcode;
reg [3:0]   opcode2;
reg [7:0]   instruction_address;
wire [31:0] instruction_output;



wire signed [31:0] data_output;
reg started;

reg [31:0] operand_a;
reg [31:0] operand_b;
reg [7:0]  operand_addr;

reg [31:0] write_data;
reg write_enable;

wire [31:0] multiplied;
wire [31:0] added = operand_a + operand_b;
wire [31:0] sign = operand_a >= 0 ? 32'h7fffffff : 32'h80000000;
multiplier multiplier1 (
   .clk(clk),
   .a(operand_a),
   .b(operand_b),
   .p(multiplied)
);


processor_memory processor_memory1 (
  .clka(clk),
  .ena(1),
  .wea(write_enable),
  .addra({1'b0, operand_addr}),
  .dina(write_data),
  .douta(data_output),
  .clkb(clk),
  .enb(1'b1),
  .web(0),
  .addrb({1'b1, instruction_address}),
  .dinb(0),
  .doutb(instruction_output)
);



always @(*) begin
   opcode <= instruction_output[31:28];
   operand_addr <= instruction_output[27:20];
   
   case(opcode)
      O_STRMUL: begin
         write_data <= multiplied;
         write_enable <= 1'b1;
         end
         
      O_STRADD: begin
         write_data <= added;
         write_enable <= 1'b1;
         end

      O_STRSIGN: begin
         write_data <= sign;
         write_enable <= 1'b1;
         end         
         
      O_IN: begin
         write_data <= sample;   
         write_enable <= 1'b1;
         end
         
      default: begin
         write_data <= 0;   
         write_enable <= 1'b0;
      end
   endcase
end


always @(posedge clk) begin

   opcode2 <= opcode;
   case(opcode2)
      O_LDA: begin
         operand_a <= data_output;
         started <= 1;
         end
   
      O_LDB:
         operand_b <= data_output;

      O_OUT: begin
         on <= data_output > 0;
         end

      O_DONE: begin
            started <= 0;
            instruction_address <= 0;
         end

   endcase

   if (started) instruction_address <= instruction_address + 1;   
   if (start) started <= 1;
   
   
end


initial begin
   instruction_address = 0;
   write_enable = 0;
end


endmodule


Теперь нужно написать хотябы простой модулятор для этого проца, попутно его обезбаживая

Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 10 янв 2016, 00:29
BSVi
После небольшего ковыряния с процессором оказалось, что он не успевает все посчитать, поэтому переписал я на жесткую логику и все работает нормально. Добился совпадения сигналов с моделью. Теперь нужно бы написать приемник аудиосигнала.

waves.png

Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 11 янв 2016, 14:00
BSVi
Написал приемник spdiff, он-же toslink и прицепил к нему модулятор. Пришлось немного поиграться, так как это все никак не хотело запускаться как в симуляторе. В итоге, оно заработало. Не так хорошо, как предсказывал симулинк, но заработало. Вот видео :)


Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 11 янв 2016, 18:31
Firelander
Качество вполне себе :)
То есть по сути на выходе мы получаем сигнал включена или нет тесла в данном периоде, эдакий высокочастотный интерраптер, я правильно понимаю?
Если так, то на ум сразу приходит условный компаратор, который сравнивает ток вторички с аналоговым аудиосигналом.
Ех, а у меня без дела валяется coreEP4CE10.
Короче было бы здорово, если б ты сделал видео, где на пальцах объясняешь как работает сигмадельта. Статейки я почитал, картина немного-немного начала вырисовываться, но далеко не всё понятно, например как поток нулей и единиц на выходе магическим образом преобразуется в число. Это я про АЦП. Не совсем про твою схему, конечно.
Хотелось бы узнать о преимуществах схемы по сравнению с компаратором. В сигмадельте используется виртуальное интегрированное значение, коэффециентами подстраиваются скорости нарастания/затухания, как я понимаю, а тут можно считать реальный ток. Если я совсем уж чушь говорю, ткни носом, а)

Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 11 янв 2016, 19:18
BSVi
эдакий высокочастотный интерраптер, я правильно понимаю?

Именно так :)

Если так, то на ум сразу приходит компаратор, который сравнивает ток вторички с аналоговым аудиосигналом.

Скорее-всего, такая штуковина возбудится из-за двух полюсов в обратной связи. Плюс ток померять с достаточной для аудио точносью в тесле не так то просто. Это не токовая защита. Тут-же, все обратные связи внути и в цифре, что гарантирует их стабильность. Кроме того, сама передаточная характеристика огибающей теслы тут сыграет как ФНЧ, что еще улучшит сигнал/шум.

coreEP4CE10, да, это монстрячая штуковина по сравнению с тем, что у меня тут, но у меня эта платка уже есть, плюс она заточена под теслы, так-что пришлось впихиваться в нее.

Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 20 янв 2016, 12:28
mutabor
2 BSVi: Интересные картинки, но многое не понятно, вот например: ты из однобитного формата (в симуляшке) делаешь многобитный, это FIR фильтр с дециматором делают? Какая у тебя частота на выходе модулятора и после дециматора, и сколько фактически бит на один отсчет получается в итоге?
И еще гдето читал, что модуляторы выше второго порядка в тех же АЦП не используется, т.к они потенциально неустойчивы.

Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 20 янв 2016, 16:34
BSVi
ты из однобитного формата (в симуляшке) делаешь многобитный, это FIR фильтр с дециматором делают?

ага.

Какая у тебя частота на выходе модулятора и после дециматора, и сколько фактически бит на один отсчет получается в итоге?

После модулятора 500кгц, после дециматора 45кГц.

И еще гдето читал, что модуляторы выше второго порядка в тех же АЦП не используется, т.к они потенциально неустойчивы.

Даже второй порядок не устойчив если его в лоб делать. Тут нужно немного магии с математикой и можно стабилизировать все. В промышленных применениях есть модуляторы до 5того порядка если в лоб и есть еще топологии, где ошибка последнего бита не загоняется в обратную связь, там вообще порядок может быть какой угодно. Но тут это все избыточно :)

Сейчас проектик остановился на том, что мне нужно сделать PLL и, собственно, саму теслу :)

Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 21 янв 2016, 09:37
mutabor
М-мм, а PLL то зачем? :o
Ааа..кажись догадался - чтобы не мучиться с синхронизацией при слабом сигнале? Ну да, у меня была такая проблема - после долгого перерыва между импульсами следующая пачка идет с рассинхроном по фазе, правда это было только с ШИМом (он у меня на частоте 22кГц был) + после 3-5 импульсов синхронизация восстанавливалась. Более того, у ФАПЧи тоже будет эта проблема. И кстати, все равно придется постоянно вкачивать некоторую среднюю мощность в пушистик -почему это так я приводил ссылку на обсуждение с математиками электроникса, вывод был такой: чтобы звуковые колебания создаваемые кустиком были без искажений нужно постоянно иметь кустик как можно большего объема, который модулируется на небольшой процент от этого объема. При этом сигнал ОС с катушки будет достаточно мощным, чтобы и тактировать модулятор, и управлять драйвером.
С другой стороны имея плисину грех не попробовать сделать на ней цифровой ФАПЧ :)

Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 21 янв 2016, 22:58
BSVi
Да, PLL для того, чтобы это все не заглохло при низких скважностях. Но, действительно, судя по всему, работало бы и без него, но уже, хоть коряво, но написал. Силовуха пока очень слабенькая, но уже что-то работает:


Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 21 янв 2016, 23:42
mutabor
Прикольно такой маленький пуфыстик, а играет бойко :D
Кстати еще можно как посмотреть на результат работы -щуп положить рядом и длительность развертки сделать 500мкс/дел. или около того -будет видно огибающую несущей (сам аудиосигнал)

Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 21 янв 2016, 23:47
BSVi
будет видно огибающую несущей (сам аудиосигнал)

Не будет, будет просто сплошная колбаса.

Попробовал мегагерц. Силовая не тянет :(

Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 22 янв 2016, 09:05
mutabor
Значит глубина модуляции маленькая, у меня хорошо просматривалось. Кстати я еще вместо аудио выводил чисто синус, на макс.амплитуде хорошо видно когда упирается в ограничение, ну и вообще искажения можно сразу увидеть. Но по-любому играет она именно за счет АМ :)

:shock: Кстати идея, если уж ты будешь делать цифровой ФАПЧ, может попробовать ЧМ модуляцию реализовать? Идея в следующем (не знаю как реализуется цифровой ФАПЧ, расскажу на примере аналогового, но думаю ты поймешь идею) в аналоговом ФАПЧе есть фазовый детектор и фильтр, с выхода которого сигнал заводится на ГУН, так вот если к этому сигналу приплюсовать некий внешний сигнал, то он будет модулировать генератор по частоте. Получим ЧМ модуляцию. Но посколько катушка это резонансный контур, отклонение от резонансной частоты будет модулировать и амплитуду (что нам и нужно). Только для получения более-менее качественного АМ нужно работать не на самом резонансе, а немного в стороне от него -чтобы в одну сторону сигнал нарастал, а в другую убывал. 8-) Плюс идеи в том, что тогда можно будет просто выкинуть сигма-дельта модулятор :lol:

Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 22 янв 2016, 18:33
iEugene0x7CA
mutabor писал(а):Кстати идея, если уж ты будешь делать цифровой ФАПЧ, может попробовать ЧМ модуляцию реализовать? Идея в следующем (не знаю как реализуется цифровой ФАПЧ, расскажу на примере аналогового, но думаю ты поймешь идею) в аналоговом ФАПЧе есть фазовый детектор и фильтр, с выхода которого сигнал заводится на ГУН, так вот если к этому сигналу приплюсовать некий внешний сигнал, то он будет модулировать генератор по частоте. Получим ЧМ модуляцию. Но посколько катушка это резонансный контур, отклонение от резонансной частоты будет модулировать и амплитуду (что нам и нужно). Только для получения более-менее качественного АМ нужно работать не на самом резонансе, а немного в стороне от него -чтобы в одну сторону сигнал нарастал, а в другую убывал. 8-) Плюс идеи в том, что тогда можно будет просто выкинуть сигма-дельта модулятор :lol:

Игрался с 4046 микросхемкой, а? ;)
На самом деле у подобного решения не мало минусов:
1. Косвенная AM модуляция через FM не особо эффективна, и как следствие — звук получается паршивым, как со старого радио;
2. Работая вне резонанса теряется эффект ZCS, а это значительные потери КПД.
Пропуск импульсов с синхронизацией ОС этот эффект сохраняет, а сигма-дельта — лишь более эффективное по сравнению с ШИМ решение.
PLL'ка тоже не лишняя, она не даст катушке заглохнуть в результате внешних воздействий или угасания стримера из-за модуляции.
По сути проект чересчур сложен, с этим не поспорю. Однако в нём всё сделано т.с. по-правильному. Идей как сделать ещё круче у меня лично нет. :mrgreen:

Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 22 янв 2016, 20:46
mutabor
iEugene0x7CA писал(а):Игрался с 4046 микросхемкой, а? ;)
На самом деле у подобного решения не мало минусов:
1. Косвенная AM модуляция через FM не особо эффективна, и как следствие — звук получается паршивым, как со старого радио;
2. Работая вне резонанса теряется эффект ZCS, а это значительные потери КПД.
Пропуск импульсов с синхронизацией ОС этот эффект сохраняет, а сигма-дельта — лишь более эффективное по сравнению с ШИМ решение.
PLL'ка тоже не лишняя, она не даст катушке заглохнуть в результате внешних воздействий или угасания стримера из-за модуляции.
По сути проект чересчур сложен, с этим не поспорю. Однако в нём всё сделано т.с. по-правильному. Идей как сделать ещё круче у меня лично нет. :mrgreen:

Было дело ;) Правда тогда я еще мало понимал, сейчас -гораздо лучше :)
Еслибы я знал ПЛИСКИ я бы сам чтото такое попробовал, хоть я и аналоговик, но в цифре гораздо интереснее реализовывать идеи - не мешают никакие наводки и особенности аналоговой схемы, и ктобы не повторил cхему и алгоритм -работать будет точно также, и с математической точностью 8-)
По поводу замечаний -оно как бы да, но всё же...Сильно ли будет уходить схема от ZCS? Да не особо, тут сильно менять амплитуду не надо, да и чем дальше отойдет от резонанса, тем и ток ниже, поэтому нагрев думаю не особо увеличится. Ну а насчет низкой эффективности АМ -наверно да, линейность там не супер, возможно будут искажения. Но в любом случае если эту фишку можно реализовать попутно, то почему бы не проверить этот вариант? ;)

Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 23 янв 2016, 13:44
BSVi
Сделать такую штуку можно, но сейчас у меня не классическая PLL, а, скорее, random walk filter, поэтому как-нибуть попозже. Кроме того, глубокой модуляции на одном контуре дя еще и с переменной добротностью не получить, как мне кажется. Мне интересно сделать именно классическую AM, а не FM, детектируемую контуром.

Сейчас мне кажется, что лучше попробовать многобитный сигма-дельта модулятор. Это типа ШИМа, но последний бит ШИМа модулируется как сигма-дельта.

К примеру, у нас частота 500кГц. Частота ПЛИС, к примеру, 100МГц. В период влезает 100 отсчетов, что соответствует 6.6 бита или 40дБ С/Ш. Дальше прибавляем СД модулятор второго порядка, но прибавляет еще 30дб, итого получается 70дб, что уже эквивалентно 12 битам. На самом деле, можно затактировать отдельно ШИМ-модулятор и поднять частоту до ~200МГц в моей плисинке, что добавит еще 6дб. Тоесть из этой системы можно добиться примерно 78дб. На видео, для сравнения, примерно 30дб.

Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 23 янв 2016, 15:16
mutabor
Т.е ты хочешь делать частоту ШИМ равную частоте вторички? Не пугают жесткие переключения?

Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 24 янв 2016, 13:03
BSVi
Т.е ты хочешь делать частоту ШИМ равную частоте вторички?

Ага

Не пугают жесткие переключения?

Если они контроллируемые, чего их бояться то. Больше пугает передача переменной скважности через GDT. Хотя, можно читерить и использовать фэйзшифтинг вместо ШИМ.

Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 24 янв 2016, 19:16
mutabor
Форма импульсов какая -трехуровневая манипуляция (короткий в плюс, потом ноль до следующего полупериода и короткий в минус)? Мы такую использовали както, как раз для управления полумостом через транс. Ферриты были обычные Н2000, вроде проблем не было, хотя давно это было...

Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 12 фев 2016, 19:50
BSVi
Итак, сделал первый эксперемент. Оно вполне себе работает, но слышны искажения и шумит тесла доволньо сильно. Шум, очевидно, связан с низкой рабочей частотой. А вот искажения, как я и предпологал, с формой синусоиды.


Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 14 фев 2016, 10:45
koch
Сергей, поясни пожалуйста по второму рисунку с точки зрения мат анализа. На первом ты берешь интеграл от sin x dx. Т.е. sin это рабочая частота самой катушки (резонансная). Вторая картинка несовсем понятна.
PS как работает дельта сигма модулятор в курсе, с математической стороны не совсем.

Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 14 фев 2016, 12:28
BSVi
по какому из вторых рисунков?

Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 14 фев 2016, 14:10
koch
На последнем видео, 2:12 минуте.

Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 14 фев 2016, 14:38
BSVi
Вторая картинка - это зависимость площади под синусоидой от длинны куска синусоиды, который мы отрезаем. Площадь под функцией равна интегралу этой функции.

Re: Аудио SSTC с сигма-дельта модулятором

Добавлено: 24 фев 2016, 22:56
BSVi
Сделал катушку на 2МГц. Чесно-говоря, я разочарован. Шипит она так-же, как и на 500кГц, а усититель E-класса модулируется сигнма-дельта модулятором отвратно. Это и понятно - ему нужно много циклов, чтобы получился стационарный E-классный режим. Поэтому, нельзя так просто брать и выбрасывать импульсы накачки. Похоже, нормально модулировать его можно только аналоговым образом, как это и делают другие ребята, которые работали над аудиотеслами.