Важная информация

User Tag List

Страница 15 из 73 ПерваяПервая ... 111213141516171819 ... ПоследняяПоследняя
Показано с 141 по 150 из 727

Тема: EmuStudio-ZX

  1. #141
    ZEK
    Гость

    По умолчанию

    скрин
    Последний раз редактировалось ZEK; 22.02.2014 в 20:02.

  2. #142

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,384
    Спасибо Благодарностей отдано 
    1,699
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от ZEK Посмотреть сообщение
    скрин
    В данном случае работает потому, что 'случайно' параметры кратны друг другу.
    при 50Гц 48000/50 = 960 (а это 480*2),
    ну и при 100Гц 48000/100 = 480.

    Т.е. все кратно дискретности буфера на Win7.

    ---------- Post added at 03:24 ---------- Previous post was at 02:25 ----------

    Цитата Сообщение от psb Посмотреть сообщение
    вот код прототипа-симулятора. 2я колонка показывает реальное число сэмплов в буфере, оно должно стабилизироваться.
    Попробовал понять, все-таки ничего не понял)
    Попробуй изобразить на си, если не сложно.

  3. #143

    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Попробуй изобразить на си, если не сложно.
    блин, ну я же уже и словами описывал... что именно там не понятно? функции (def) должны быть понятны.

    # filter 1
    fff.append(t2-t1)
    fff=fff[-200:]
    avg=float(sum(fff))/len(fff)

    fff - массив из чисел. append добавляет в него новое число, fff=fff[-200:] оставляет последние 200 чисел, avg - сумма всех чисел делится на кол-во чисел. второй фильтр - то же самое.

    в регуляторе чистая математика. где не понятно?

  4. #144

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,384
    Спасибо Благодарностей отдано 
    1,699
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от psb Посмотреть сообщение
    блин, ну я же уже и словами описывал... что именно там не понятно?
    Вот такой вот синтаксис, что мне не понятно)

    Ладно, попробую в меру своего понимания перевести на Си, если тебе сложно)

  5. #145

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,384
    Спасибо Благодарностей отдано 
    1,699
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от psb Посмотреть сообщение
    в регуляторе чистая математика. где не понятно?
    Набросал на си твою програму, как я ее понял:

    Код:
    // PSB-Test.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include "math.h"
    
    #define min(a, b)  (((a) < (b)) ? (a) : (b)) 
    #define max(a, b)  (((a) > (b)) ? (a) : (b)) 
    
    #define	DIMLEN	200
    
    float	QUANT = 882;		// рассчетное число сэмплов в прерывание
    float	RES = 480;			// разрешение указателей звукового буфера
    
    float	bufpos = 0;			// позиция буфера записи
    float	playpos = 0;		// позиция буфера чтения
    
    float	FFF[DIMLEN];		// фильтр 1
    float	FFF2[DIMLEN];		// фильтр 2
    float	delta = 0;			// добавка к рассчетному числу сэмплов
    float	I = 0;				// сост. интегратора
    float	avg = 0;			// среднее зн. числа сэмплов
    long	len = 1;			// начальная длина массива
    
    
    void	render_frame(float n)					// put data to buffer
    {
    	bufpos = bufpos + long(n + 0.5);
    }
    
    void	play_frame(float n)
    {
    	n = n - 5 + rand() * 10.0 / RAND_MAX;		// add some noise to samples number
    	playpos = playpos + n;
    	if (bufpos < playpos)
    		printf("Underrun!\n");
    }
    
    float	get_pos(void)							// get rounded position
    {
    	return((long)((long)playpos / RES) * RES);
    }
    
    float	lim(float v, float l, float h)			// limit value from l to h
    {
    	return(min(h, max(l, v)));
    }
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	long j, k;
    	
    	float t1, t2, sum, err, P, smps;
    		
    
    	printf("Test!\n");
    
    	render_frame(RES);							// пребуфферинг
    
    	for (j=0; j<1050; j++)						// заполняем" буфер, проигрыванием, вычисляем изменение указателя
    	{
    		t1 = get_pos();							//
    		render_frame(QUANT + delta);			//
    		play_frame(QUANT);						//
    		t2 = get_pos();							//
    		
    		printf("avg = %f, b-p = %f, delta = %f, I = %f\n",
    				avg, bufpos-playpos, delta, I);
    
    												// filter 1
    		for (k=0; k<(DIMLEN-1); k++)			//
    			FFF[k] = FFF[k+1];					//
    		FFF[k] = t2 - t1;						//
    		sum = 0;								//
    		for (k=DIMLEN-len; k<DIMLEN; k++)		//
    			sum = sum + FFF[k];					//
    		avg = sum / len;						//
    
    												// filter 2
    		for (k=0; k<(DIMLEN-1); k++)			//
    			FFF2[k] = FFF2[k+1];				//
    		FFF2[k] = avg;							//
    		sum = 0;								//
    		for (k=DIMLEN-len; k<DIMLEN; k++)		//
    			sum = sum + FFF2[k];				//
    		avg = sum / len;						// вычисленное реальное число сэмплов за фрейм
    
    												// ПИ-регулятор
    		if (len == 200)							// работает, если есть статистика по 200 фреймам
    		{
    			smps = long(QUANT + delta + 0.5);	// кол-во положенных сэмплов (то, что ушло в render_frame() в этот раз)
    			err = lim(avg - smps, -5, 5);		// разница между вычисленным средним и отправленным
    			I = I + err * 0.01;					// ограниченный интегратор
    			I = lim(I, -5, 5);					//
    			P = 0.5 * err;						// проп. звено
    			delta = P + I;						// сумма
    		}
    		else
    			len++;
      
    	}
    
    
    
    	return 0;
    }
    На 882 выходит только через несколько сот итераций.
    А колебания длины кадра даже на 1000-й итерации доходят до 0.1, что очень грубо.
    Пока что не вникал в подробности, только перенес на Си.

  6. #146

    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    На 882 выходит только через несколько сот итераций.
    все это зависит от настроек фильтра (его наверняка можно сделать короче) и регулятора.

    Цитата Сообщение от Titus Посмотреть сообщение
    А колебания длины кадра даже на 1000-й итерации доходят до 0.1, что очень грубо.
    0.1 чего? сэмпла?
    и еще, у тебя в реальных условиях на идеальном железе сколько бывает разница +- сэмплов на фрейм?

  7. #147

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,384
    Спасибо Благодарностей отдано 
    1,699
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от psb Посмотреть сообщение
    все это зависит от настроек фильтра (его наверняка можно сделать короче) и регулятора.

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

    В реальных условиях, если я не ошибаюсь, около 0.01. Причем никаких заметных на слух колебаний даже в самом начале регулировки. Таким образом сразу после запуска эмулятора слышится ровный, никуда не плавающий звук.

    И еще, ты не знаешь о таком моменте, что нет никакой гарантии точного временнОго детектирования начала кадра. Т.е. в среднем, колебания может быть в несколько сканлайнов, но, особенно в зависимости от загрузки винды, скачки могут быть непредсказуемые и достаточно большие. У меня на это тоже идет корректировка, без чего не было бы такой точности.

  8. #148

    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    +- даже несколько целых сэмплов за фрейм ты не услышишь.

  9. #149

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,384
    Спасибо Благодарностей отдано 
    1,699
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от psb Посмотреть сообщение
    +- даже несколько целых сэмплов за фрейм ты не услышишь.
    Хо))) +- несколько целых фреймов - это порядка 1%. Вполне можно услышать. А уж шумовую помеху оно точно добавит.

    У меня разрешены колебания не более 1/256 семпла, т.е. при 60Гц развертке это менее тысячной доли процента. Мне нравится, чтобы было так)

  10. #150

    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Мне нравится, чтобы было так)
    ок. открывай сразу магазин по продаже спец. железа под супер-точный эмулятор идеология ТЛЗ в действии, чо...

Страница 15 из 73 ПерваяПервая ... 111213141516171819 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Эмулятор УКНЦ - EmuStudio
    от Titus в разделе Эмуляторы отечественных компьютеров
    Ответов: 1198
    Последнее: 07.05.2025, 13:34
  2. Эмулятор МС-0515 - EmuStudio
    от Titus в разделе Эмуляторы отечественных компьютеров
    Ответов: 143
    Последнее: 09.02.2023, 10:44

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •