Автор Тема: DSP DIY (цифровая обработка своими руками)  (Прочитано 10707 раз)

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

Оффлайн deLuther Автор темы

  • Живу на форуме
  • *******
  • Сообщений: 34249
  • Репутация: +3365/-40
  • alderman of morning star
    • Malefice
Re: DSP DIY (цифровая обработка своими руками)
« Ответ #30 : Февраля 16, 2013, 20:49:00 »
Жах Лютий,
Погонял сегодня вариант через преобразование Гильберта, получается немного проигрывает в производительности кепстральному подходу. Ну и получается в матлабе или октаве смысла городить такое нет, при наличии встроенной функции rcepst. В общем же случае (не матлаб) кепстральный вариант рациональнее, достаточно только иметь наличие FFT, например из FFTW, преобразование Гильберта не во всех матпакетах есть тоже, не говоря уж о том чтобы самому писать на C/C++.
Так что неудивительно что в большинстве статей хоть и упоминают Гильберта, но конечный вариант алгоритма просто через FFT.

В отношении клиппера может стоит лучше сделать асимметричный вариант, обычно есть некоторое смещение, это автоматически даст наличие чётных гармоник.
« Последнее редактирование: Февраля 16, 2013, 20:52:03 от deLuther »

Оффлайн Жах Лютий

  • Новичок
  • *
  • Сообщений: 68
  • Репутация: +8/-0
  • GuitarPlayer.Ru fan!
Re: DSP DIY (цифровая обработка своими руками)
« Ответ #31 : Февраля 17, 2013, 02:27:36 »
Я тож посидул покумекал, Гилберт там тож через ффт делается, так что результат такой же :)
Только вот импульс перед прогонкой через эту лабуду надо увеличивать раз в 8, иначе точность падает - критично на пример, на анти-алиасигн FIR-фильтре для ресемплера.
Вот окончательный вариант
function y=mpestimate(b,N,s)
% b - impulse
% N - impulse points, use ~ 2^nextpow2(length(b))*8
% s - output impulse length

mag=abs(fft(b,N));

% clip to avoid zeros ( log(0)=-Inf )
cutoff=-100; %db
thr=max(mag).*10^(cutoff/20);
toosmall=mag<thr;
mag(toosmall)=thr;

sig(1:(N/2))=sign(linspace(1,(N/2),(N/2)));
sig((N/2)+1)=0;
sig((N/2)+2:N)=sign(linspace(-1,-(N/2)-1,(N/2)-1));
sig(1)=0;

ceps=real(ifft(log(mag)));
ph=-1i*fft(sig'.*ceps);
rec=mag.*exp(1i*ph);
recu=ifft(rec);
y=recu(1:s);
end

По поводу клиппера - оно то конечно так, только на практике не важно ибо низкие частоты на входе сами смещают рабочую точку ограничителя :) Мы ж не чистый синус туда подаем, на выходе куча четных и нечетных гармоник + интермодуляция, вообще входным фильтром все рулится...
Единственное, что можно добавить, так эту имитацию выпрямителя, а-ля катодный повторитель в меса-ректо
896745-0
float _a01,_b00, _a11,_b10,_yg1,_yk1;
float y1;
inline float process(float x){
float y;

y=y1*_yg1-_yk1;
if(x>y){
y=x;
y1=-y1*_a01 +x*_b00;
}else{
y1=-y1*_a11 -1*_b10;
y=y1*_yg1-_yk1;
}

return y;
}
Коэфициенты вычисляем, как для обычного IIR первого порядка
void setFreq(float foff,float fon){ // f=f/fs
_a01=2*fon*pi-1;
_a11=2*foff*pi-1;
_b00=2*fon*pi;
_b10=2*foff*pi;
_yg1=(-foff+fon)/fon;
_yk1=foff/fon;
}
Где foff,fon - частота(временная постоянная) релиза/атаки выпрямителя, в герцах/Fs

ps. Вникать в теорию и писать на C++ нужно, если хочется  в живую полабать, а не гонять готовое через матлаб... хотя к приведению к МФ это не касается ;)

pps. Спектр после деконволюци(в том числе и через pwelch) еще хорошо в логарифмическую шкалу по оси частот перевести, потом через медианный фильтр прогонять, а потом обратно в линейную... красивая картинка получается (на слух тоже). Это если референс не спец сигнал(свип, на пример), а кусок каккой-то гитарной партии..
« Последнее редактирование: Февраля 17, 2013, 02:38:42 от Жах Лютий »

Оффлайн deLuther Автор темы

  • Живу на форуме
  • *******
  • Сообщений: 34249
  • Репутация: +3365/-40
  • alderman of morning star
    • Malefice
Re: DSP DIY (цифровая обработка своими руками)
« Ответ #32 : Февраля 17, 2013, 02:34:03 »
Жах Лютий,
Зачем такие сложности при наличии готовой функции? :)
Кстати я проверял на импульсе для спектра 65к, разница трансформированного спектра с исходным где-то порядка 10^-14, даже без увеличения размера FFT. Собственно rcepst() размер FFT не увеличивает.
А вот для трансформации импульсов с маленькой исходной длиной действительно размер FFT надо брать больше, как рекомендуется, иначе будет плохо.

Оффлайн Павлуха

  • Частый посетитель
  • **
  • Сообщений: 102
  • Репутация: +6/-0
Re: DSP DIY (цифровая обработка своими руками)
« Ответ #33 : Апреля 16, 2013, 15:10:17 »
Спасибо автору за темку. Я-то дико обленился, конечно, ведь всё, что происходит - это второй курс моего радиофака. Сэкономлю время на набивание кода  :)

