Автор Тема: Цифровая эмуляция лампового преампа  (Прочитано 3115 раз)

0 Пользователей и 1 Гость просматривают эту тему.


Брат Пилот

  • Сообщений: 157
  • GTLab - forever!
    • Просмотр профиля
Re: Цифровая эмуляция лампового преампа
« Ответ #41 : Мая 17, 2010, 09:57:17 am »
Хм!  так гораздо понятней! Спасибо!
 а то я малость опешил от обилия ранее не виданных команд...

прикольно, они написали абсолютно свой проц с очень специфическими командами...  :o

KMG

  • Сообщений: 3776
    • ICQ клиент - 412221711
    • AOL клиент - Mike
    • Просмотр профиля
    • E-mail
Re: Цифровая эмуляция лампового преампа
« Ответ #42 : Мая 17, 2010, 10:17:20 am »
Там еще хитрость, адреса дсп суммируются со счетчиком, который плюсуется на каждом периоде сэмпла (он же цикл выполнения всех команд). Так что буфер озу крутится "под ногами" проца, обеспечивая автоматический сдвиг сэмплов без дополнительных софтовых накладок. Еще прочитай в даташите насчет LFO, там программируется частота, амплитуда и форма.

Брат Пилот

  • Сообщений: 157
  • GTLab - forever!
    • Просмотр профиля
Re: Цифровая эмуляция лампового преампа
« Ответ #43 : Мая 17, 2010, 05:54:27 pm »
люди помогите!!!
написал функцию управления громкостью вот такую

static int volume(int dat_in,int PR1)
{
     if (dat_in<0x8000)
     {
        dat_in=(dat_in*PR1/50);
     }
     if  (dat_in>0x7FFF)
     {
        dat_in=(0xFFFF-(0xFFFF-dat_in)*PR1/50);
     }
     return dat_in;

}

PR1 в пределах от 1 до 100

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

вот семплы
этот "чистый" чередуется с х2
http://www.onlinedisk.ru/file/434665/

этот "чистый" чередуется с /2
http://www.onlinedisk.ru/file/434672
 
вайвформы могу выложить если  надо.

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

KMG

  • Сообщений: 3776
    • ICQ клиент - 412221711
    • AOL клиент - Mike
    • Просмотр профиля
    • E-mail
Re: Цифровая эмуляция лампового преампа
« Ответ #44 : Мая 17, 2010, 06:55:28 pm »
Во первых - разрядность типа int зависит от среды прграммирования, она может быть любой от 8-ми бит и далее до бескончности ;)
Если ты хочешь работать с 16-ти битными числами (я так понял ты знак определяешь по старшему биту), то указывай конкретную разрядность short - 16-битное целое.
Во вторых помножив на PR1 ты вылетишь за разрядную сетку. Да и в любом случае максимальный коэффициент у тебя 2, что обеспечивает вылет из разрядной сетки даже при промежуточном расширении разрядности.
Приведение знака у тебя неправильное. Во первых такое приведение корректно только если сначала знаковое привести к беззнаковому, во вторых нужно вычитать из 0, а не из 0xFFFF.

#define VOL_MAX 100

static int volume(short dat_in, short PR1)
{
     if (PR1 > VOL_MAX)
         PR1 = VOL_MAX;
     dat_in = ((long)dat_in * PR1) / VOL_MAX;
     return dat_in;
}

Брат Пилот

  • Сообщений: 157
  • GTLab - forever!
    • Просмотр профиля
Re: Цифровая эмуляция лампового преампа
« Ответ #45 : Мая 17, 2010, 11:27:36 pm »
подумав заменил везде формат данных на short спасибо за идею.

но замена на вами приведенную функцию результата не дала.. 8(
все тот же шум.
попробовал вместо .....*PR1)/VOL_MAX просто разделить на 2
dat_in = ((long)dat_in ) /2;
т.е. в любом случае я никуда вылететь не могу .
итоговое значение в любом случае меньше  исходного, но....

