网志

用光绘画以测量时间

杰森·萨克斯(Jason Sachs)2020年12月26日

最近,我在家工作时面临两难的境地。我需要验证一阶的实现 ∑-Δ调制 用于调整乐橙云app的亮度。 (我已经在 软件工程师的调制选择。)但是,我没有示波器。

然后我想起了一种叫做 “light painting”:基本上是长时间曝光的照片,快门打开时光源在其中移动。一世’d首先在杂志文章中看到了一些不寻常的照片,其中包括 埃里克·斯托勒‘s 1979 work, 内窥镜。 (我希望我能记得该杂志!这篇文章可能出自《游戏》杂志或《国家地理》,大约1983-1986年。)

内窥镜, ©1979年:埃里克·史泰勒(Eric Staller)。经许可转载。

斯托勒(Saller)晚上在走廊上走过,并以圆形和菱形形状安装了两串圣诞灯泡,在他身后留下了发光的痕迹,从而创造了它。因此,画家也在画中,但又如此朦胧又模糊,以致于他被有效地隐藏了。

本文以PDF格式提供,便于打印

从技术上讲 所有 照片是轻绘画;光线落在感光板,胶片或传感器上,随着光能在图像的不同部分累积而引起化学或电气变化。

它在相当早的时候就已经用作定量测量的方法:例如,参见Eadweard Muybridge’s 1878年的十二张精心拍打的小跑照片系列 或者 的生理研究ÉTienne-Jules Marey和Georges Demeny始于1880年代.

击剑运动员,动作学习,乔治·德梅尼(Georges Demeny),1906年

阳光下没有新事物。

阴极射线管 在20世纪数十年来一直使用光绘技术,在1930年代风靡一时,并在2003-2005年左右被LCD平板显示器取代之前主导了显示器市场。 CRT的原理是向覆盖荧光粉的屏幕发射电子束,并用电磁体控制电子束,使其可以扫描整个CRT屏幕。当然,它们被电视和计算机显示器使用— 和 oscilloscopes (也在1930年代),其中输入电压信号控制电子束的水平和垂直位置。使用线性扫描的水平输入,将感兴趣的信号用作垂直输入,则可以直接可视化波形。

正如我所说,我不’家里没有示波器。但是我 有一台数码相机,我想我可以对我的sigma-delta调制的乐橙云app拍照,使相机足够平滑地移动,以便乐橙云app点在图像上扫描。

结果如下所示。它’在按下快门释放器的同时同步移动相机非常困难,但是如果我尝试了一下,我发现至少可以得到一到两张好照片。

这是一个p = 2048,q = 4096,曝光时间为1/10秒,滴答频率为(aka“chip rate”)频率为500Hz,因此名义上照片中应该有50位样本。如果仔细观察绿色闪烁的乐橙云app,您会发现24个点之间有23个间隙,显示出47到49位样本之间的某处。 (我们不’不知道照片是在绿色乐橙云app亮起还是熄灭的情况下开始和结束的。)还不错,至少’s consistent.

由于我有一个带机械快门的相机和一个带有石英晶体的电路板,因此’m倾向于相信乐橙云app时序更精确,并且曝光时间更可能在96毫秒左右,而不是标称的100毫秒。

红色乐橙云app是我无法控制的通信乐橙云app,但很可能是’s也以500Hz左右的频率闪烁。

绿色乐橙云app亮得多;太亮了,事实上,我认为’导致相机出现非线性’的图像响应。绿色的“blobs” aren’散焦工件。

无论如何,接下来是p = 2176,q = 4096(p / q = 17/32),曝光时间为1/10秒。

这里的绿色乐橙云app显示以下位序列(1 =亮,0 =灭):

1010101101010101010101101010101010101011010101

这个对吗?

observed_sequence = '1010101101010101010101101010101010101011010101'

def sigmadelta(p,q,accum_init=0):
    accum = accum_init
    while True:
        accum += p
        if accum >= q:
            out = 1
            accum -= q
        else:
            out = 0
        yield out
    
def sdsequence(p,q,accum_init,n=46,off='0',on='1'):
    sequence = ''
    for k,out in enumerate(sigmadelta(p,q,accum_init)):
        if k >= n:
            break
        sequence += '1' if out == 1 else '0'
    return sequence

print repr(observed_sequence)
sdsequence(2176,4096,3270)
'1010101101010101010101101010101010101011010101'
'1010101101010101010101101010101010101011010101'

它是!首先让我感到惊讶的是,双1脉冲之间的单1脉冲数是不同的,在6到7个单1脉冲之间交替,但是’这就是数学计算的方式。

这里’s用p = 1920,q = 4096、1 / 10秒曝光的第三张照片:

这里 the observed bit sequence is

1010101001010101010101010010101010101010010101
observed_sequence = '1010101001010101010101010010101010101010010101'
print repr(observed_sequence)
sdsequence(1920,4096,3100)
'1010101001010101010101010010101010101010010101'
'1010101001010101010101010010101010101010010101'

Works for me! I just wanted to make sure the 芯片率 looked correct 和 the overall sequence was 做 ing what I expected.

I’d much rather use a “real”测试设备,但在紧要关头,相机表现不错。起初,我在一个昏暗的房间里拍照,除了板上的乐橙云app以外,什么都没打开,这很痛苦… then I 真实ized, oh, I just need to keep the F-stop high enough that the ambient light in the room is low, 和 the only thing that will show up in the image is the light trail of the 乐橙云apps.

祝您节日快乐,新年快乐!


©2020 Jason M. Sachs,保留所有权利。


杰森·萨克斯(Jason Sachs)上一篇文章:
   烧焦器,第3部分:具有双缓冲和旋转壁炉的裸机并发

要发布对评论的回复,请单击每个评论所附的“回复”按钮。要发布新评论(而不是回复评论),请查看评论顶部的“写评论”标签。

注册后,您可以参加所有相关网站上的论坛,并获得所有pdf下载的访问权限。

注册

我同意 使用条款隐私政策.

试试我们偶尔但很受欢迎的时事通讯。非常容易退订。
或登录