Я вот уже давно никак не могу найти - в какой-то советской книжке типа "Справочник радиолюбителя" в конце был описание конструкции видеомагнитофона на бобинах и схемотехника его узлов.
Хотя в материале и писали, что это несерьёзно с протягой без БВГ, но всё было описано подробно...
Мне очень захотелось всё это перечитать, когда я увидел вот это:
Вот оказывается бала детская игрушка в США в конце 80х, которая писала чёрно-белое видео 120x90 15 FPS на обычную аудиокассету, крутящуюся с 9-кратной скоростью (получалось 3.5 минуты на одной стороне):
Выглядит даже лучше, чем спектрограмма в Audacity ( тут кадр положен на бок, если кто не понял ; )
Есть небольшая задержка на декодировании - порядка 7мс, что вполне терпимо (и она одинаковая для всех частот)
Алгоритм такой - имея таблицы синусов и косинусов для всех 20 частот с дискретизацией 44100 Гц я умножаю входной 16-битный сигнал со знаком (точнее каждый отсчёт этого сигнала, приходящий с частотой дискретизации 44100 Гц) на каждый синус и каждый косинус, получая 40 сигналов, которые идут на IIR фильтры низких частот с порогом срезания 88 Гц, что помогает выделить постоянную составляющую для каждого канала (умножая частоты получается смесь сигналов с суммой частот и разницей частот - нам нужна только разница, которая равна нулю, если частоты совпадают), далее берём пару отфильтрованный синус S и отфильтрованный косинус C для каждой из 20 частот и считаем амплитуду выделенного сигнала соответствующей частоты как sqrt(S*S+C*C), правда для ускорения вычислений я не вычисляю корень, а прямо так и использую квадрат амплитуды, усредняя его за 110 отсчётов (получая 400 замеров всех 20 частот за секунду), чтобы далее отобразить в виде символа, соответствующего яркости "пиксела" (каждого из 20), принимая во внимание, что амплитуда входного сигнала у каждой частоты не должна превышать 1638 (т.к. именно так они изначально "смешивались")...
P.S. До этого я пробовал нагенерить 20 фильтров с соответствующей полосой пропускания, чтобы покрыть каждую частоту, но с ними ничего путнего не получилось - задержка разная, усиление разное, некоторые фильтры разбегаются и т.д. (покопавшись в архивах увидел, что я это же пытался сделать в ноябре 2010 года и тоже ничего не вышло). А вот вариант описанный выше - самый жизнеспособный. Фильтры для обоих вариантов генерил с помощью вот этого сайта https://www-users.cs.york.ac.uk/~fisher/mkfilter/trad.html (но сама программка mkfilter с исходниками у меня тоже есть - пользовался ей в 1998 году по работе).
P.P.S. Вот для наглядности картинки с вышеупомянутого онлайн-генератора для использованного IIR фильтра низкой частоты с частотой среза 88 Гц - по горизонтали доля от частоты синхронизации, красная линия - амплитуда, синяя линия - фаза (нам она ненужна):
Attachment:
6704782F.gif.png [ 2.22 KiB | Viewed 11265 times ]
Получается ослабление в половину (0.5) происходит где-то в районе 105 Гц (0.0024 от частоты дискретизации), на четверть (1/4) в районе 136 Гц и на 1/8 в районе 176 Гц
Задержку в работе фильтра можно оценить по импульсному ответу (в единицах частоты дискретизации, которая 44100 Гц):
Attachment:
6704721T.gif.png [ 1.56 KiB | Viewed 11265 times ]
А вот так декодируется сфера - это точно лучше Audacity:
Code:
000000109| |1|0000002 ms 000000219| |1|0000004 ms 000000329| |1|0000007 ms 000000439| |1|0000009 ms 000000549| |1|0000012 ms 000000659| ....----... . . .| |0000014 ms 000000769|.-+##+#@-++-------+-|2|0000017 ms 000000879|+#@@@##@+##+##+++###|2|0000019 ms 000000989|+@@@##@++##+##++##+#|2|0000022 ms < 000001099|-#@@@@@+##+++#+++++#|2|0000024 ms 000001209|#@@@@-++#+.---.---.-|2|0000027 ms 000001319|-+-.-..-.. | |0000029 ms 000001429| |1|0000032 ms 000001539| |1|0000034 ms 000001649| |1|0000037 ms 000001759| |1|0000039 ms 000001869| |1|0000042 ms 000001979| |1|0000044 ms 000002089| |1|0000047 ms 000002199| |1|0000049 ms 000002309| |1|0000052 ms 000002419| .... | |0000054 ms 000002529| ...... | |0000057 ms 000002639| ..------. | |0000059 ms 000002749| ..---++--.. | |0000062 ms 000002859| ....-++++++-. | |0000064 ms 000002969| ..-+++++#++-.. | |0000067 ms 000003079| ..+@#+#+++++-. | |0000069 ms 000003189| .-+-++#++#++-. | |0000072 ms 000003299| .+-++++++#++-- | |0000074 ms 000003409| .-#@@##+#++++--. | |0000077 ms 000003519| ..--+#++#++++++- | |0000079 ms 000003629| .--..+#+++++++--. | |0000082 ms 000003739| .-+-+#+++++#+-. | |0000084 ms 000003849| .+#+++#++++--. | |0000087 ms 000003959| -++++#+#++-.. | |0000089 ms 000004069| . .++++++-.. | |0000092 ms 000004179| .--+++--.. | |0000094 ms 000004289| ....----.. | |0000097 ms 000004399| ......... | |0000099 ms 000004509| ... | |0000102 ms 000004619| |1|0000104 ms 000004729| |1|0000107 ms 000004839| |1|0000109 ms 000004949| |1|0000112 ms 000005059| |1|0000114 ms 000005169| |1|0000117 ms 000005279| |1|0000119 ms 000005389| |1|0000122 ms 000005499| |1|0000124 ms 000005609| |1|0000127 ms
Я тут также печатаю метки времени и программно детектирую начало кадра ( значок < )
P.S. А вот так выглядит инвертированная сфера - она немного "погрязней":
Code:
000000109| |1|0000002 ms 000000219| |1|0000004 ms 000000329| |1|0000007 ms 000000439| |1|0000009 ms 000000549| |1|0000012 ms 000000659| ....----... . . .| |0000014 ms 000000769|.-+##+#@-++-------+-|2|0000017 ms 000000879|+#@@@##@+##+##+++###|2|0000019 ms 000000989|+@@@##@++##+##++##+#|2|0000022 ms < 000001099|-#@@@@@+##+##+++#++#|2|0000024 ms 000001209|@@@@#@+##++##+++#++#|2|0000027 ms 000001319|@@@@@@#+#+++#+++++++|2|0000029 ms 000001429|@@@@@@###+#+++++++++|2|0000032 ms 000001539|@@@#####-+#++++#++++|2|0000034 ms 000001649|@@@@@@+#++######++++|2|0000037 ms 000001759|@@@@@@#@##+##++#++++|2|0000039 ms 000001869|+--.+@@+##+++++#++++|2|0000042 ms 000001979|@@@@@+#.++++#+#++++#|2|0000044 ms 000002089|@@@@@-@#++###++++++#|2|0000047 ms 000002199|@@@@@#@@#-##++++++##|2|0000049 ms 000002309|--.+@@+#+++-++++++##|2|0000052 ms 000002419|---#+#-+++--+++++++#|2|0000054 ms 000002529|@@@@+--.----+-++++++|2|0000057 ms 000002639|@@@@+#@-.-.-..-+++#+|2|0000059 ms 000002749|@@@@@@@+ .....--++++| |0000062 ms 000002859|@@@@@#-. .--+++| |0000064 ms 000002969|#+#@@+ .. .--+++| |0000067 ms 000003079|@@@#--.. .-+++| |0000069 ms 000003189|@@@+.. . ..+++| |0000072 ms 000003299|@@@#.. .-++| |0000074 ms 000003409|@@@###. .-++| |0000077 ms 000003519|@@@@@+. . .-++| |0000079 ms 000003629|#@@@#.. .-++| |0000082 ms 000003739|#@@@#.. . .-+++| |0000084 ms 000003849|#@##.-. . .-+++| |0000087 ms 000003959|#+--... ... ..-+++| |0000089 ms 000004069|#++--.. .. .-++++| |0000092 ms 000004179|#@@@#-.. . .--++++| |0000094 ms 000004289|#++@@@++.-....--++++|2|0000097 ms 000004399|@@@@@@.+#-+---++++++|2|0000099 ms 000004509|@@@@+@+++ ++-+++++++| |0000102 ms 000004619|@@@@@@@#--+++++++#++|2|0000104 ms 000004729|@@@@@@@--#--+++++#+#|2|0000107 ms 000004839|+-+#@@+++#++##++++##|2|0000109 ms 000004949|.-#@@@+##@+#++#+#+##|2|0000112 ms 000005059|..+@+#+@@@@#++#++++#|2|0000114 ms 000005169|+#@#+-###+#+++#++#++|2|0000117 ms 000005279|+##+-.++++#+++#++##+|2|0000119 ms 000005389|-+@@@@#.#-+##+++++#+|2|0000122 ms 000005499|@@@@@@@#@#-#++#+++++|2|0000124 ms 000005609|@@@@@.+@##++++++++++|2|0000127 ms
Алгоритм такой - имея таблицы синусов и косинусов для всех 20 частот с дискретизацией 44100 Гц я умножаю входной 16-битный сигнал со знаком (точнее каждый отсчёт этого сигнала, приходящий с частотой дискретизации 44100 Гц) на каждый синус и каждый косинус, получая 40 сигналов, которые идут на IIR фильтры низких частот с порогом срезания 88 Гц, что помогает выделить постоянную составляющую для каждого канала (умножая частоты получается смесь сигналов с суммой частот и разницей частот - нам нужна только разница, которая равна нулю, если частоты совпадают), далее берём пару отфильтрованный синус S и отфильтрованный косинус C для каждой из 20 частот и считаем амплитуду выделенного сигнала соответствующей частоты как sqrt(S*S+C*C), правда для ускорения вычислений я не вычисляю корень, а прямо так и использую квадрат амплитуды, усредняя его за 110 отсчётов (получая 400 замеров всех 20 частот за секунду), чтобы далее отобразить в виде символа, соответствующего яркости "пиксела" (каждого из 20), принимая во внимание, что амплитуда входного сигнала у каждой частоты не должна превышать 1638 (т.к. именно так они изначально "смешивались")...
На самом деле 88 Гц многовато, т.к. например между частотой 0 и частотой 1 разница только 31 Гц, соответственно сдвинув частоту 0 в 0 Гц частота 1 тоже сдвинется (в 31 Гц) и попадёт на выход фильтра незадавленной (так как ниже 88 Гц окажется) - поэтому нижние строчки визуально друг-друга "засвечивают".
P.S. Может быть просто тупо расставить частоты с шагом в 100 Гц вплоть до 16 кГц и генерить видео чистыми синусоидами? Это уже 160 строк будет - можно даже цвет приделать (но нужны будут чистые синусоиды) - но это потом...
P.P.S. Попробовал более узкие фильтры - на 50 Гц и даже 25 Гц - там яркость похуже и из-за задержки конец кадра начинает наплывать на синхросигнал - в результате точность детектирования начала кадра ухудшается...
P.S. А вот если брать кусок фильма, то уже видно, что не хватает разрешения и контрасности, чтобы что-то понять:
P.P.S. Похоже яркость была пониженная т.к. надо не просто на cos и sin умножать, а на корень из 2 cos и sin (т.е. амплитуда должна быть 1.414, а не 1.000) - обновил видеоролик из "пятого элемента" выше и вот так выглядит "сфера" при умножении на 1.414 при декодировании вместо 1.000:
Немножко поэкспериментировал в Audacity с формой смешиваемых сигналов (сейчас используется сигнал под номером 1, т.е. просто тупо прямоугольный сигнал), чтобы задавить гармоники наиболее простым способом - это будет нужно при переходе на большее кол-во частот:
x 2 = +6.0 dB x 4 = +12.0 dB x 8 = +18.1 dB x 10 = +20.0 dB
Одна клетка это 1/20 полной амплитуды, поэтому главная частота в таблице в районе -26 dB и чтобы увидеть насколько гармоники от главной частоты отстают, я её "усиливаю" до 0 dB, соответственно подтягивая все гармоники. Интересно, что картина нечётных гармоник для форм сигналов 1 и 2 ничем не отличаются ( ну разве что 2 чуть слабее получился, но гармоники от главной частоты затухают ровно также - немножко обидно ибо 2 это типа троичный сигнал : ). Вариант 3 тушит гармоники 3,5 и 11,13, а вариант 4 тушит их ещё сильнее, а вот гармоники 7,9 и 15,17 почему-то примерно одинаковые для всех 4х вариантов. У меня при декодировании выделяются 8 уровней серого, соответственно самый слабый видимый сигнал отличается от самого сильного в восемь раз, что равняется усилению +18.1 dB, соответственно если гармоники уходят ниже -18.1 dB, то это значит они будут слабее, чем 1/8 и будут невидны, даже если залезут в чужие частоты. Вариант Vsound40, который я на предыдущей страничке описывал, имеет проблему залезания в плюс-минус 6% от третьей гаромники других частот - я это проверил по спектрограмме, если отступить от третьей гармоники влево на 6%, то ее сторона "колокольчика" будет где-то в районе -5 dB, а если вправо на 6%, то где-то в районе -10 dB, это значит что даже варианта 3 будет достаточно, чтобы третья гармоника не показывалась в чужих частотах. А вот тот факт, что гармоники 7 и 9 никак не задавились, может помешать т.к. в 40-частотном варианте у меня были практически прямые попадания частот в 7 и 9 гармоники других частот и значения -16.6 dB и -18.4 dB означают, что они на пределе распознаваемости как 1/8 от максимума (одна единичка яркости) - ну 9я гаромника может и не распознается, а вот 7я вполне может, т.к. -16.6 dB это примерно 0.15, что на 20% выше 1/8 - в результате каждая строка N слегка будет видимой в строке N+15 (с в 6.7 раз меньшей яркостью точек). Ну или можно для 40-строчного варианта уменьшить количество уровней распознаваемой яркости с 8 до 6 - тогда 7я гармоника тоже задавится. А если брать только 5 уровней яркости, то тут и сигнал 1 сгодится...
P.S. Повторяю формат Vsound40 под спойлером (кому интересно):
Vsound40
Code:
TRY 2^0.186800 0: 100.000000 1: 113.823623 2: 129.558170 3: 147.467803 4: 167.853195 5: 191.056587 6: 217.467529 7: 247.529419 8: 281.746951 in 3rd with 0 (6.4%) 9: 320.694586 in 3rd with 0 (6.4%) in 3rd with 1 (6.4%) 10: 365.026195 in 3rd with 1 (6.4%) in 3rd with 2 (6.4%) 11: 415.486039 in 3rd with 2 (6.4%) in 3rd with 3 (6.4%) 12: 472.921260 in 5th with 0 (5.7%) in 3rd with 3 (6.4%) in 3rd with 4 (6.4%) 13: 538.296110 in 5th with 0 (7.1%) in 5th with 1 (5.7%) in 3rd with 4 (6.4%) in 3rd with 5 (6.4%) 14: 612.708132 in 5th with 1 (7.1%) in 5th with 2 (5.7%) in 3rd with 5 (6.4%) in 3rd with 6 (6.4%) 15: 697.406592 in 7th with 0 (0.3%) in 5th with 2 (7.1%) in 5th with 3 (5.7%) in 3rd with 6 (6.4%) in 3rd with 7 (6.4%) 16: 793.813446 in 7th with 1 (0.3%) in 5th with 3 (7.1%) in 5th with 4 (5.7%) in 3rd with 7 (6.4%) in 3rd with 8 (6.4%) 17: 903.547220 in 9th with 0 (0.3%) in 7th with 2 (0.3%) in 5th with 4 (7.1%) in 5th with 5 (5.7%) in 3rd with 8 (6.4%) in 3rd with 9 (6.4%) 18: 1028.450177 in 11th with 0 (6.9%) in 9th with 1 (0.3%) in 7th with 3 (0.3%) in 5th with 5 (7.1%) in 5th with 6 (5.7%) in 3rd with 9 (6.4%) in 3rd with 10 (6.4%) 19: 1170.619248 in 11th with 0 (6.0%) in 11th with 1 (6.9%) in 9th with 2 (0.3%) in 7th with 4 (0.3%) in 5th with 6 (7.1%) in 5th with 7 (5.7%) in 3rd with 10 (6.4%) in 3rd with 11 (6.4%) 20: 1332.441233 in 11th with 1 (6.0%) in 11th with 2 (6.9%) in 9th with 3 (0.3%) in 7th with 5 (0.3%) in 5th with 7 (7.1%) in 5th with 8 (5.7%) in 3rd with 11 (6.4%) in 3rd with 12 (6.4%) 21: 1516.632880 in 11th with 2 (6.0%) in 11th with 3 (6.9%) in 9th with 4 (0.3%) in 7th with 6 (0.3%) in 5th with 8 (7.1%) in 5th with 9 (5.7%) in 3rd with 12 (6.4%) in 3rd with 13 (6.4%) 22: 1726.286484 in 11th with 3 (6.0%) in 11th with 4 (6.9%) in 9th with 5 (0.3%) in 7th with 7 (0.3%) in 5th with 9 (7.1%) in 5th with 10 (5.7%) in 3rd with 13 (6.4%) in 3rd with 14 (6.4%) 23: 1964.921811 in 11th with 4 (6.0%) in 11th with 5 (6.9%) in 9th with 6 (0.3%) in 7th with 8 (0.3%) in 5th with 10 (7.1%) in 5th with 11 (5.7%) in 3rd with 14 (6.4%) in 3rd with 15 (6.4%) 24: 2236.545184 in 11th with 5 (6.0%) in 11th with 6 (6.9%) in 9th with 7 (0.3%) in 7th with 9 (0.3%) in 5th with 11 (7.1%) in 5th with 12 (5.7%) in 3rd with 15 (6.4%) in 3rd with 16 (6.4%) 25: 2545.716748 in 11th with 6 (6.0%) in 11th with 7 (6.9%) in 9th with 8 (0.3%) in 7th with 10 (0.3%) in 5th with 12 (7.1%) in 5th with 13 (5.7%) in 3rd with 16 (6.4%) in 3rd with 17 (6.4%) 26: 2897.627021 in 11th with 7 (6.0%) in 11th with 8 (6.9%) in 9th with 9 (0.3%) in 7th with 11 (0.3%) in 5th with 13 (7.1%) in 5th with 14 (5.7%) in 3rd with 17 (6.4%) in 3rd with 18 (6.4%) 27: 3298.184043 in 11th with 8 (6.0%) in 11th with 9 (6.9%) in 9th with 10 (0.3%) in 7th with 12 (0.3%) in 5th with 14 (7.1%) in 5th with 15 (5.7%) in 3rd with 18 (6.4%) in 3rd with 19 (6.4%) 28: 3754.112554 in 11th with 9 (6.0%) in 11th with 10 (6.9%) in 9th with 11 (0.3%) in 7th with 13 (0.3%) in 5th with 15 (7.1%) in 5th with 16 (5.7%) in 3rd with 19 (6.4%) in 3rd with 20 (6.4%) 29: 4273.066902 in 11th with 10 (6.0%) in 11th with 11 (6.9%) in 9th with 12 (0.3%) in 7th with 14 (0.3%) in 5th with 16 (7.1%) in 5th with 17 (5.7%) in 3rd with 20 (6.4%) in 3rd with 21 (6.4%) 30: 4863.759540 in 11th with 11 (6.0%) in 11th with 12 (6.9%) in 9th with 13 (0.3%) in 7th with 15 (0.3%) in 5th with 17 (7.1%) in 5th with 18 (5.7%) in 3rd with 21 (6.4%) in 3rd with 22 (6.4%) 31: 5536.107299 in 11th with 12 (6.0%) in 11th with 13 (6.9%) in 9th with 14 (0.3%) in 7th with 16 (0.3%) in 5th with 18 (7.1%) in 5th with 19 (5.7%) in 3rd with 22 (6.4%) in 3rd with 23 (6.4%) 32: 6301.397874 in 11th with 13 (6.0%) in 11th with 14 (6.9%) in 9th with 15 (0.3%) in 7th with 17 (0.3%) in 5th with 19 (7.1%) in 5th with 20 (5.7%) in 3rd with 23 (6.4%) in 3rd with 24 (6.4%) 33: 7172.479329 in 11th with 14 (6.0%) in 11th with 15 (6.9%) in 9th with 16 (0.3%) in 7th with 18 (0.3%) in 5th with 20 (7.1%) in 5th with 21 (5.7%) in 3rd with 24 (6.4%) in 3rd with 25 (6.4%) 34: 8163.975796 in 11th with 15 (6.0%) in 11th with 16 (6.9%) in 9th with 17 (0.3%) in 7th with 19 (0.3%) in 5th with 21 (7.1%) in 5th with 22 (5.7%) in 3rd with 25 (6.4%) in 3rd with 26 (6.4%) 35: 9292.532991 in 11th with 16 (6.0%) in 11th with 17 (6.9%) in 9th with 18 (0.3%) in 7th with 20 (0.3%) in 5th with 22 (7.1%) in 5th with 23 (5.7%) in 3rd with 26 (6.4%) in 3rd with 27 (6.4%) 36: 10577.097674 in 11th with 17 (6.0%) in 11th with 18 (6.9%) in 9th with 19 (0.3%) in 7th with 21 (0.3%) in 5th with 23 (7.1%) in 5th with 24 (5.7%) in 3rd with 27 (6.4%) in 3rd with 28 (6.4%) 37: 12039.235728 in 11th with 18 (6.0%) in 11th with 19 (6.9%) in 9th with 20 (0.3%) in 7th with 22 (0.3%) in 5th with 24 (7.1%) in 5th with 25 (5.7%) in 3rd with 28 (6.4%) in 3rd with 29 (6.4%) 38: 13703.494229 in 11th with 19 (6.0%) in 11th with 20 (6.9%) in 9th with 21 (0.3%) in 7th with 23 (0.3%) in 5th with 25 (7.1%) in 5th with 26 (5.7%) in 3rd with 29 (6.4%) in 3rd with 30 (6.4%) 39: 15597.813541 in 11th with 20 (6.0%) in 11th with 21 (6.9%) in 9th with 22 (0.3%) in 7th with 24 (0.3%) in 5th with 26 (7.1%) in 5th with 27 (5.7%) in 3rd with 30 (6.4%) in 3rd with 31 (6.4%)
Вот так выглядит спектр обычного прямоугольного сигнала (форма сигнала 1 из таблицы выше) с частотой 492 Гц и сэмплрейтом 44100 отсчётов в секунду:
Attachment:
PsedudoSin2.jpg [ 177.93 KiB | Viewed 11279 times ]
Попробовал перейти в плавающую точку при подготовке синуса - синус из 8 значений (0, 0.707, 1, 0.707, 0, -0.707, -1, -0.707) изобразился на спектрограмме вот так:
Attachment:
PsedudoSin8.jpg [ 170.2 KiB | Viewed 11295 times ]
Как можно видеть гармоники 3 и 5 задавились вовсе, а вот 7 и 9 стоят как вкопанные
P.S. А вот сделав синус из 16 значений (0, 0.383, 0.707, 0.924, 1 и т.д.) удалось таки убить 7 и 9 гармоники - остались 15 и 17 (на тех же -23.2 dB и -24.4 dB):
Attachment:
PsedudoSin16.jpg [ 152.98 KiB | Viewed 11295 times ]
Но это вариант чисто цифровой, для недоподелок он вряд ли подходит (кстати -23.2 dB это 0.069 или примерно 1/14 - т.е. 14 уровней яркости на точку будет Ок, а вот 16 - уже не ок)
В своём первом экспериментальном формате Vsound20 пришлось расширить паузу в синхросигнале, а то не очень устойчиво кадры детектировались - теперь при ширине 5512 сэмплов на кадр (8 FPS) сначала идёт 666 сэмплов паузы (15 мс), потом 333 сэмпла "все гудят" (7.5 мс) и потом 4512 сэмплов собственно сам "видимый" кадр. Кадр может быть и короче - в таком случае FPS будет выше, например для 10 FPS ширина "видимой" части кадра должна быть 3410 сэмплов, для 12 FPS - 2675 сэмплов, а для 15 FPS - 1940 сэмплов (при этом синхросигнал пауза-гундёж всё так же будет иметь ширину в 1000 сэмплов). Соотношение сторон соответственно тоже будет зависеть от частоты кадров (если мы примем, что при 8 FPS это широкий экран):
4 FPS - 4:1 (примерно) 5 FPS - 3:1 (примерно) 7 FPS - 2:1 (примерно) 8 FPS - 16:9 (обычный широкий экран) 10 FPS - 4:3 (старые экраны) 12 FPS - 1:1 (квадрат, если быть совсем точным, то 12.46 FPS) 18 FPS - 9:16 (как у вертикально снимающего телефона) 20 FPS - 1:2 (примерно) 24 FPS - 1:3 (примерно)
P.S. Всё тоже самое будет справедливо и для 40-строчного варианта (Vsound40)
Интересно, что 2.76:1 фильмы будут иметь при таком подходе 7000 сэмплов в кадре плюс 1000 сэмплов синхросигнал = 8000 или 5.5fps Википедия пишет (см. https://en.wikipedia.org/wiki/Aspect_ratio_(image)), что ещё бывают разрешения 3.555:1 (32:9) и даже 3.6:1 (18:5) - для таких FPS будет 4.4 и 4.35 соответственно...
Вот как пример - "Bad Apple" в родном соотношении сторон 4:3 при котором Vsound20 даёт частоту кадров 10.1:
P.S. Выкладываю первую порцию исходников: https://gitlab.com/nedopc/vsound Там оно пишет и играет raw-файлы (1 канал 16 бит со знаком 44100 Гц) Думаю написать игралку из MP3...
Попробовал записать на фиговенький магнитофон и воспроизвести обратно через Line-In на компе - вот результат:
Attachment:
Vsound20-shaos-tape.png [ 24.13 KiB | Viewed 11226 times ]
Видно, что помех прибавилось и младшие 3 частоты полностью забиты шумом от движка мафона (что полностью исключило срабатывание по синхросигналу смены кадров в декодирующей программе, которая ожидает 15мс тишины с уровнем ниже -18dB на всех частотах), однако в целом картинка видна
и гнать параллельно 8 битов и 1 бит чётности - тогда можно максимум 1045 байт в секунду передавать, а это тоже самое, что и примерно 12.5 килобит если сравнивать с последовательной передачей
P.S. плюс можно попробовать на более высоких частотах уталкивать больше битов за время одного периода частоты 9:
P.P.S. Проверил - одного периода мало, чтобы частоту отдетектить как следует и потом фильтр ещё продолжает "гудеть" какое-то время после того, как частота закончилась - видимо тут задержка фильтра имеет важное значение - сигнал не может быть сильно короче этой задержки, даже если он высокочастотный - например, чтобы уверенно обнаружить частоту 17, мне пришлось сигналить 60 тактов, а это уже больше 10 периодов на частоте 7741.29 Гц, причём сигнал появляется только через 100 тактов после начала (и эта задержка практически идентична что для частоты 9, что для частоты 17), а затухает сигнал после фильтра только через 260-280 тактов после того как он фактически закончился (опять таки для всех частот эта задержка примерно одинакова) - получается, чтобы устойчиво детектировать наличие сигнала, надо его иметь в течение 100 тактов и дать ему время на потухнуть - хотя бы ещё 100, а это уже только 220 "пачек" в секунду ну или только 220 байт, что уже совсем неинтересно (если добавить ещё синхру, то вообще порядка 150 байт в секунду только получается, но зато имеется возможность добавить коды Хамминга для корреции ошибок, т.к. я могу устойчиво передавать до 14 битов одновременно).
Высокие частоты слегка придавлены, поэтому кадры не всегда детектируются - задрал высокие цифровым эквалайзером в Audacity (возможно слегка переборщил):
P.S. Надо будет приобресть настоящий железный эквалайзер (подержанный) к этой сони-деке - без него видать не обойтись...
Вот оказывается бала детская игрушка в США в конце 80х, которая писала чёрно-белое видео 120x90 15 FPS на обычную аудиокассету, крутящуюся с 9-кратной скоростью (получалось 3.5 минуты на одной стороне):
А ты вживую не видел такую мгрушку? Честно говоря - очень прикольно! Не баловали нас такими игрушками в конце 80х...
Users browsing this forum: No registered users and 0 guests
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum