avva: (Default)
[personal profile] avva
Три интересные статьи, из увиденного недавно.

1. How it feels to learn Javascript in 2017. Дает некое представление о том, как устроены популярные фреймворки последних лет - с виртуальными DOMами, современным синтаксисом ES6, HTML внутри джаваскрипта (JSX). Я довольно далеко от этого мира, и во многом отношусь к нему скептически, но эта небольшая, живо и инересно написанная статья меня покорила.

2. Fizzlefade. Рассказ о том, как в классической игрушке Wolfenstein 3D был сделан эффект "экран постепенно покрывается красными точками, символизирующими кровь, пока целиком не становится красным". Есть исходники на 16-битном ассемблере и эквивалент на C, для тех, кто не хочет вспоминать ассемблер. Очень советую вчитаться как следует и разобраться для себя в том, как устроен LFSR, и особенно - почему "Галуа"-версия LFSR, которая обходится всего одним XOR'ом, эквивалентна обычной. Там весьма элегантный хак.

В качестве бонуса - статья Антиреза Doing the FizzleFade effect with a Feistel network, о совершенно другом способе добиться того же эффекта.

3. Digital Show & Tell - захватывающее видео о некоторых заблуждениях насчет того, как работает аналогово-цифровое конвертирование и наоборот, и почему самплинг типа "24 бита, 192кгц" не дает дополнительных преимуществ в сравнении с обычным CD-уровнем. Это возможно звучит довольно сухо, но я, никоим образом не аудиофил, был заворожен этим видео - исключительно ясные объяснения, на редкость наглядные демонстрации с помощью аналоговых генератора сигнала и осциллоскопа итд. Особенно понравилось объяснение того, почему концептуально неверно рисовать цифровой сигнал в виде "лесенки", и почему все равно это всегда делают. Очень круто.

Date: 2017-08-30 05:02 pm (UTC)
From: [identity profile] spamsink.livejournal.com
В статье про FizzleFade есть очевидная ошибка: LFSR никогда не принимает значение 0 (иначе он в нем останется навсегда), поэтому количество возможных значений для 17-битного варианта - не 131,072, а 131,071, и в выбранной реализации позицию (0, 0) надо физзлить вручную.

Date: 2017-08-30 05:08 pm (UTC)
From: [identity profile] avva.livejournal.com
Зачем вручную? Для 300x200 остается куча пространства для маневра, можно просто сдвинуть одну из координат на 1 вниз по сравнению с значением из LFSR, например (как и сделано в коде).

Date: 2017-08-30 05:20 pm (UTC)
From: [identity profile] spamsink.livejournal.com
Код fizzle_pixel не приведен, поэтому неясно. Существенно, что факт, что LFSR пробегает не все 2^n значений, а лишь 2^n-1, оставлен совсем без внимания.

Date: 2017-08-30 05:40 pm (UTC)
From: [identity profile] cema.livejournal.com
"Решение предоставляется читателю."

Date: 2017-08-30 06:33 pm (UTC)
From: [identity profile] avva.livejournal.com
Просто это объясняет инструкцию "asm dec bl" в исходной ассемблерной версии, которая иначе ни для чего не нужна (в пересказе на C автор этот момент упустил, и стоило упомянуть про 131,072, да, согласен).

Date: 2017-08-30 07:55 pm (UTC)
From: [identity profile] spamsink.livejournal.com
При наличии Си я в ассемблер решил не глядеть. Оказывается, зря. :)

Date: 2017-08-30 08:33 pm (UTC)
From: [identity profile] dmpogo.livejournal.com
Приведенный C код - это быстрый перевод 'в голове' автором с ассемблера. Там есть мелкие ошибки.

Date: 2017-08-30 08:51 pm (UTC)
From: (Anonymous)
Какой-то странный код вообще. Насколько помню, Вольф работал только в одном видеорежиме (VGA mode 13h), а там видеопамять адресуется линейно в пределах одного 16-битного сегмента. Вместо того, чтобы мастерить 17-битный регистр, делить его на координаты и проверять их на пределы экрана, а потом вызывать какую-то сишную функцию для отрисовки пикселя, можно было просто использовать родной 16-битный регистр и писать прямо в видеопамять, типа
mov es:[bx-1],color
(в полтора килобайта за пределами видимого экрана можно писать без зазрения, потому что они всё равно не используются).

