<?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=234708&amp;view=findpost&amp;p=3294093</guid>
        <pubDate>Thu, 28 Mar 2013 09:19:31 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3294093</link>
        <description><![CDATA[zamir: если вы будете делать преобразование Фурье то вам всё равно нужны все отчёты<br>поэтому удаление надо интерпретировать как фильтрацию (убрать аплитуду там где вы считаете сигнала нет) - тогда я не вижу препятстивий для вашей задумки]]></description>
        <author>zamir</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3293245</guid>
        <pubDate>Tue, 26 Mar 2013 18:20:27 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3293245</link>
        <description><![CDATA[MoonDancer13: Вопрос мб немного не в тему но все же<br>
нужно ли обрезать сигнал во временной области перед обработкой в частотной?<br>
<br>
<span class="b-attach" data-size="24624" data-hits="696" data-attach-id="28294" data-attach-post-id="3293245">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3293245&amp;attach_id=28294' title='Скачать файл' target='_blank'>FIgure1.jpg</a> (, : 696)
		</span><br>
то что есть<br>
<br>
<span class="b-attach" data-size="41731" data-hits="643" data-attach-id="28295" data-attach-post-id="3293245">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3293245&amp;attach_id=28295' title='Скачать файл' target='_blank'>FIgure1___копия.jpg</a> (, : 643)
		</span><br>
полезная часть<br>
<br>
если да то как?(ведь размерность должна оставаться одинаковой что в базе( эталонов) что в входном сигнале который сравнивается и эталонами)]]></description>
        <author>MoonDancer13</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3198489</guid>
        <pubDate>Tue, 04 Sep 2012 09:36:34 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3198489</link>
        <description><![CDATA[zamir: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>ну тык инверсное DCT делать нужно??? Чтобы обратно к спектру вернуться, только с потерей информации.</div></div><br>
Если хотите визуализировать или синтезировать, можно сделать<br>
Но для распознавания - не нужно<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '> А если инверсное DCT не делать, то огибающей спектра не получится, будут просто коэффициенты косинусного преобразования. </div></div><br>
да, просто коэфициенты, которые являются упорядоченными принципиальными компонентами - это именно то что нужно системе распознавания<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>А 13 первых коэффициентов, это при условии что 20 фильтров во временном окне, например слово делиться тоже на 20 временных окон, тайм слотов? Если фильтров например 30 то нужно первые 20 коэффициентов брать</div></div><br>
<br>
13 принципиальных компонент берётся потому что практикой доказано, что остальные (маленькие кванты энергии) не несут существенной информации<br>
13 коэффициентов берётся на окно например в 30мс.<br>
Как влияет число фильтров на необходимое количество DCT коэффициентов не скажу.]]></description>
        <author>zamir</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3198456</guid>
        <pubDate>Tue, 04 Sep 2012 09:06:01 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3198456</link>
        <description><![CDATA[TViT: <strong class='tag-b'>zamir</strong> ну тык инверсное DCT делать нужно??? Чтобы обратно к спектру вернуться, только с потерей информации. А если инверсное DCT не делать, то огибающей спектра не получится, будут просто коэффициенты косинусного преобразования. <br>
 Первый самый значащий коэффициент, а остальные менее значащие, если обнулить, то будет соответственно уровень сжатия с потерей начальных спектральных данных. И всегда коэффициент первый самый главный, а остальные можно обнулять это влияет на сжатие и потерю информации о спектре. Это же не огибающая спектра получится. Вот инверсное DCT вернет обратно в спектр и получится спектральная информация, только  сжатая с потерей качества.<br>
<br>
А 13 первых коэффициентов, это при условии что 20 фильтров во временном окне, например слово делиться тоже на 20 временных окон, тайм слотов? Если фильтров например 30 то нужно первые 20 коэффициентов брать? Иначе потери информации о спектре будут сильными при сжатии.]]></description>
        <author>TViT</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3198427</guid>
        <pubDate>Tue, 04 Sep 2012 08:23:51 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3198427</link>
        <description><![CDATA[zamir: Квантование - вами выбрано правильное слово<br>Задача DCT сделать квантование<br>Получаем например 13 коэффициентов квантования<br>Если будем смотреть только первый коэффициент - видим изменение большого кванта энергии<br>Следующий коэффициент - квант энергии меньшего размера (второй наиболее значимый признак)<br>и т.д.<br><br>MFCC часто сравнивают с PCA - т.е. в обоих случаях выделяются главные компоненты которые упорядочены в порядке уменьшения их значимости<br><br>Упорядоченные признаки нужны системе распознавания]]></description>
        <author>zamir</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3197809</guid>
        <pubDate>Mon, 03 Sep 2012 07:08:37 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3197809</link>
        <description><![CDATA[TViT: Народ а подскажите в чем смысл DCT. Читал про MFCC там на графиках показано что LPC, MFCC после DCT это коэффициенты которые огибают спектр что-то типа усреднения. Экспериментировал у себя по всякому после гребенки фильтров DCT, получается либо какой-то градиент, либо просто коэффициенты не похожие на спектр огибания. Да и примеры сколько не скачивал по DCT тоже спектр там не получается всегда квантуется или фильтруется и потом инверсное DCT.<br>
В чем проблема нужно делать квантование после DCT и потом инверсное DCT ? Чтобы получить как бы сжатые данные, информации о спектре?<br>
<br>
А если LPC и MFCC коэффициенты это упрощение и усреднение спектра для уменьшения данных, то почему не сделать просто скользящее среднее по спектру получится таже самая огибиющая спектра? <br>
Я правильно мыслю?<br>
<br>
<br>
<br>
<br>
Вот картинка от сюда -&gt;<br>
Aldebaro Klautau - 11/22/05<br>
How are MFCCs used in speech recognition<br>
<span class="b-attach" data-size="73279" data-hits="630" data-attach-id="22565" data-attach-post-id="3197809">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3197809&amp;attach_id=22565' title='Скачать файл' target='_blank'>Coeffs.JPG</a> (, : 630)
		</span>]]></description>
        <author>TViT</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3183895</guid>
        <pubDate>Sat, 04 Aug 2012 12:04:18 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3183895</link>
        <description><![CDATA[zamir: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>для линейной зависимости просто делим вашу ось частоты 5512 на 40 и получаем 40 диапазонов частот<br>
для логарифмической зависимости придётся проделать чуть больше арифметических вычислений</div></div><br>
я полагал вот тут вы суть уловите :)<br>
если я не ошибаюсь то делал это так (поправьте меня если я не прав):<br>
сначала работаем в mel шкале - делим участок частот на равные отрезки<br>
затем переводим наши отрезки на реальную плоскость частот и получаем пасположение углов треугольника<br>
зарисуйте на бумажке - всё должно сойтись примерно с тем что изозражено на графике]]></description>
        <author>zamir</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3183785</guid>
        <pubDate>Fri, 03 Aug 2012 21:11:41 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3183785</link>
        <description><![CDATA[Black*Eternal: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=234708&view=findpost&p=3183287'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>zamir &#064; <time class="tag-quote__quoted-time" datetime="2012-08-03T06:48:40+00:00">03.08.12, 06:48</time></span><div class='quote '>прежде чем подставлять значение после пребразования Фурье, лучше создать банк фильтров той самой гребёнки из например 40 значений</div></div><br>
А как это делается? :lol: Я вот этого никак и не могу понять как эти гребёнки делать  :lol:]]></description>
        <author>Black*Eternal</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3183287</guid>
        <pubDate>Fri, 03 Aug 2012 06:48:40 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3183287</link>
        <description><![CDATA[zamir: Похоже на правду<br>Вам ещё в процессе потребуется обратное преобраззование из mel шкалы<br>Выглядит оно так:<br>f = 700 * (pow(10, m / 2595.0) - 1)<br><br>прежде чем подставлять значение после пребразования Фурье, лучше создать банк фильтров той самой гребёнки из например 40 значений<br>каждое значение будет определять диапазон часто для данного банка/треугольника<br>для линейной зависимости просто делим вашу ось частоты 5512 на 40 и получаем 40 диапазонов частот<br>для логарифмической зависимости придётся проделать чуть больше арифметических вычислений<br>Полагаю вы суть уловили  :) <br><br>Забегая немного вперёд:<br>При работе с фильтром определяются так же диапазоны частот<br>Например человеческая речь находится приблизитетельно в диапазоне частот от 80 до 9000Гц<br>Поэтому для фильтра берут например отрезок от 100 до 4000Гц и деляет его на контейнеры. Частоты выше и ниже отбрасывают.]]></description>
        <author>zamir</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3183189</guid>
        <pubDate>Thu, 02 Aug 2012 20:08:45 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3183189</link>
        <description><![CDATA[Black*Eternal: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=234708&view=findpost&p=3183185'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>zamir &#064; <time class="tag-quote__quoted-time" datetime="2012-08-02T19:57:33+00:00">02.08.12, 19:57</time></span><div class='quote '>После пребразования вы получите спектр<br>
значения после преобразования это не совсем частоты это отсчеты частот</div></div><br>
Попробую поэтапно свериться и рассказать, что я делаю на этом этапе :) У меня после Фурье на выходе получается, скажем 3000 точек. Это просто упорядоченные отсчёты. Сигнал у меня в формате 11025герц, поэтому после Фурье я получу набор частот от 0 до 5512гц.<br>
<br>
По пропорции получаем, что частота определённого отсчёта вычисляется так: 5512 * порядковый_номер_отсчёта / 3000<br>
<br>
Затем подставляем эту формулу вместо символа f в формулу перевода в мел-шкалу и получаем:<br>
<br>
m = 2595 * log10( 1 + ( 5512 * порядковый_номер_отсчёта / 3000 ) / 700 )<br>
<br>
Это пока что верно или уже здесь напортачил? :)]]></description>
        <author>Black*Eternal</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3183185</guid>
        <pubDate>Thu, 02 Aug 2012 19:57:33 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3183185</link>
        <description><![CDATA[zamir: Треугольное окно относится к преобразованиию фурье <br>Для этого преобразования это не лучшее решение<br>После пребразования вы получите спектр<br>значения после преобразования это не совсем частоты это отсчеты частот<br>А в формулу надо подставлять именно частоты<br>для начала просто получите спектр и попробуйте его сжать по шкале частоты]]></description>
        <author>zamir</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3183103</guid>
        <pubDate>Thu, 02 Aug 2012 16:58:20 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3183103</link>
        <description><![CDATA[Black*Eternal: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=234708&view=findpost&p=3182497'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>zamir &#064; <time class="tag-quote__quoted-time" datetime="2012-08-02T05:43:46+00:00">02.08.12, 05:43</time></span><div class='quote '>сначала по формуле m = 2595 * log10(1 + f./700) делате mel шкалу - визуально получаете треугольники</div></div><br>
f - это мои частоты после FFT? 1hz, 2hz, 3hz...? :) Тогда получается просто логарифм без треугольников :)<br>
<br>
<img class='tag-img' src='http://s017.radikal.ru/i444/1208/07/2890e0e108fd.png' alt='user posted image'><br>
<br>
Если же в формулу подставлять мои результаты из FFT:<br>
m = 2595 * log10(1 + FFT[i]/700) <br>
<br>
то получается просто немного &quot;сглаженный&quot; тот же самый график...<br>
<br>
Проблема у меня вот в чём: У меня есть формула треугольного окна: <a class='tag-url' href='http://upload.wikimedia.org/wikipedia/en/math/5/7/c/57c36c256e4d37a8bb2fc14e8418a54a.png' target='_blank'>http://upload.wikimedia.org/wikipedia/en/m...14e8418a54a.png</a><br>
Я могу пробежаться по FFT (сигналу после FFT) разбить его на определённое количество окон (можно с перекрытиями) и в каждом домножить сигнал на треугольное окно. Но проблема в том, что шкала от этого не измениться по ОХ, то бишь - размер каждого окна будет одинаковый, а на этих графиках (как и на Вашем), размеры окон разные, увеличивающиеся к концу. Не понимаю как это достигается...]]></description>
        <author>Black*Eternal</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3182497</guid>
        <pubDate>Thu, 02 Aug 2012 05:43:46 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3182497</link>
        <description><![CDATA[zamir: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Я не понимаю как выбирается количество вот этих контейнеров</div></div><br>
можно выбирать на глаз (для начала придётся научиться читать спектрограммы)<br>
можно использовать устоявшиеся значения<br>
31 для сигнала sample rate 8000<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>и какая вообще формула этой гребёнки... </div></div><br>
сначала по формуле m = 2595 * log10(1 + f./700) делате mel шкалу - визуально получаете треугольники<br>
обходите каждый треуголник и умножаете частоту на коэфициент в треугольнике соответвествующей этой частоте и складываете в контейнер<br>
<br>
задача не сложная, интерпритируя иначе:<br>
надо уменьшить высоту картинки - но не линейно а по mel шкале]]></description>
        <author>zamir</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3182415</guid>
        <pubDate>Wed, 01 Aug 2012 19:18:25 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3182415</link>
        <description><![CDATA[Black*Eternal: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=234708&view=findpost&p=3182265'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>zamir &#064; <time class="tag-quote__quoted-time" datetime="2012-08-01T12:32:38+00:00">01.08.12, 12:32</time></span><div class='quote '>Для наглядности<br>
<br>
Вот спектр<br>
<img class='tag-img' src='http://z1.prolink.ru/download/demo_spectrum.png' alt='user posted image'><br>
<br>
Вот спектр после прохождения mel фильтра с 20ю контейнерами<br>
<img class='tag-img' src='http://z1.prolink.ru/download/demo_mel_spectrum.png' alt='user posted image'><br>
<br>
Вот спектр после прохождения mel фильтра с 40 контейнерами<br>
<img class='tag-img' src='http://z1.prolink.ru/download/demo_mel_spectrum40.png' alt='user posted image'><br>
<br>
Сравните как выглядят выскоие частоты</div></div><br>
Я не понимаю как выбирается количество вот этих контейнеров и какая вообще формула этой гребёнки... :(]]></description>
        <author>Black*Eternal</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3182265</guid>
        <pubDate>Wed, 01 Aug 2012 12:32:38 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3182265</link>
        <description><![CDATA[zamir: Для наглядности<br>
<br>
Вот спектр<br>
<img class='tag-img' src='http://z1.prolink.ru/download/demo_spectrum.png' alt='user posted image'><br>
<br>
Вот спектр после прохождения mel фильтра с 20ю контейнерами<br>
<img class='tag-img' src='http://z1.prolink.ru/download/demo_mel_spectrum.png' alt='user posted image'><br>
<br>
Вот спектр после прохождения mel фильтра с 40 контейнерами<br>
<img class='tag-img' src='http://z1.prolink.ru/download/demo_mel_spectrum40.png' alt='user posted image'><br>
<br>
Сравните как выглядят выскоие частоты]]></description>
        <author>zamir</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3181907</guid>
        <pubDate>Wed, 01 Aug 2012 06:22:38 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3181907</link>
        <description><![CDATA[zamir: Смотрите рисунок сверху<br>Это фильтр гребёнка<br>Каждый треугольник - это одно значение<br>Поэтому если у вас значений будет 512 или 1024, то проходя через этот фильто вы всё равно получите столько значенией - сколько изображено треугольников<br><br>p.s.<br>дискретное преобразование по косинусу - это следующий шаг для сжания энегрии и сокращения размерности]]></description>
        <author>zamir</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3181515</guid>
        <pubDate>Tue, 31 Jul 2012 11:42:12 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3181515</link>
        <description><![CDATA[Black*Eternal: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=234708&view=findpost&p=3181204'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>zamir &#064; <time class="tag-quote__quoted-time" datetime="2012-07-31T06:20:52+00:00">31.07.12, 06:20</time></span><div class='quote '>в результате при выборке например 512 значений фурье для определения частоты, после прохождения через mel фильтр, получим например около 40 значений</div></div><br>
Я как раз вот этого момента и не понимаю :)<br>
У нас есть 512 значений. Изначально мы переводим наши частоты в шкалу Мела, по логарифмической формуле как указано в Вашей статье:<br>
m = 2595 * log10(1 + f./700);<br>
<br>
После этого у нас же опять получается 512 значений. Далее мы применяем к этим 512 значениям - обратное косинусное преобразование? (по формуле: <br>
<a class='tag-url' href='http://www1.icsi.berkeley.edu/Speech/docs/HTKBook3.2/node64_mn.html' target='_blank'>http://www1.icsi.berkeley.edu/Speech/docs/.../node64_mn.html</a> )<br>
40 - это и есть у нас NUMCHANS (N) из нашей формулы?]]></description>
        <author>Black*Eternal</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3181204</guid>
        <pubDate>Tue, 31 Jul 2012 06:20:52 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3181204</link>
        <description><![CDATA[zamir: mel шкала выглядет так:<br>
<br>
<img class='tag-img' src='http://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/f2010/np276_ksp55_aj355/np276_ksp55_aj355/index_files/image010.jpg' alt='user posted image'><br>
<br>
зависимость шкалы - логарифмическая<br>
в результате при выборке например 512 значений фурье для определения частоты, после прохождения через mel фильтр, получим например около 40 значений<br>
если затем отобразить полученный спектр, то визуально распределение энергии будет выглядеть гораздо нагляднее чем в чистном спектре после преборазования фурье<br>
всё заключается в том что чем выше частота тем больше может быть разброс по частоте<br>
человеческое ухо адаптировалось к этому и не улавливает разброс в высоких частотах<br>
mel фильтр эмулирует восприятие сигнала человеческим ухом<br>
<br>
<a class='tag-url' href='http://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/f2010/np276_ksp55_aj355/np276_ksp55_aj355/index.html' target='_blank'>http://people.ece.cornell.edu/land/courses...j355/index.html</a>]]></description>
        <author>zamir</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3181093</guid>
        <pubDate>Mon, 30 Jul 2012 19:30:52 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=3181093</link>
        <description><![CDATA[Black*Eternal: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=234708&view=findpost&p=1941992'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>goodass &#064; <time class="tag-quote__quoted-time" datetime="2008-04-29T10:15:11+00:00">29.04.08, 10:15</time></span><div class='quote '>2) Спектральные коэффициенты усредняются с использованием параметра количества каналов фильтра, которые представляют из себя гребенку треугольных окон, расположенных на мел-шкале (обычно треугольные фильтры перекрывают область частот от нуля и вплоть до частоты Найквиста ).</div></div><br>
Не очень понятен данный шаг... Под гребёнку треугольных окон нашёл формулу: <a class='tag-url' href='http://en.wikipedia.org/wiki/Window_function#Triangular_windows' target='_blank'>http://en.wikipedia.org/wiki/Window_functi...angular_windows</a><br>
сама формула: <a class='tag-url' href='http://upload.wikimedia.org/wikipedia/en/math/5/7/c/57c36c256e4d37a8bb2fc14e8418a54a.png' target='_blank'>http://upload.wikimedia.org/wikipedia/en/m...14e8418a54a.png</a><br>
<br>
а как далее её применять? На первом шаге мы берём ФФТ от некоторого сигнала. Получаем распределение частот. Далее мы проходим окнами с перекрытиями по нему или нет? Откуда берётся понятие &quot;количество каналов фильтра&quot;? Что это за каналы?)]]></description>
        <author>Black*Eternal</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=2877543</guid>
        <pubDate>Sun, 17 Apr 2011 15:21:07 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=2877543</link>
        <description><![CDATA[Dj_SheLL: На кадры.]]></description>
        <author>Dj_SheLL</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=2877503</guid>
        <pubDate>Sun, 17 Apr 2011 14:36:00 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=2877503</link>
        <description><![CDATA[Lohoboishe: Я, кажется, поторопился с выводами. Ответьте пожалуйста на вопрос: мы посылаем в mfcc(ref double[] signal) весь исходный сигнал или разбиваем его на кадры и посылаем туда? Просто я в литературе и на форуме прочитал, что в итоге должен получиться не один массив(из 12 элементов) коэффициентов кепстра для всего входного сигнала, а якобы мы должны получить массив кепстров для каждого кадра входящего сигнала. Как правильно?]]></description>
        <author>Lohoboishe</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=2875830</guid>
        <pubDate>Thu, 14 Apr 2011 12:09:15 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=2875830</link>
        <description><![CDATA[Dj_SheLL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=234708&view=findpost&p=2875818'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Lohoboishe &#064; <time class="tag-quote__quoted-time" datetime="2011-04-14T11:57:48+00:00">14.04.11, 11:57</time></span><div class='quote '>Что касается кепстров, то у меня они получились в интервале [2;-1]</div></div><br>
А вообще какой диапозон должен быть? :) <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=234708&view=findpost&p=2875818'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Lohoboishe &#064; <time class="tag-quote__quoted-time" datetime="2011-04-14T11:57:48+00:00">14.04.11, 11:57</time></span><div class='quote '>У меня вопрос: перед тем, как записывать звук, мне нужно указать AudioFrameSize. Я так понимаю, что в этот параметр записывается сколько милисекунд будет длится каждый сэмпл. Вляет ли этот параметр на значение кепстров и если да, то сколько мс там указывать?</div></div><br>
Ну все берут от 20 до 30.Насчёт влияния-не знаю.]]></description>
        <author>Dj_SheLL</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=2875818</guid>
        <pubDate>Thu, 14 Apr 2011 11:57:48 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=2875818</link>
        <description><![CDATA[Lohoboishe: Насчет +/- &quot;бесконечности&quot; ничего не могу посоветовать) Я проверил алгоритм и сравнил с теми, которые реализованы на других языках и лежат на просторах интернета. В целом он не вызывает подозрений. <br>
Что касается кепстров, то у меня они получились в интервале [2;-1]. NAudio я не использовал.<br>
У меня вопрос: перед тем, как записывать звук, мне нужно указать AudioFrameSize. Я так понимаю, что в этот параметр записывается сколько милисекунд будет длится каждый сэмпл. Вляет ли этот параметр на значение кепстров и если да, то сколько мс там указывать?]]></description>
        <author>Lohoboishe</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=2875763</guid>
        <pubDate>Thu, 14 Apr 2011 11:00:50 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=2875763</link>
        <description><![CDATA[Dj_SheLL: Внешне всё вроде реализованно верно,НО&#33;<br>Я так и не добился получения кепстров-у меня при вычислениях +/- &quot;бесконечность&quot; получается.Проблемы с длинной чисел.<br>Если что, данные я получал с буфера с помощью NAudio.По идее с других библиотек данные не должны отличаться ни чем&#33;<br>Так что надо допиливать класс под &quot;народные нужды&quot;,чтобы всем пригодилось...либо пользоваться другими инструментами&#33;]]></description>
        <author>Dj_SheLL</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=2874613</guid>
        <pubDate>Tue, 12 Apr 2011 22:33:05 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=2874613</link>
        <description><![CDATA[Lohoboishe: Dj_SheLL, спасибо за информацию. Поделись пожалуйста впечатлениями от использования класса MFCC. Просто я начал писать свой класс, но столкнулся с некоторыми сложностями, так что возможно буду использовать тот, который ты нашел. Как вообще проверить, правильные ли результаты выдает MFCC или нет?]]></description>
        <author>Lohoboishe</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=2873008</guid>
        <pubDate>Mon, 11 Apr 2011 07:26:34 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=2873008</link>
        <description><![CDATA[Dj_SheLL: Насчёт <strong class='tag-b'>БПФ</strong>.<br>
Там вроде и прямое и обратное можно.<br>
Брал вот этот модуль:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">/// &#60;license&#62;</div><div class="code_line">/// This is a port of the SciMark2a Java Benchmark to C# by</div><div class="code_line">/// Chris Re (cmr28@cornell.edu) and Werner Vogels (vogels@cs.cornell.edu)</div><div class="code_line">/// </div><div class="code_line">/// For details on the original authors see http://math.nist.gov/scimark2</div><div class="code_line">/// </div><div class="code_line">/// This software is likely to burn your processor, bitflip your memory chips</div><div class="code_line">/// anihilate your screen and corrupt all your disks, so you it at your</div><div class="code_line">/// own risk.</div><div class="code_line">/// &#60;/license&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">using System;</div><div class="code_line">&nbsp;</div><div class="code_line">namespace SciMark2</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/// &#60;summary&#62;Computes FFT&#39;s of complex, double precision data where n is an integer power of 2.</div><div class="code_line">&nbsp;&nbsp; &nbsp;/// This appears to be slower than the Radix2 method,</div><div class="code_line">&nbsp;&nbsp; &nbsp;/// but the code is smaller and simpler, and it requires no extra storage.</div><div class="code_line">&nbsp;&nbsp; &nbsp;/// &#60;/P&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/// &#60;/summary&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/// </div><div class="code_line">&nbsp;&nbsp; &nbsp;/// &#60;author&#62; </div><div class="code_line">&nbsp;&nbsp; &nbsp;/// Bruce R. Miller bruce.miller@nist.gov,</div><div class="code_line">&nbsp;&nbsp; &nbsp;/// Derived from GSL (Gnu Scientific Library), </div><div class="code_line">&nbsp;&nbsp; &nbsp;/// GSL&#39;s FFT Code by Brian Gough bjg@vvv.lanl.gov</div><div class="code_line">&nbsp;&nbsp; &nbsp;/// &#60;/author&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class FFT</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public static double num_flops(int N)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double Nd = (double) N;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double logN = (double) log2(N);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return (5.0 * Nd - 2) * logN + 2 * (Nd + 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// &#60;summary&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// Compute Fast Fourier Transform of (complex) data, in place.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// &#60;/summary&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public static void &nbsp;transform(double[] data)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;transform_internal(data, - 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// &#60;summary&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// Compute Inverse Fast Fourier Transform of (complex) data, in place.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// &#60;/summary&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public static void &nbsp;inverse(double[] data)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;transform_internal(data, + 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Normalize</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int nd = data.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int n = nd / 2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double norm = 1 / ((double) n);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i &#60; nd; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;data[i] *= norm;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// &#60;summary&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// Accuracy check on FFT of data. Make a copy of data, Compute the FFT, then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// the inverse and compare to the original. &nbsp;Returns the rms difference.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// &#60;/summary&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public static double test(double[] data)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int nd = data.Length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Make duplicate for comparison</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double[] copy = new double[nd];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Array.Copy(data, 0, copy, 0, nd);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Transform &amp; invert</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;transform(data);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inverse(data);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Compute RMS difference.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double diff = 0.0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i &#60; nd; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double d = data[i] - copy[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;diff += d * d;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Math.Sqrt(diff / nd);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// &#60;summary&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// Make a random array of n (complex) elements. </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/// &#60;/summary&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public static double[] makeRandom(int n)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int nd = 2 * n;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double[] data = new double[nd];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.Random r = new System.Random();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (int i = 0; i &#60; nd; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;data[i] = r.NextDouble();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return data;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;protected internal static int log2(int n)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int log = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (int k = 1; k &#60; n; k *= 2, log++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (n != (1 &#60;&#60; log))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new ApplicationException(&quot;FFT: Data length is not a power of 2!: &quot; + n);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return log;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;protected internal static void &nbsp;transform_internal(double[] data, int direction)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (data.Length == 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return ;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int n = data.Length / 2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (n == 1)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return ;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Identity operation!</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int logn = log2(n);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* bit reverse the input data for decimation in time algorithm */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bitreverse(data);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* apply fft recursion */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* this loop executed log2(N) times */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (int bit = 0, dual = 1; bit &#60; logn; bit++, dual *= 2)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double w_real = 1.0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double w_imag = 0.0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double theta = 2.0 * direction * Math.PI / (2.0 * (double) dual);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double s = Math.Sin(theta);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double t = Math.Sin(theta / 2.0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double s2 = 2.0 * t * t;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* a = 0 */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (int b = 0; b &#60; n; b += 2 * dual)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int i = 2 * b;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int j = 2 * (b + dual);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double wd_real = data[j];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double wd_imag = data[j + 1];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;data[j] = data[i] - wd_real;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;data[j + 1] = data[i + 1] - wd_imag;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;data[i] += wd_real;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;data[i + 1] += wd_imag;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* a = 1 .. (dual-1) */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (int a = 1; a &#60; dual; a++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* trignometric recurrence for w-&#62; exp(i theta) w */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double tmp_real = w_real - s * w_imag - s2 * w_real;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double tmp_imag = w_imag + s * w_real - s2 * w_imag;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;w_real = tmp_real;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;w_imag = tmp_imag;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (int b = 0; b &#60; n; b += 2 * dual)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int i = 2 * (b + a);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int j = 2 * (b + a + dual);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double z1_real = data[j];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double z1_imag = data[j + 1];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double wd_real = w_real * z1_real - w_imag * z1_imag;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double wd_imag = w_real * z1_imag + w_imag * z1_real;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;data[j] = data[i] - wd_real;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;data[j + 1] = data[i + 1] - wd_imag;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;data[i] += wd_real;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;data[i + 1] += wd_imag;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;protected internal static void &nbsp;bitreverse(double[] data)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* This is the Goldrader bit-reversal algorithm */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int n = data.Length / 2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int nm1 = n - 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int i = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int j = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (; i &#60; nm1; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//int ii = 2*i;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int ii = i &#60;&#60; 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//int jj = 2*j;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int jj = j &#60;&#60; 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//int k = n / 2 ;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int k = n &#62;&#62; 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (i &#60; j)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double tmp_real = data[ii];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double tmp_imag = data[ii + 1];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;data[ii] = data[jj];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;data[ii + 1] = data[jj + 1];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;data[jj] = tmp_real;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;data[jj + 1] = tmp_imag;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while (k &#60;= j)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//j = j - k ;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;j -= k;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//k = k / 2 ; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;k &#62;&#62;= 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;j += k;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Dj_SheLL</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=2872667</guid>
        <pubDate>Sun, 10 Apr 2011 12:02:34 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=2872667</link>
        <description><![CDATA[Dj_SheLL: Нашёл на просторах интернета вот такой класс MFCC&#33;<br>
Каково мнение гуру?<br>
По идее,я посмотрел,там есть всё&#33;И <strong class='tag-b'>БПФ</strong>,и <strong class='tag-b'>окно Хемминга</strong>,и <strong class='tag-b'>логарифмирование</strong> и <strong class='tag-b'>DCT</strong> и на выходе массив <strong class='tag-b'>кепстров</strong>&#33;На входе должен быть массив double[].Я пока провожу &quot;эксперимент&quot;...<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">using System;</div><div class="code_line">using System.Collections.Generic;</div><div class="code_line">using System.Text;</div><div class="code_line">&nbsp;</div><div class="code_line">namespace speakerRecognition</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;class Mfcc</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;static int my_rint(double x)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (2 * x == (double)Math.Round(2 * x))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;x += 0.0001;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return ((int)Math.Round(x));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;static public double[] mfcc(ref double[] signal)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double lowestFrequency = 133.3333;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double linearFilters = 13;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double linearSpacing = 66.66666666;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double logFilters = 27;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double logSpacing = 1.0711703;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double fftSize = 512;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double cepstralCoefficients = 13;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double windowSize = 256;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double samplingRate = 44100;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double totalFilters;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double[] mfccFilterWeights;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double[] freqs;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double[] triangleHeight;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double[] lower;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double[] upper;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double[] center;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double[] fftFreqs;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double[] hamWindow;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double[] mfccDCTMatrix;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double[] preEmphasized;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double first;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double last;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double[] fftData;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double[] empreinte;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double maxi;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double[] earMag; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double[] ceps; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double loga; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double windowStep; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double cols; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double frameRate = 100;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double[] result;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int i, j, k;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;preEmphasized = new double[1024];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;totalFilters = linearFilters + logFilters;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;freqs = new double[(int)totalFilters + 2];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (i = 0; i &#60; linearFilters; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;freqs[i] = lowestFrequency + i * linearSpacing;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (i = (int)linearFilters; i &#60; (int)totalFilters + 2; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;freqs[i] = freqs[(int)linearFilters - 1] * Math.Pow(logSpacing, i - linearFilters + 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;lower = new double[(int)totalFilters];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;upper = new double[(int)totalFilters];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;center = new double[(int)totalFilters];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;triangleHeight = new double[(int)totalFilters];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fftData = new double[(int)fftSize];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (i = 0; i &#60; (int)totalFilters; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;lower[i] = freqs[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (i = 1; i &#60; (int)totalFilters + 1; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;center[i - 1] = freqs[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (i = 2; i &#60; (int)totalFilters + 2; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;upper[i - 2] = freqs[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hamWindow = new double[(int)windowSize];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mfccFilterWeights = new double [(int)(totalFilters * fftSize)];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (i = 0; i &#60; totalFilters; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;triangleHeight[i] = 2 / (upper[i] - lower[i]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fftFreqs = new double[(int)fftSize];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (i = 0; i &#60; fftSize; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fftFreqs[i] = (i / fftSize) * samplingRate;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (i = 0; i &#60; totalFilters; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (j = 0; j &#60; (int)fftSize; j++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ((fftFreqs[j] &#62; lower[i]) &amp;&amp; (fftFreqs[j] &#60;= center[i]))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mfccFilterWeights[(int)fftSize * i + j] = triangleHeight[i] * (fftFreqs[j] - lower[i]) / (center[i] - lower[i]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ((fftFreqs[j] &#62; center[i]) &amp;&amp; (fftFreqs[j] &#60; upper[i])) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mfccFilterWeights[(int)fftSize * i + j] = (triangleHeight[i] * (fftFreqs[j] - lower[i]) / (center[i] - lower[i])) + (triangleHeight[i] * (upper[i] - fftFreqs[j]) / (upper[i] - center[i]));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (i = 0; i &#60; windowSize; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hamWindow[i] = 0.54 - 0.46 * Math.Cos(2 * Math.PI * i / windowSize);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mfccDCTMatrix = new double[(int)(cepstralCoefficients * totalFilters)];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (i = 0; i &#60; cepstralCoefficients; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (j = 0; j &#60; totalFilters; j++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mfccDCTMatrix[j * (int)cepstralCoefficients + i] = 1 / Math.Sqrt(totalFilters / 2) * Math.Cos(i * (2 * j + 1) * Math.PI / 2 / totalFilters);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (i = 0; i &#60; totalFilters; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mfccDCTMatrix[i * (int)cepstralCoefficients] *= 1 / Math.Sqrt(2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (i = 1; i &#60; 1024; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;preEmphasized[i] = signal[i] + signal[i - 1] * -0.97;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;preEmphasized[0] = signal[0];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;earMag = new double[(int)totalFilters];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;windowStep = samplingRate / frameRate;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cols = (int)((1024 - windowSize) / windowStep);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ceps = new double[(int)(sizeof(double) * cols * linearFilters)];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (i = 0; i &#60; cols; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;first = i * windowStep + 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;last = first + windowSize - 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (j = 0; j &#60; fftSize; j++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fftData[j] = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (j = 0; j &#60; windowSize; j++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fftData[j] = preEmphasized[(int)my_rint(first + j - 1)] * &nbsp;hamWindow[j];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double[] fftMag = FourierTransform.FFT(ref signal);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (j = 0; j &#60; totalFilters; j++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loga = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (k = 0; k &#60; fftSize; k++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loga += fftMag[k] * mfccFilterWeights[k + j * (int)fftSize];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;earMag[j] = Math.Log10(loga);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (j = 0; j &#60; linearFilters; j++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loga = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (k = 0; k &#60; totalFilters; k++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loga +=</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;earMag[k] * mfccDCTMatrix[j + k * (int)linearFilters];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ceps[j + i * (int)linearFilters] = loga;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;empreinte = new double[12];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (i = 1; i &#60; 13; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;empreinte[i - 1] = (ceps[i] + ceps[i + 13] + ceps[i + 26] + ceps[i + 39] + ceps[i + 52] + ceps[i + 65]);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;maxi = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (i = 0; i &#60; 12; i++) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (maxi * maxi &#60; empreinte[i] * empreinte[i]) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;maxi = empreinte[i]; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (i = 0; i &#60; 12; i++) empreinte[i] = (empreinte[i] / Math.Abs(maxi)) * 2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return empreinte;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>Dj_SheLL</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=2846768</guid>
        <pubDate>Sun, 06 Mar 2011 08:52:05 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=2846768</link>
        <description><![CDATA[evgenled: Доброго всем дня.<br>
Вопрос знатокам HTK по MFCC: <br>
код написанный с использованием IPP и HList выдают разные результаты, с чем это может быть связано?<br>
IPP:<br>
01: -29.003057<br>
02: -20.139099<br>
03: -4.3270502<br>
04: -13.346766<br>
05: -18.708612<br>
06: -5.8949571<br>
07: 31.116928<br>
08: 27.441202<br>
09: 21.219500<br>
10: 39.831188<br>
11: 13.616776<br>
12: -3.3898118<br>
 E: 9.6506577<br>
<br>
HList:<br>
------------------------------------------------- Source: ru_0001.wav --------------------------------------------------<br>
  Sample Bytes:  2        Sample Kind:   WAVEFORM<br>
  Num Comps:     1        Sample Period: 62.5 us<br>
  Num Samples:   257278   File Format:   WAV<br>
-------------------------------------------------------- Target --------------------------------------------------------<br>
  Sample Bytes:  52       Sample Kind:   MFCC_E<br>
  Num Comps:     13       Sample Period: 10000.0 us<br>
  Num Samples:   1606     File Format:   HTK<br>
------------------------------------------------ Observation Structure -------------------------------------------------<br>
x:      MFCC-1  MFCC-2  MFCC-3  MFCC-4  MFCC-5  MFCC-6  MFCC-7  MFCC-8  MFCC-9 MFCC-10 MFCC-11 MFCC-12       E<br>
---------------------------------------------------- Samples: 0-&gt;0 -----------------------------------------------------<br>
0:     -10.925 -10.630  -1.796  -8.355 -11.068  -5.632  19.115  14.508  12.260  21.412   7.453  -1.746   9.651<br>
--------------------------------------------------------- END ----------------------------------------------------------<br>
<br>
config:<br>
# Coding parameters<br>
SOURCEFORMAT = WAV<br>
TARGETKIND   = MFCC_E<br>
TARGETRATE   = 100000.0<br>
WINDOWSIZE   = 250000.0<br>
USEHAMMING   = T<br>
PREEMCOEF    = 0.97<br>
NUMCHANS     = 24<br>
CEPLIFTER    = 22<br>
NUMCEPS      = 12<br>
ENORMALISE   = F<br>
LOFREQ       = 100<br>
HIFREQ       = 4000<br>
ESCALE       = 1.0<br>
SILFLOOR     = 50.0<br>
USEPOWER     = T<br>
<br>
код:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp;/* Initialize the structures */</div><div class="code_line">&nbsp;&nbsp; &nbsp;ippsMelFBankInitAlloc_32f(&amp;fbank, /* return the structure pointer */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&amp;fft_order, /* return the FFT length */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;400, &nbsp; &nbsp;/* 25ms window/512 point FFT */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;16000, &nbsp;/* sample rate */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;100, &nbsp; &nbsp;/* lowest frequency of interest */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;4000, &nbsp; /* highest frequency of interest */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;24, &nbsp; &nbsp; /* number of filter banks */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;1127, /* mel-scale factor 1 */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;700, &nbsp; &nbsp;/* mel-scale factor 2 */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;(IppMelMode)(IPP_FBANK_MELWGT | IPP_POWER_SPECTRUM));</div><div class="code_line">&nbsp;&nbsp; &nbsp;ippsDCTLifterInitAlloc_32f(&amp;dctl, /* return the structure pointer */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;24, /* filter bank channels */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;12, /* number of MFCC coefficients */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;22, /* liftering */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;1.0f); /* no scaling */</div><div class="code_line">&nbsp;&nbsp; &nbsp;fft_len=1&#60;&#60;fft_order;</div><div class="code_line">&nbsp;&nbsp; &nbsp;frame_buffer=ippsMalloc_32f(fft_len);</div><div class="code_line">&nbsp;&nbsp; &nbsp;fbank_buffer=ippsMalloc_32f(24);</div><div class="code_line">&nbsp;&nbsp; &nbsp;tempmfccs=ippsMalloc_32f(13*(sample_num-400+160)/160);</div><div class="code_line">&nbsp;&nbsp; &nbsp;mfcc_cur=tempmfccs;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* Calculate MFCC features */</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (i=j=0; i+WindowSize&#60;=sample_num; i+=StepSize,mfcc_cur+=13,j++) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/* Organize the input wave data into a frame */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ippsCopyWithPadding_32f(&amp;samples[i],400,frame_buffer,fft_len);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ippsDotProd_32f(frame_buffer,frame_buffer,fft_len,&amp;LogEnergy);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/* Pre-emphasize the input signal with factor 0.97 */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ippsPreemphasize_32f(frame_buffer,400,0.97f);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;frame_buffer[0]*=(1.0f-0.97f);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/* Add the hamming window to the input signal */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ippsWinHamming_32f_I(frame_buffer,WindowSize);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/* Perform the filter bank analysis */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ippsEvalFBank_32f(frame_buffer,fbank_buffer,fbank);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ippsThreshold_LTVal_32f_I(fbank_buffer, 24, 1.0f, 1.0f);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ippsLn_32f_I(fbank_buffer, 24); </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/* Perform the DCT analysis and liftering */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ippsDCTLifter_32f(fbank_buffer,mfcc_cur,dctl);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mfcc_cur[12] = (float) log ((double) LogEnergy);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* Normalize log energy */</div><div class="code_line">&nbsp;&nbsp; &nbsp;//ippsNormEnergy_32f(tempmfccs+12,13,(sample_num-400+160)/160,50.0f,1.0f);</div></ol></div></div></div></div>]]></description>
        <author>evgenled</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=1947103</guid>
        <pubDate>Mon, 05 May 2008 15:13:49 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=1947103</link>
        <description><![CDATA[privetk: спасибо огромное]]></description>
        <author>privetk</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=1946994</guid>
        <pubDate>Mon, 05 May 2008 13:47:43 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=1946994</link>
        <description><![CDATA[nsh: Хм, ну попробую донести мысль всё-таки.<br><br>Вычисленные коэффициенты MFCC зависят от большого числа параметров - числа фильтров, формы фильтров, числа точек в спектре, основания логарифма и т.д. Поэтому с вероятностью 100% две различные реализации MFCC дадут совершенно различные числа. Поэтому рекомендуется перейти по ссылке http://htk.eng.cam.ac.uk, зарегистрироваться там, и скачать уже скомпилированные под Windows приложения, в частности вычисляющие MFCC. Документация к HTK на русском языке доступна здесь:<br><br>http://aprodeus.narod.ru/mmedia.htm#Rech<br><br>Используя HCopy и HList для вычисления коэффициентов и сверяясь с исходым кодом HTK возможно проверить работу приложения.]]></description>
        <author>nsh</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=1946818</guid>
        <pubDate>Mon, 05 May 2008 12:02:56 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=1946818</link>
        <description><![CDATA[privetk: я не смог разобраться в логических переходах между сообщениями в этой ветке.<br><br>если я правильно понял, http://htk.eng.cam.ac.uk/  - на этом сайте я могу скачать звуковые фрагменты с выделенным MFCC?]]></description>
        <author>privetk</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=1946470</guid>
        <pubDate>Mon, 05 May 2008 08:29:35 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=1946470</link>
        <description><![CDATA[nsh: Я Вам настойчиво советую внимательно прочитать предыдущую ветку на эту тему:<br>
<br>
<a class='tag-url' href='http://forum.sources.ru/index.php?showtopic=226032' target='_blank'>MFCC how????</a>]]></description>
        <author>nsh</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=1946389</guid>
        <pubDate>Mon, 05 May 2008 07:31:46 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=1946389</link>
        <description><![CDATA[privetk: Хочу протестировать правильность нахождения мел-частотных кепстральных коэффициентов в моей программе.<br><br>Может кто-нибудь выложить  кусок звукового сигнала с выделенными из него MFCC?]]></description>
        <author>privetk</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=1942090</guid>
        <pubDate>Tue, 29 Apr 2008 11:57:13 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=1942090</link>
        <description><![CDATA[privetk: спасибо]]></description>
        <author>privetk</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=1941992</guid>
        <pubDate>Tue, 29 Apr 2008 10:15:11 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=1941992</link>
        <description><![CDATA[goodass: формула обратного косинусоидального преобразования <a class='tag-url' href='http://www.icsi.berkeley.edu/speech/docs/HTKBook3.2/node64_mn.html' target='_blank'>тут</a><br>
расскажу в двух словах один из способов, как они высчитываются<br>
1) Сигнал переводится в спектральную область с помощью БПФ (быстрого преобразоавания Фурье)<br>
2) Спектральные коэффициенты усредняются с использованием параметра количества каналов фильтра, которые представляют из себя гребенку треугольных окон, расположенных на мел-шкале (обычно треугольные фильтры перекрывают область частот от нуля и вплоть до частоты Найквиста ). <br>
3) Мел-частотные кепстральные коэффициенты  вычисляются при помощи обратного косинусного преобразования (см. формулу по ссылке).]]></description>
        <author>goodass</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=1941847</guid>
        <pubDate>Tue, 29 Apr 2008 08:08:50 +0000</pubDate>
        <title>MFCC</title>
        <link>https://forum.sources.ru/index.php?showtopic=234708&amp;view=findpost&amp;p=1941847</link>
        <description><![CDATA[privetk: пожалуйста, дайте формулы по которым считается MFCC.]]></description>
        <author>privetk</author>
        <category>Речевые Технологии</category>
      </item>
	
      </channel>
      </rss>
	