Приходит Новый Год!
Поздравляем читателей нашего блога с праздником!
Приготовили новогодний проект для платы Марсоход2.
Идея проекта такая: подключаем к плате Марсоход2 гитару, и внутри ПЛИС делаем какой нибудь звуковой эффект. Из простых и понятных и эффектных эффектов – эхо.
Эффект эха хорош тем, что скрывает погрешности игры у плохих гитаристов вроде меня :-) и, иногда, может создавать иллюзию быстрой игры. Не знаю насколько эхо слышно в моем видео, но я старался..
Реализовать «эхо» довольно просто.
Сперва оцифровываем звуковой сигнал с помощью АЦП. На плате Марсоход2 уже есть АЦП, только нужно чуть чуть усилить сигнал с гитары, уж больно он слабоват. Мы сделали буквально навесным монтажом усилитель прямо на платке шилда разъемов.
Ну и припаяли еще разъем для гитары.
Оцифровка звука из гитары ведется на частоте 40КГц. Эта частота берется из PLL.
Оцифрованный сигнал поступает на сумматор, который складывает его с задержанным сигналом. Вот фрагмент схемы проекта Altera Quartus II:
Модуль сумматора “adder” реализован на Verilog HDL. Он конечно не только суммирует.
ФИФО для задержки звука у меня довольно длинное. Тут у меня 8 последовательных компонентов FIFO каждый по 2048 элементов. Даже не знаю, как такой проект поставить в виде картинки – узкий и длинный:
Таким образом, суммарная длина FIFO 16К, и это примерно 0,4 секунды задержки при частоте оцифровки 40КГц.
Модуль adder управляется кнопочкамми платы Марсоход2 – можно регулировать задержку эха выбирая один из восьми выходов каждого из отдельных компонентов ФИФО:
reg [2:0]echo_selector;
always @(posedge key_poll_clk)
begin
if(key0_==2'b10)
echo_selector <= echo_selector + 1;
end
reg [7:0]selected;
always @*
case (echo_selector)
3'h0: selected = in0;
3'h1: selected = in1;
3'h2: selected = in2;
3'h3: selected = in3;
3'h4: selected = in4;
3'h5: selected = in5;
3'h6: selected = in6;
3'h7: selected = in7;
endcase
Суммирование происходит не с полным задержанным сигналом, а с «ослабленным»:
//summ sound with delayed echo
reg [8:0]q;
always @(posedge clock)
q <= snd + selected[7:1] + selected[7:2];
selected[7:1] – это половина амплитуды сигнала, а selected[7:2] – это четверть сигнала.
Таким образом, задержанный сигнал ослаблен и составляет ? исходного.
С выхода сумматора сигнал подается на линию задержки в виде FIFO. С выхода FIFO сигнал идет на сумматор обратной связью. Получается возможным многократное повторение звука с затуханием
Ну и, конечно, с выхода сумматора сигнал идет на воспроизведение. Здесь я использую тот же модуль DeltaSigma ЦАП, который у нас уже был в другом проекте.
Весь проект можно взять посмотреть вот здесь:
Подробнее...