Оффлайн deLuther Автор темы

  • Живу на форуме
  • *******
  • Сообщений: 34249
  • Репутация: +3365/-40
  • alderman of morning star
    • Malefice
Re: DSP DIY (цифровая обработка своими руками)
« Ответ #34 : Апреля 16, 2013, 18:57:38 »
Халявщик  :D

Оффлайн Жах Лютий

  • Новичок
  • *
  • Сообщений: 68
  • Репутация: +8/-0
  • GuitarPlayer.Ru fan!
Re: DSP DIY (цифровая обработка своими руками)
« Ответ #35 : Апреля 17, 2013, 00:00:15 »
а я вышку прогуливал, потом н-лет спустя пришлось самому садится и раздуплятся :)

Оффлайн yovelop

  • Завсегдатай
  • ***
  • Сообщений: 254
  • Репутация: +26/-0
Re: DSP DIY (цифровая обработка своими руками)
« Ответ #36 : Апреля 20, 2013, 11:17:02 »
deLuther, Спасибо за темку!
Можешь подкинуть каких-нибудь ссылок на статейки по теме, чтоб не только уже готовый код гонять, а понять что к чему и почему (имею ввиду Tone matching)?

И может у кого есть WAV'ки DI гитары и их же реампинг через реальную цепь с предусилком, усилком и кабом? Все темы подобной направленности по форумам с мертвыми ссылками, либо без DI, либо в mp3. Интересен даже звук профилирования Кемпфера, есть такой у кого-нибудь? =)

Оффлайн PVDHP Vadim

  • Ветеран форума
  • ******
  • Сообщений: 3291
  • Репутация: +548/-2
Re: DSP DIY (цифровая обработка своими руками)
« Ответ #37 : Апреля 20, 2013, 11:18:47 »
yovelop, это к Zerocool'у на RMM

Оффлайн deLuther Автор темы

  • Живу на форуме
  • *******
  • Сообщений: 34249
  • Репутация: +3365/-40
  • alderman of morning star
    • Malefice
Re: DSP DIY (цифровая обработка своими руками)
« Ответ #38 : Апреля 20, 2013, 11:49:31 »
yovelop,
Может быть уже видел эту тему, но повторю:
https://guitarplayer.ru/index.php?topic=259350.0
Диайник, запись с реального усилка (точнее реампинг), матчинг.

Что касается теоретической стороны вопроса, то в первом сообщении даны краткие комментарии по производимым действиям, дальше, при желании, можно залезть вглубь и посмотреть что такое анализ Велча, например :)
Вся суть данного подхода сводится к определению осреднённых спектров сигналов и делению их друг на друга, с последующим преобразованием спектра в импульс (с минимальной фазой) :)
« Последнее редактирование: Апреля 20, 2013, 11:58:37 от deLuther »

Оффлайн yovelop

  • Завсегдатай
  • ***
  • Сообщений: 254
  • Репутация: +26/-0
Re: DSP DIY (цифровая обработка своими руками)
« Ответ #39 : Апреля 20, 2013, 13:04:30 »
PVDHP Vadim, Спасибо за наводку, обязательно воспользуюсь.
deLuther, Спасибо! Вроде понятно, почитаю про Вэлча ещё. Единственно, в твоей теме с подгонкой ректифаера звуки после реампа идут в mp3, только DI идет как wav. Не осталось ли, случаем, WAV после реампа?

Оффлайн deLuther Автор темы

  • Живу на форуме
  • *******
  • Сообщений: 34249
  • Репутация: +3365/-40
  • alderman of morning star
    • Malefice
Re: DSP DIY (цифровая обработка своими руками)
« Ответ #40 : Апреля 20, 2013, 13:33:13 »
Осталось, просто не выкладывал.
« Последнее редактирование: Апреля 20, 2013, 13:37:36 от deLuther »

Оффлайн pisyakot

  • Завсегдатай
  • ***
  • Сообщений: 272
  • Репутация: +10/-0
  • Cold
Re: DSP DIY (цифровая обработка своими руками)
« Ответ #41 : Апреля 20, 2013, 14:05:42 »
deLuther, Попробовал ваш алгоритм, но при наложении получившегося импульса получаю звук хола  :crazy:

Оффлайн deLuther Автор темы

  • Живу на форуме
  • *******
  • Сообщений: 34249
  • Репутация: +3365/-40
  • alderman of morning star
    • Malefice
Re: DSP DIY (цифровая обработка своими руками)
« Ответ #42 : Апреля 20, 2013, 16:40:27 »
pisyakot,
Укорачивай получающийся импульс, я об этом писал в самом начале, затухание не слишком быстрое получается, так что лишний хвост надо убрать.
« Последнее редактирование: Апреля 20, 2013, 16:42:50 от deLuther »

Оффлайн Дарья Змеева

  • Новичок
  • *
  • Сообщений: 1
  • Репутация: +0/-0
  • GuitarPlayer.Ru fan!
Re: DSP DIY (цифровая обработка своими руками)
« Ответ #43 : Декабря 03, 2013, 01:58:29 »
подмогите)))) подкиньте прогу на с++ преобразование гильберта
а то полная лажа получается....

Оффлайн golbol1

  • Живу на форуме
  • *******
  • Сообщений: 15987
  • Репутация: +2320/-16
  • .... УХ ---ТЫ ....
Re: DSP DIY (цифровая обработка своими руками)
« Ответ #44 : Декабря 03, 2013, 07:40:53 »
Дарья Змеева,  :crazy: :crazy: :crazy: :crazy: :crazy2: :crazy2: :crazy2: :rolleyes: :rolleyes: :rolleyes:  Чего --- Куда подкинуть ...  :o :o :rolleyes: