<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=409185&amp;view=findpost&amp;p=3677628</guid>
        <pubDate>Sun, 17 Jul 2016 09:00:16 +0000</pubDate>
        <title>ФНЧ и ревербератор</title>
        <link>https://forum.sources.ru/index.php?showtopic=409185&amp;view=findpost&amp;p=3677628</link>
        <description><![CDATA[mnm-a: Повстречался ревербератор<br>
<a class='tag-url' href='http://i.imgur.com/i5mpZrB.png' target='_blank'>http://i.imgur.com/i5mpZrB.png</a><br>
<br>
Исходный код можно прочитать тут<br>
<a class='tag-url' href='https://git.cinelerra-cv.org/gitweb?p=CinelerraCV.git;a=tree;f=plugins/reverb;h=bfea8c353a7271a3b3b3caaa1d5be5238ef750fd;hb=HEAD' target='_blank'>https://git.cinelerra-cv.org/gitweb?p=Cinel...ef750fd;hb=HEAD</a><br>
<br>
&quot;Уровень исходного сигнала&quot;<br>
мсек. Предзадержка&quot;<br>
&quot;Уровень первых отражений&quot;<br>
&quot;Уровень последних отражений&quot;<br>
&quot;Число отражений&quot;<br>
&quot;мсек. Время реверберации&quot;<br>
<br>
Не пойму что означают параметры: `Start band for lowpass` и `End band for lowpass`<br>
<br>
Насколько я понимаю, речь идет о фильтре нижних частот (lowpass). Но вот эти вот &quot;приставки&quot; Start band * End band *<br>
Что это может означать ? Подскажите пожалуйста.<br>
Ведь lowpass пропуск н.ч. то-бишь фильтр нижних частот работает в диапазоне от 0 до границы среза.<br>
А тут вроде как получается мы можем задавать нижнюю (отличную от нуля) и верхнюю границу полосы<br>
пропускания фильтра нижних частот ?<br>
<br>
Я задавал этот вопрос многим пользователям, но похоже, что точку в вопросе может поставить только тот, кто прочитает исходный код.<br>
<br>
Мы смотрели действие эффекта по спектрограмме, выдвигались разные предположения и мнения<br>
Ниже - цитаты:<br>
<br>
-- что это &quot;<em class='tag-i'> на самом деле не ФНЧ, а ПФ (полосовой фильтр)</em>&quot;<br>
<br>
- что это действительно &quot;<em class='tag-i'>ФНЧ, но в эффекте их не один, а два, но с разным действием</em>&quot; (кстати, в коде они так и числятся как LOWPASS 1 LOWPASS 2)<br>
<br>
- была идея, что &quot; <em class='tag-i'>2 частоты задают крутизну спада фильтра(то есть: start band - это аналог cutoff frequency - начальная частота, с которой фильтр начнёт работу, а end band for lowpass - это ширина (по оси Х) участка с затуханием), но оказалось, что они меняются независимо и могут быть в &quot;неправильном&quot; порядке.<br>
Если end &lt; start то спектрограмма показывает, что это обычный band pass фильтр, а не lowpass filter.<br>
Получается, что это или так и было задумано, или это логическая ошибка. Потому что в &quot;нормальных&quot; условиях ( случай, когда выставляются значения start &lt; end ) спектрограмма подтверждает гипотезу, что разница между end и start определяет интенсивность затухания. Видно, что полоса затухающих частот становится уже или шире</em>.&quot;<br>
<br>
- выдвигалось предположение, что &quot;<em class='tag-i'>ФНЧ здесь имеет изменяемую полосу. Сначала полоса больше, Start Band, а с каждым отражением уменьшается, вплоть до End Band</em>.&quot;<br>
<br>
-- &quot;.. это не тривиальный фильтр. Их там много на самом деле, в зависимости от количества отражений. Частоты задают границы изменения частоты фильтров. Возможно он даже LP-типа (я по коду не возьмусь определить), но их там несколько, с разными частотами для каждого отражения, если я правильно уловил что внутри происходит. &quot;<br>
<br>
-- и вот ниже пользователь пробовал читать исходный код:<br>
<br>
<br>
237 // set changing levels<br>
238 ref_levels<em class='tag-i'>[j] = db.fromdb(config.ref_level1 + (config.ref_level2 - config.ref_level1) / (config.ref_total - 1) * (j - 2));<br>
239 //ref_levels[i][j] /= 100;<br>
240<br>
241 // set changing lowpass as linear<br>
242 ref_lowpass[i][j] = (int64_t)(config.lowpass1 + (double)(config.lowpass2 - config.lowpass1) / (config.ref_total - 1) * (j - 2));<br>
243 lowpass_in1[i][j] = 0;<br>
244 lowpass_in2[i][j] = 0;<br>
[I]<br>
<br>
j - номер отражения<br>
<br>
ref_lowpass заполняется равномерно частотами из интервала [lowpass1, lowpass2]<br>
<br>
Осталось понять, что именно делает фильтр:</em><br>
<br>
int ReverbEngine::process_overlay(double *in, double *out, double &amp;out1, double &amp;out2, double level, int64_t lowpass, int64_t samplerate, int64_t size)<br>
467 {<br>
468 // Modern niquist frequency is 44khz but pot limit is 20khz so can&#39;t use<br>
469 // niquist<br>
470 if(lowpass == -1 || lowpass &gt;= 20000)<br>
471 {<br>
472 // no lowpass filter<br>
473 for(int i = 0; i &lt; size; i++) out<em class='tag-i'> += in[i] * level;<br>
474 }<br>
475 else<br>
476 {<br>
477 double coef = 0.25 * 2.0 * M_PI * (double)lowpass / (double)plugin-&gt;project_sample_rate;<br>
478 double a = coef * 0.25;<br>
479 double b = coef * 0.50;<br>
480<br>
481 for(int i = 0; i &lt; size; i++)<br>
482 {<br>
483 out2 += a * (3 * out1 + in[i] - out2);<br>
484 out2 += b * (out1 + in[i] - out2);<br>
485 out2 += a * (out1 + 3 * in[i] - out2);<br>
486 out2 += coef * (in[i] - out2);<br>
487 out1 = in[i];<br>
488 out[i] += out2 * level;<br>
489 }<br>
490 }<br>
491 }<br>
[I]<br>
Тут какая-то фильтрация с MAGIC_NUMBERS и без комментариев. <br>
Короче, эти 2 частоты каким-то образом влияют на фильтрацию применительно к отражениям сигнала. <br>
Затруднительно сказать как именно... <br>
.. надо найти специалиста по фильтрации, которые объяснит, что делает фильтр <br>
<br>
если F2&lt; F1 (F1 &gt; F2) частоты фильтров для отражений распределяются в обратном порядке. <br>
Не знаю как это влияет на результат.</em><br>
<br>
--------------<br>
Вот такая вот головоломка.]]></description>
        <author>mnm-a</author>
        <category>Программирование звука</category>
      </item>
	
      </channel>
      </rss>
	