Как именно? Чтобы получить хотя-бы целое значение 47999 прийдется делать апсэмплинг с 3.5 МГц до 168 ГГц (168188496000 Гц) - это нереально в реальном времени делать.
Вид для печати
Не надо так воспринимать задачи 'в лоб'. У всего есть адекватные по времени методы.
Впрочем, еще раз повторюсь - сейчас я не тестирую качество фильтров, качество эмуляции Z80. Это вторично.
Сейчас я тестирую только движок эмулятора на разных машинах.
Хотя, похоже, мы своим флудом всех распугали и актуальный пост уехал слишком далеко.
Я понимаю, что тебя в твоем эмуляторе сейчас интересует именно эта тема, но меня нет. И я даже заморачиваться пока не хочу над этим) Придет время писать фильтр, тогда и посмотрю, как сделать лучше)
- - - Добавлено - - -
Кстати, если мне будет не хватать для чего-то вычислительной мощности процессора (что вряд ли), можно перенести вычисления на вычислительные шейдеры графического процессора.
Как раз фильтры хорошо на нем делаются.
Вернее, дать пользователю выбор в настройках, на чем вычислять, на CPU или на GPU.
Например, сканлайны у меня сейчас считаются на шейдерах, что разгрузило процессор.
если плавает частота дискретизации, то будет странным, если частота волны сигнала будет оставаться неизменной. Конечно она тоже будет плавать. В среднем она будет плавать в небольшом диапазоне, например если частота звуковухи плавает в пределах 500 Гц, то частота 1 кГц сигнала будет плавать в пределах 10 Гц.
Если системный таймер лишний, то относительно чего измеряются частоты дискретизации звуковой карты и видеоадаптера? Без него точно измерить не получится...
Продублирую.
Windows 10, монитор Viewsonic vp930
Окно консоли на 50 hz :
Скрытый текст
EmuStudio 0.9 test 1 (ZX-Mode)
Written by dr.Titus 2006,2025
CPU: AMD FX(tm)-8120 Eight-Core Processor
Support: MMX SSE SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 AVX
Logical CPU cores: 8
Current CPU #0 frequency: 3100MHz
DWM Composition: Enabled
Powered from AC
Power scheme already exist
Low CPU AC threshold = 90%
Low CPU DC threshold = 20%
Power scheme activated
WM_CREATE
Windows version: 10 (10.0.19041.5072)
Multimedia timer resolution: 2057 mks
Multimedia timer resolution: 1997 mks
Desktop DPI: 96 dpi (scale: 100%)
DXGI version 1.6
Direct2D version 1.3
Monitor[0] - NVIDIA GeForce 9800 GT : VP930 Series
Mode: 1280 x 1024, 60.020000Hz
Frequences set: 60.02Hz, 75.03Hz
Hardware composition: not supported
Adapter[0]: Direct3D feature level 10.0
Allow tearing (variable framerate): supported
Shader model 5.0 not supported!
WASAPI system mix format: 48000 Hz, 32 bits, 2 channels, float
Endpoint name: Наушники (High Definition Audio Device)
WASAPI endpoint format: 48000 Hz, 16 bits, 2 channels, PCM
Audio system: WASAPI Shared
Audio format: 48000 Hz, 32 bits, 2 channels
Device minimum period: 2 ms
Audio Buffer Size: 1056 samples (22.0 ms)
480, 0, 0, 0, 480, 0, 0, 0,
Process priority: 128
Main thread priority: 0
High resolution timer: 10000000Hz
CPU Mode: Pure
WMI thread priority = -15
Emulation thread priority = 2
Audio thread priority = 15
Audiobuffer padding: 29.1 ms
Total audio delay: 48.4 ms
Audio buffer is empty
Video thread priority = 1
Class name WIND_0000
Init: Pentagon
Snapshot snapshot.z80 loaded
SoundProfiler: Init
Viewport size changed: 812 x 572
Frames lost: 2
Resync
*********@.@SoundProfiler: End
****.......*
[свернуть]
На 100 Hz
Скрытый текст
EmuStudio 0.9 test 1 (ZX-Mode)
Written by dr.Titus 2006,2025
CPU: AMD FX(tm)-8120 Eight-Core Processor
Support: MMX SSE SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 AVX
Logical CPU cores: 8
Current CPU #0 frequency: 3100MHz
DWM Composition: Enabled
Powered from AC
Power scheme already exist
Low CPU AC threshold = 90%
Low CPU DC threshold = 20%
Power scheme activated
WM_CREATE
Windows version: 10 (10.0.19041.5072)
Multimedia timer resolution: 1962 mks
Multimedia timer resolution: 1950 mks
Desktop DPI: 96 dpi (scale: 100%)
DXGI version 1.6
Direct2D version 1.3
Monitor[0] - NVIDIA GeForce 9800 GT : VP930 Series
Mode: 1280 x 1024, 60.020000Hz
Frequences set: 60.02Hz, 75.03Hz
Hardware composition: not supported
Adapter[0]: Direct3D feature level 10.0
Allow tearing (variable framerate): supported
Shader model 5.0 not supported!
WASAPI system mix format: 48000 Hz, 32 bits, 2 channels, float
Endpoint name: Наушники (High Definition Audio Device)
WASAPI endpoint format: 48000 Hz, 16 bits, 2 channels, PCM
Audio system: WASAPI Shared
Audio format: 48000 Hz, 32 bits, 2 channels
Device minimum period: 2 ms
Audio Buffer Size: 1056 samples (22.0 ms)
480, 0, 0, 0, 480, 0, 0, 0,
Process priority: 128
Main thread priority: 0
High resolution timer: 10000000Hz
CPU Mode: Pure
WMI thread priority = -15
Emulation thread priority = 2
Audio thread priority = 15
Audiobuffer padding: 58.3 ms
Total audio delay: 85.9 ms
Audio buffer is empty
Video thread priority = 1
Class name WIND_0000
Init: Pentagon
Snapshot snapshot.z80 loaded
SoundProfiler: Init
Viewport size changed: 812 x 572
Frames lost: 2
Resync
***@********SoundProfiler: End
***
[свернуть]
Скрин:
Скрытый текст
https://i.postimg.cc/rs3fx0W3/1x.png[свернуть]
100 Hz
Скрытый текст
https://i.postimg.cc/W125rvJ2/2x.png[свернуть]
С чего это частота звуковухи будет плавать?
- - - Добавлено - - -
Конечно таймер не лишний, он является опорным для всех измерений.
- - - Добавлено - - -
Понятно, почему шейдеры 5.0 не поддерживаются. Видеокарте уже почти 20 лет)
А почему-бы ей не плавать? Рубидиевые стандарты частоты в звуковухи вроде не ставят :)
Осциллятор с печкой тоже не ставят - он дорогой и кушает несколько Ампер. TCXO имеет большие фазовые шумы, что для звуковухи плохо.
А обычные китайские кварцы гуляют так, что с телеграфным 500 Гц фильтром - попробуй еще поймай, а поймаешь - через пару минут уже уйдет из полосы приёма.
- - - Добавлено - - -
это в настройках драйвера можно менять, в Windows была какая-то утилита в ней можно было все эти параметры менять, не помню точно уже название, помоему rivatuner. Можно также установкой переменной среды управлять, имя перменной зависит от драйвера.
Да ну даже близко нет такого даже с самыми отбитыми китайскими кварцами, чтобы оно из полосы 500 Гц за пару минут вылезло. Даже если частота кварцевого генератора уведена от центральной при помощи LC-цепочки, всё равно максимум до десятки герц может уехать. Для какого нибудь WSPR/FT8 это критично, но уши не услышат.
может у вас осциллятор с термостабилизацией? У меня в тестах на обычном кварце 32 МГц частота за 1 минуту уплывала больше чем на 2 кГц (за счет нагрева платы). Это порядка 60 ppm. Отклонение у обычных кварцев допускается порядка 200-400 ppm.
А сейчас вместо кварцев могут и MEMS осцилляторы ставить для экономии, у них вообще частота гуляет как ... в проруби - подносишь руку и частота легко на 100 кГц улетает :)