шума стало гораздо меньше, но совсем он не пропал.
опять же, анализ сигнала визуально ничего подозрительного не дал.
есть еще идеи?

ЗЫ: софтовый процессор Ниос 2 32 битный

KMG

  • Сообщений: 3776
    • ICQ клиент - 412221711
    • AOL клиент - Mike
    • Просмотр профиля
    • E-mail
Re: Цифровая эмуляция лампового преампа
« Ответ #46 : Мая 18, 2010, 06:33:28 am »
> ЗЫ: софтовый процессор Ниос 2 32 битный
Тогда int у тебя скорее всего 32 бита
А если не вызывать функцию шум есть?
Может это просто неудачность платформы с точки зрения оцифровки аудио сигнала.

Kaban

  • Гость
Re: Цифровая эмуляция лампового преампа
« Ответ #47 : Мая 18, 2010, 06:35:59 am »
а что из себя представляет dat_in? отсчет?

Брат Пилот

  • Сообщений: 157
  • GTLab - forever!
    • Просмотр профиля
Re: Цифровая эмуляция лампового преампа
« Ответ #48 : Мая 18, 2010, 08:02:03 am »
ну в общем вот вся система

[img=http://www.ufu.co.il/files/exhu3k65z6mgyz0w58wl_thumb.jpg]
SOUND это интерфейс кодека WM8731 написанный на VHDL
у этого интерфейса есть 16-битный вход и выход

далее это идет на сконфигурированный процессор SOUND_CPU (NIOS II)
все остальное выполняется  самим процем.

для программы порт in_port_to_the_DATA_IN  обозначен как dat_in
по завершении выполнения алгоритмов dat_in направляется на out_port_from_the_DATA_OUT
от куда все это идет обратно на SOUND

KMG если не вызывать, то шума нет, думаю пока что сделать модули не использующие громкость, например задержку. и послушать как это звучать будет.
« Последнее редактирование: Мая 18, 2010, 08:11:06 am от bratpilot »

Kaban

  • Гость
Re: Цифровая эмуляция лампового преампа
« Ответ #49 : Мая 18, 2010, 08:16:44 am »
Даже не знаю... :-X Если этот алгоритм на ПК гоняется(в симуляторе), то, возможно, проблема в отработке на ПК...

Брат Пилот

  • Сообщений: 157
  • GTLab - forever!
    • Просмотр профиля
Re: Цифровая эмуляция лампового преампа
« Ответ #50 : Мая 18, 2010, 08:38:35 am »
что-то я не представляю как этот алгоритм прогнать на ПК???
моделировать всю периферию... :o

Kaban

  • Гость
Re: Цифровая эмуляция лампового преампа
« Ответ #51 : Мая 18, 2010, 09:02:24 am »
Ну тогда не знаю... Не должно быть шума ))

Может:?

#define VOL_MAX 100

static long int volume(short dat_in, short PR1)
{
     if (PR1 > VOL_MAX)
         PR1 = VOL_MAX;

     return ((long)dat_in * PR1) / VOL_MAX;
}
« Последнее редактирование: Мая 18, 2010, 09:05:25 am от Kaban »

Брат Пилот

  • Сообщений: 157
  • GTLab - forever!
    • Просмотр профиля
Re: Цифровая эмуляция лампового преампа
« Ответ #52 : Мая 18, 2010, 09:45:43 am »
ну во первых я уже заменил данные с int на short, данные у меня 16битные  если я использую только уменьшение громкости то вылететь за пределы значения я никак не могу. так что лонг тут не причем

ну а во вторых... хы вернусь с репы попробую... предложенный вариант .
а вообще  надо проанализировать почему деление на 2 дает гораздо меньше шума чем умножение на *50)/100)

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


Jimmy_Page

  • Гость
Re: Цифровая эмуляция лампового преампа
« Ответ #53 : Июня 06, 2010, 01:48:23 pm »
[movedhere] Гитарные усилители и примочки [move by] Jimmy Page.