Date: 2017-08-31 06:04 am (UTC)
From: [identity profile] fantaseour.livejournal.com
Начиная с EGA в видео память уже нельзя было писать цвет. В видеопамять писалсь маска, а цвет задавался через порт. Это называлось защелкой/latch. Такой механизм при этом позволял быстро копировать изображание из невидимой области в видимую, просто копируя байты. При копировании переносилось все, насколько я помню, но вот чтобы задать цвет изначально, надо было задав цвет через порт, писать маску в видеопамять.
http://www.osdever.net/FreeVGA/vga/graphreg.htm

Date: 2017-08-31 07:23 am (UTC)
livelight: (lightning)
From: [personal profile] livelight
В видео-память VGA писать было можно и нужно. Для режима 320*200 она была видна вся, для режимов побольше было видно окно в 64кб, которое можно было двигать. В том режиме в видеопамять напрямую писался байт номера цвета в палитре.

Date: 2017-09-04 02:59 pm (UTC)
From: [identity profile] tyomitch.livejournal.com
В том блогпосте код приведён несколько упрощённый по сравнению с фактически лежащим на https://github.com/id-Software/wolf3d/

В действительности закрашивается не весь экран целиком, а только viewport; рамка вокруг него (чем меньше viewport, тем быстрее работает игра) и статусбар внизу экрана остаются незакрашенными.

Вот для этого клиппинга и нужно разделение rndval на координаты, и проверка их по отдельности.

Кстати, никакая "сишная функция для отрисовки пикселя" не вызывается -- это тоже упрощение, сделанное автором блогпоста. В фактическом коде самый что ни на есть asm mov [es:di],al

Date: 2017-09-05 04:18 am (UTC)
From: (Anonymous)
С настоящими исходниками и вашим комментарием про viewport код действительно стал осмысленным.

Зато появился другой вопрос -- судя по коду рисования пикселя, они там используют mode X вместо mode 13h. Нафига создавать себе лишние трудности, если разрешение всё равно 320x200? Или изначально хотели 320x240, но скорости не хватило?

Date: 2017-09-06 05:46 am (UTC)
From: (Anonymous)
Viewport совершенно здесь не причём. VGA-адаптер зачастую имел больше 64KB памяти, но в линейном режиме они были недоступны. В планарных режимах (mode X) этого ограничения не было и можно было использовать несколько страниц видеопамяти для дешёвой организации двойной (и даже тройной) буферизации, но при этом возникали "лишние трудности" при расчёте адресов и переключении плоскостей вывода.

Date: 2017-09-06 03:12 pm (UTC)
From: [identity profile] tyomitch.livejournal.com
Viewport таки-да при чём: легко зайти на https://classicreload.com/wolfenstein-3d.html и убедиться, что закрашивается только он.

Image
(deleted comment)

Date: 2017-08-30 09:19 pm (UTC)
From: [identity profile] spartach.livejournal.com
Нет. :) На Хабре - перевод прошлогоднего текста, заметно другого и от другого автора. Статья по ссылке Аввы начинается со ссылки на неё и как раз сказано, что это - ответ на ту прошлогоднюю.

Нынешняя куда оптимистичней и слегка вернула мне веру в прогресс.

Date: 2017-08-30 10:49 pm (UTC)
sergey_cheban: (Default)
From: [personal profile] sergey_cheban
Это другая статья.

Date: 2017-09-04 03:16 pm (UTC)
From: [identity profile] tyomitch.livejournal.com
Теперь на Хабре есть и перевод про FizzleFade :-)

https://habrahabr.ru/post/337036/

Date: 2017-08-30 07:53 pm (UTC)
From: [identity profile] nlothik.livejournal.com
> почему самплинг типа "24 бита, 192кгц" не дает дополнительных преимуществ в сравнении с обычным CD-уровнем.

Вот этого я как-то там не увидел. Наоборот, говорится о том, что чем ниже битность, тем больше шум.

Date: 2017-08-30 08:21 pm (UTC)
From: (Anonymous)
Но ещё говорится о том, что в лучшей аналоговой студийной аппаратуре динамический диапазон был порядка 13 бит, и никто особо не жаловался.

Date: 2017-08-30 08:39 pm (UTC)
From: [identity profile] dmpogo.livejournal.com
Да но секция про dithering показывает что плохо сделанная дигитизация приводит к артифактам в шуме, причем к артифактом зависящем от сигнала. Я подозреваю 24 бита хоть и overkill, но позволяет не задумываться о тонкостях при дигитизации
Edited Date: 2017-08-30 08:40 pm (UTC)

Date: 2017-08-30 09:06 pm (UTC)
From: (Anonymous)
На самом деле при 16 битах шум квантования даже без дизеринга вряд ли можно услышать, а тот самый "shaped dithering" доводит эффективную (с учётом АЧХ уха) разрядность КД до примерно 20 бит.

