我正在尝试在 C++ 程序中解码来自三菱 VisiTel 电话图像发送器的图像信号。它被编码为用 ~1764Hz 的正弦波载波调制的模拟音频信号。
我正在从声卡输入中读取 44.1kHz 的有符号 8 位音频,这为载波提供了大约 25 个样本的周期。显然,模拟信号不会很好地落在样本边界上,因此假设这可能会偏移 +/-1 个样本。
我对信号进行解码的第一次尝试是获取信号的峰值并将其分配为像素值。这几乎奏效了,但似乎有一些“异相”像素,图像最终会歪斜。
最终,我通过将像素时钟与峰值解耦并将其与样本联系起来得到了一个信号。我还必须分别对每条扫描线进行计时,因为它不会以某种方式以像素倍数结束。
但这个信号并不完全正确,暗区不知何故倒转了出来。
暗区反转的图像
最终我意识到在明暗过渡处存在相位不连续性。这向我表明调制信号超过零点,导致结果信号中的相位不连续,因为它驱动载波为负,颠倒峰/谷关系。
AM 信号的不连续性
虽然我可以尝试修改我的状态机来检测这种类型的转换,但它似乎有点混乱并且容易出错。
我一直认为必须有一种适当的数学方法来解调调制器穿过零点的 AM 信号。但是我发现的所有示例似乎都只是简单的基于峰值的包络检测器。我发现的产品检测器解释似乎依赖于您的载波和相位完全正确,我不确定这是否仍然可以为我购买过零信号。
在调制器过零的地方解调 AM 信号的正确方法是什么?
问问题
317 次