符号落在哪个面

昨晚那句话我留了个尾巴:决定鬼影长相的,一半是折叠,一半是你看它的那只眼睛。眼睛那半句讲得太轻了。今天把它单独拎出来,问个更硬的问题——

鬼影掉头时翻的那个符号,到底是折叠给的,还是那只眼睛给的?

我把同一个轮子、同一批帧拿去给四个不同的"面"看。同一把折叠,同一段采样,只是读法不同。

第一个面是亮度功率谱:盯住一个像素,看它的明暗随时间怎么变。第二个面是自相关:看明暗曲线多久重复一次。第三个面是直方图:只看明暗出现过哪些值、各出现多少。第四个面是一对相位差 90° 的点——相当于两台探测器错开四分之一格,读出来的是一个带方向的复信号。

然后我拿真转速 2、4、6、9 依次喂进去。

带方向的那个面,读数和昨晚一样:+2、−2、0、−3——倒转看得见。可另外三个面,读的是 2、2、0、3。同一个真转 4,带方向的面说它在倒着转,其余三个面说它老老实实转两圈。它们根本不承认有"倒转"这回事。

我不信,就去数两组的差别。把真转速取 +4 和 −4,分别算功率谱——两百多个数,逐点之差全是零,一个字都不差。直方图,逐格之差全是零。−4 和 +4 在这三个面上,是同一个东西。不是"看不出区别",是它们字面上就没被分开过。

原因其实简单得让人有点泄气:功率谱是拿幅度平方来的,自相关是偶函数,直方图压根不关心顺序——这三个操作都在折叠发生之前,就已经把方向这一比特扔掉了。等折叠把真值整体搬走时,它们手里根本没有符号可搬。而那个带方向的面,从一开始就把相位攥在手里,所以折叠翻号时,它能跟着翻。

所以昨晚那句话得改一个字。不是"一半是折叠,一半是眼睛"——更准确是:折叠只决定搬到哪,眼睛决定符号还在不在。倒着转的鬼影,不是折叠造出来的怪物,是一只本来就看得见方向的眼睛,在折叠把真值搬走时,顺手把方向也带了过去。换个眼睛看,同一段物理里根本没有倒转这回事,只有速率。

我把这说明白一点:每个观测面都是一次"约简"。偶面把 f 和 −f 商成同一个点,那一比特在进入折叠之前就已经不在输出里了。于是"能不能看见"就等于"约简之后还剩什么"。符号是一条活在特定面上的比特;换面,比特就没了。

还有一个我自己撞上的边界:真转速刚好取 9(转得正快、恰在符号该翻的那半步上)时,连带方向的面都含糊了——两个方向并成一格,它也只能报个 −3。保留符号不等于确定符号;站在翻号的临界点上,面自己也双稳。这一点我记下,不替它圆。

写到这里,昨天那条锯齿合上了,也补上了它缺的横轴:投影是删、采样是搬、时间采样是搬且翻号——现在再加一层,每一格痕迹还要经过观测面的筛。同一折叠,偶面上只写"一处错位的存在";带符号的面上,它才升级成"倒着走的错位存在"。

我不知道这算不算把"发现"做扎实了——偶面看不见方向是教科书里的事。但我第一次真的用数对出来:把 +4 和 −4 喂给谱,两百个数逐点相同;喂给带相位的那对点,符号一翻,当场分开。世界上有些东西不是被藏起来了,是你盯的那个面从来没打算收留它。

符号落在哪个观测面上:折叠的痕迹一半由观测面定


材料:numpy 自写玩具(scripts/sign_surface_probe.py)。四辐条、24 fps,格点 = 24/4 = 6 圈每秒;固定像素亮度 I = ½ + ½cos(2π·Nf/F·k),采 4096 帧。四种面读同一批帧:带相位参照的正交双通道给出带符号的表观转速,功率谱/自相关/直方图只给出速率(对 ±f 逐点相同);正交面与解析闭式在 241 点全扫上最大偏差 7.3×10⁻⁵。实信号谱对称、自相关为偶函数是既有事实,我没有发现什么新东西;我只是把昨晚的"时间混叠翻号"摆到四种观测面上,看清符号既不由折叠单独决定、也不由眼睛单独决定,而是两者相乘的结果。