24 бита и 192 кГц полезны как промежуточный формат при цифровой обработке, именно чтобы не париться по поводу ошибок округления и упростить фильтрацию. (А честные 24 бита из исходных аналоговых сигралов всё равно никак не извлечь.)

Date: 2017-08-31 01:31 am (UTC)
From: [identity profile] dmpogo.livejournal.com
24 бита и 192 кГц полезны как промежуточный формат при цифровой обработке, именно чтобы не париться по поводу ошибок округления и упростить фильтрацию.

Именно, но процесс передачи информации и есть промежуточный этап, когда неизвестно какого качества будет DAC в декодировании, есть смысл облегчить ему жизнь.

Date: 2017-08-31 10:52 am (UTC)
From: (Anonymous)
довольно хорошо известно, какого качества весь аналоговый тракт, от микрофона до динамика. не имеет смысла делать dac намного лучше.

Date: 2017-08-31 02:24 am (UTC)
From: [personal profile] ichthuss
В самом видео нет, но в начале видео дана ссылка на статью автора по этой теме. Краткое содержание статьи:

1. Выше 20 кГц ни один человек реально не слышит - порог слышимости становится выше олевого порога. Любой сигнал со спектром до 20 кГц совершенно точнно передаётся при дискретизации 44.1 или 48 кГц. Ультразвук (возможностью передачи которого только и отличается 192 кГц) в лучшем случае ничего не добавляет к тому, что слышим, в худшем - ухудшает слышимый сигнал из-за нелинейностей тракта.

2. 16-битной квантизацией можно представлять сигналы с разностью уровней более 100 дБ, что соответствует разности между писком комара в комнате и звуком отбойного молотка на расстоянии 1 метр. Это намного превышает любой полезный разброс уровней в записи.

3. Представление 24 бита, 192 кГц имеет определённый смысл для промежуточных этапов работы со звуком, но совершенно бесполезно для окончательного проигрываемого трека. Это консенсус специалистов, многократно подтверждённый двойыми слепыми исследованиями.

Date: 2017-08-31 12:52 pm (UTC)
From: [identity profile] nlothik.livejournal.com
Спасибо.

про цифровой

Date: 2017-08-30 08:47 pm (UTC)
From: [identity profile] a-shen.livejournal.com
звук - это какое-то бессмысленное шоу, те, кто не знают базовых вещей, ничего не поймут, а те, кто знает, удивятся - какая же это схемотехника, спрашивается, проводит через точки кривую ограниченного спектра?!

Re: про цифровой

Date: 2017-08-30 09:21 pm (UTC)
From: (Anonymous)
я думал, что я в этом шоу про звук все понял, и тут ваш комментарий, который я вообще не понимаю о чем. можете объяснить?

Re: про цифровой

Date: 2017-08-30 11:41 pm (UTC)
sergey_cheban: (Default)
From: [personal profile] sergey_cheban
> какая же это схемотехника, спрашивается, проводит через
> точки кривую ограниченного спектра?!
Цифровая. Ей никто не мешает посчитать значения сигнала в промежуточных точках, а потом вывести результат на ЦАП с каким угодно качеством.
Считать просто: БПФ раскладывает сигнал на синусоиды, sin(x) компьютер считать умеет.

Re: про цифровой

Date: 2017-08-31 10:24 am (UTC)
From: [identity profile] a-shen.livejournal.com
Вы не поняли. Речь о том, как происходит ЦАП и откуда берётся декларированное докладчиком ограничение полосы пропускания, позволяющее применить теорему Найквиста или как она там называется. https://en.wikipedia.org/wiki/Reconstruction_filter

Re: про цифровой

Date: 2017-08-31 11:16 am (UTC)
From: (Anonymous)
"как происходит ЦАП"

Может по-разному происходить. Например, можно реконструировать сигнал из той самой 16-битной лесенки. Можно и иначе, например, пересчитав сигнал в однобитный, но с более высокой частотой дискретизации (т.н. сигма-дельта-модуляция). Это целая наука, которой он вовсе не касается.

"откуда берётся декларированное докладчиком ограничение полосы пропускания"

Из аналогового фильтра нижних частот *на входе* системы, перед АЦП.

На выходе тоже ставят аналоговый фильтр нижних частот, который убивает высокочастотные компоненты, имеющиеся в лесенке или в сигма-дельта-сигнале и преобразует ее из лесенки в исходную синусоиду. Но его назначение другое --- защищать *аналоговый* тракт (усилитель, который после ЦАП) от нежелательной высокочастотной составляющей. В теории ее не должно быть слышно, но на практике из-за нелинейности усилителя будут неприятности.

Re: про цифровой

Date: 2017-08-31 01:34 pm (UTC)
From: [identity profile] a-shen.livejournal.com
Фильтр нижних частот, чтобы можно было сослаться на теорему Найквиста, должен быть весьма экзотическим

RE: Re: про цифровой

Date: 2017-08-31 01:50 pm (UTC)
From: (Anonymous)
Да, очень ступенчатым, что нежелательно. Поэтому на практике прибегают к разным трюкам. Например, ставят фильтр простой и пологий, повышают частоту самплинга, а потом ненужное отрезают уже в цифровом виде, где уже можно применить сколь угодно эезотический фильтр.

Re: про цифровой

Date: 2017-08-31 01:14 pm (UTC)
sergey_cheban: (Default)
From: [personal profile] sergey_cheban
Ограничение полосы пропускания происходит на входе, до оцифровки. Там в обязательном порядке ставятся аналоговые фильтры, отрезающие всё лишнее. Если их не поставить, получается ерунда. См. рис. 34.6 здесь.

Выдать на выход ЦАП сигнал "лесенкой", а потом каким-нибудь аналоговым фильтром (reconstruction filter) сгладить его можно, но результат будет отличаться от "математически правильного". Впрочем, "математически правильный" сигнал ограниченного спектра может быть только периодическим, так что в реальной жизни от строгой математики рано или поздно приходится отходить.

Re: про цифровой

Date: 2017-08-31 01:20 pm (UTC)
From: [identity profile] a-shen.livejournal.com
1) Речь не о АЦП, а о ЦАП
2) ---

Re: про цифровой

Date: 2017-08-31 02:14 pm (UTC)
From: (Anonymous)
Так теорема Найквиста нам что говорит? Что сигнал восстанавливается однозначно. Если провести кривую ограниченного спектра через центры ступенек, получится входной сигнал. Если его вычесть из сигнала-лесенки, получится некий шум, спектр которого, внимание, весь целиком лежит выше, чем половина частоты дискретизации. Соответственно, если отфильтровать все такие частоты, на выходе получится как раз входной сигнал, больше нечему получиться.

На практике, конечно, очень трудно отрезать без остатка все выше 22.4 кГц и оставить без изменения все ниже 20 кГц. Поэтому и здесь тоже повышают частоту, с которой ЦАП выдает свою лесенку (заодно можно понизить разрядность). Промежуточные значения вставляют какие надо, чтобы частоты выше 20 кГц не появлялись на выходе (DSP их считает). Получается, что теперь надо отрезать не все, что выше 22.4 кГц, а все, что выше, например, 1 МГц, при этом опять же оставить без изменения только то, что ниже 20 КГц. А это уже гораздо проще.

Date: 2017-08-30 10:04 pm (UTC)
From: [identity profile] oppad (from livejournal.com)
по пункту 3 - там у него "идеальный сигнал" имеет гармонику -70дБ, что соответствует 12 разрядному АЦП (грубо 1 бит 6дБ). то есть разбирать что хуже лучше он может только в пределах 12бит, а 16 и 24 естественно будут одинаковыми.

Date: 2017-08-30 11:46 pm (UTC)
sergey_cheban: (Default)
From: [personal profile] sergey_cheban
Ну так он и говорит, что лучшая аналоговая аппаратура даёт 13 битов. А что сверх этого, то от лукавого, поскольку сигнал лучшего качества просто неоткуда взять.

Date: 2017-08-31 12:04 pm (UTC)
From: [identity profile] oppad (from livejournal.com)
я не в теме, просто есть друзья аудиофилы, но слышал что у студийных катушечников 120дБ - это шире 16бит. поискал - не нашел, сколько у винила (но так как винил с этих студийников писали то наверно не важно), но слышал, что разделение стерео каналов у самых крутых тоже где-то под 100дБ. ну а лоу-кост касета, там наверняка все плохо, причем стандарт "де факто" для касетников dolby b искажает сигнал сильно - там логарифмическая характеристика.
еще кстати, в этом видео без внимания джитер тактовой - вот у тех же аудиофилов принято брать какие-то спец. кварцы с термокомпенсацией и т.п. они утверждают, что слышат дефекты от обычного 30ppm! кварца
Edited Date: 2017-08-31 12:06 pm (UTC)

Date: 2017-08-31 12:51 pm (UTC)
sergey_cheban: (Default)
From: [personal profile] sergey_cheban
> у студийных катушечников 120дБ
А не брехня ли это? Я сейчас навскидку посмотрел пару моделей, лучшее - 76 дБ. Добавить к этому ещё 54 дБ - что-то я сомневаюсь, что реально. А вот написать на коробке циферку побольше - это легко.

Опять же, 0 дБ - это порог слышимости. Особо ниже не опустишься, какие бы уши ни были: у человека есть внутренние шумы от кровеносной системы. А 120 дБ - это болевой порог.

> они утверждают, что слышат дефекты от обычного 30ppm!
> кварца
А это, случайно, не понты? А то бывали случаи, когда на слепом прослушивании аудиофил начинал втирать про джиттер и направленные не в ту сторону провода, а за ширмочкой сидел живой оркестр.

Date: 2017-08-31 02:06 pm (UTC)
From: [identity profile] oppad (from livejournal.com)
эх, зря я начал писать тут :) - нет у меня аудиофильского энтузиазма.
предположу, что в старые добрые аналоговые времена недостающие децибелы добирали мастерством аудиорежисеров, которые крутили ручки усилителей, сводили много дорожек в одну, умудрившись впихнуть в 70дБ супер-звук путем длительных итераций.
а сейчас есть микрофон, есть цифровалка 24бит (пусть с 18-20 эффективными) любой школьник может сделать за 5мин то, что раньше месяцами делали профи.
может так?


Date: 2017-08-31 03:53 am (UTC)
From: [identity profile] shadow-ru.livejournal.com
1. По-моему исходная статья дает большее представление о современном программировании на JS:

https://hackernoon.com/how-it-feels-to-learn-javascript-in-2016-d3a717dd577f

Date: 2017-08-31 12:28 pm (UTC)
From: [identity profile] avva.livejournal.com
Таких саркастических статей много в последнее время расплодилось, а вот позитивных и информативных, типа той, на что я ссылку дал - мало.

Date: 2017-08-31 05:04 pm (UTC)
From: [identity profile] shadow-ru.livejournal.com
Вы js не любите именно поэтому?)

Date: 2017-08-31 07:42 am (UTC)
From: [identity profile] p2004r.livejournal.com
Этот "минималист" (тема про АЦП) какой то совсем уж глупый.

1.

Динамический диапазон имеет у уха человека "динамическую" же природу. Все вот эти самые "косточки и стремечки".

Да типа "большой кондер на входе" это как то там эмулирует. Но ключевое слово "как то там".

Если за вас в ресторане прожевали кашку и подали на стол... пусть даже прожевал шеф повар... наверное что то не так?

Ну так и в аппаратуре динамический диапазон очень важен.

Это окно в 12 децибел постоянно "бегает" по "шкале усиления" у человека. И реальная картина по разрешению куда как круче. В отсутствии громкого звука вы различаете самый тихий шепот, а в полной тишине слышите как течет кровь по сосудам. У аппаратуры альтернатива "тупому конденсатору" это делать очень широкий дипазон динамический (ну или синтезировать его записывая сигнал сразу на нескольких уровнях усиления как в фотографии).

2.

Про осциллограф смешно.

Представим сигнал состоящий из кучи взаимодействующих между собой "синусов" частотой лежащих выше 20 кГц и _активно_ "шевелящих фазой". Вы что поверили этому перцу, что ничего не будет регистрироваться ниже?

Это _динамически_меняющийся_по_времени_ звук, его динамический диапазон шире чем можно смоделировать размещая синусоиды со стабильной фазой.

Ergo: Разрешение "по времени" нужно не только для того что бы зафиксировать частоты звуков, но и что бы отразить их динамику (фронты и вот это вот всё).

Date: 2017-08-31 09:36 am (UTC)
From: (Anonymous)
он не глупый. глупый не он.

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

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

Date: 2017-08-31 02:40 pm (UTC)
From: (Anonymous)
Похожее, ЖЖ стал терять глубоко вложенные комментарии. То есть, кнопка "развернуть" иногда становится вроде бы не видна, и свернутые ветки под ней поэтому тоже не видны. Но они есть. Если открыть ветку над свернутой веткой, то все развернется.

Пример: ветка, открытая уважаемым a_shen, под названием "про цифровой".

У меня это так на лаптопе и на телефоне. Кто-нибудь еще это наблюдает?

January 2026

S M T W T F S
    1 2 3
45678910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 3rd, 2026 01:26 am
Powered by Dreamwidth Studios