如何将图片编码到不同频点上,捕获在频谱上跳动的MIKU
这篇文章和数字信号处理有关,或者说跟SDR软件无线电有关,只是考虑这样一个问题,如何将一张图片,编码放到不同的频点上,使得接收方能够通过SDR模块,捕获这样的信号,然后通过绘制频谱,来得到我们编码的那张图片。
如果觉得文字太多可以直接看视频:
视频:如何用收音机接收图片?将图片编码到不同频点上;捕获在频谱上跳动的
链接:https://www.bilibili.com/video/BV1CoxSeMEUx/?vd_source=e2dc1cb11e04956b1f0ba77bddb845e6
这种技术啊,在早期可能会叫做SSTV慢扫描电视,也就是通过无线连信号,来传送图片的一种技术,比如这个声音,就是将左侧这张图片,转换成深深信号,然后加载到无线电信号上,在接收端呢,就会通过绘制拼谱,会得到这样一张图片,它的纵轴是频点,代表着不同的频点,横轴呢则是代表着时间,这每一条每一列,都代表着某一时刻的,不同频率上的信号的强度。
这样我们就知道,不同的频点的校强度啊,不同的信号强度对应着不同的颜色,而不同的频点,就可以对应图片当中不同的行,而时间轴则和图片的列对应起来,这样我们将每一个,像素点,解析成不同时刻的不同频率的,不同强度的信号,那么将它们组合起来,就可以将图片发送给接收方,右侧呢则是更,带宽更高的一种技术,他可能会采用,十几兆这样的无线电信号,来发送图片和视频,当然这张图是通过气球将,这个摄像头以及发送器,送到,然后通过这样的技术,HMTV业余的电视信号,来传送到地面的接收站上。
从前为了接收这样的信号,可能会需要这么一系列的设备,我们至少需要对应,频段范围的天线,比如一个,兆赫兹级别的信号,然后需要一个显示器,当然可能还需要专门的电源,以及调解调工具,在上世纪,当然这设备都是比较大,可能需要摆满一间小屋子,而在今天,我们借助个人电脑,以及这样一个RTL的软件无线电模块,这是非常小的只有,跟u盘差不多大小,几十克就可能实现相同的功能,那在解析方面,我们就完全使用数字解析软件,比如说开源的SDR++,这里就显示着某一时刻的,这上面,是某一时刻的接收到型号的频谱,这下面,则是此前累积的各个时间点上的频谱,通过前述的那种,强度、频率以及颜色之间的对应关系,就可能解析出发送短发送的图片
那么后面我们就讨论怎么样去将图片,加载到或者说调制成相应的信号,首先我们得回顾FFT的一些概念,FFT即就快速傅里叶变换就是将,我们采集到的数字信号做一种呃,傅里叶,这种处理,使得时域上的信号转变为频谱。
左侧呢,给出两个例子,这是三种频率的不同频率的单一信号,每种频率就每一个信号,它都代表着单一频率信号,那么在这边是它们对应的频谱,可以看到不同的频率信号呢,在频谱上,它的特征则表示为在不同的频点上,有着较高的强度,而在具有,许多不同频率的这种复杂的信号当中,我们就可以通过频谱来观察到这,样的信号当中具有哪些哪些频率,当然了也是通过频谱上,某一频点处的强度来获知的,这些不那么突出的频点,我们则认为,是没有没有,有用的信号的,左侧右侧呢,则是更细致的给出来FFT的效果,我们可以看到,在时域上的一个,这种PWM波,或者这种方波型号,可以在频域上分解为离散的。
为了实现上述目的,我们首先要做的工作就是确定,强度和绘制结果的颜色之间的关系,在lab当中,它提供了至少这样一些映射关系,比如默认的映射关系,它的最高点对应着黄色,而极低点呢,则对应着蓝色,另外两种也有类似的对应关系,分别是黄绿以及绿蓝这样的极值映射,可以使用右侧这样的代码,在 当中绘制出这样的图片。
当然也可以使用colormap去设置,或者去选择,适合的映射关系,如果我们想要显示的图片,它的主要色彩是蓝色系的,那么就选择这样winer,信号但是呢,我们在后面的演示当中,嗯认为default这种颜色是更清晰的,或者更对比度更强,更更能显示出,我们到底发生了一张什么样的图片,我们在后面的演示当中,就采用default这种colormap。
这里采用的例子是一个从,初音未来的图片 Miku,整个处理流程包含以下几个步骤,第一个和前面提到的一样,选择一个合适的颜色与,像素点颜色这种能量值的对应关系,然后,将我们选择的图片大小进行重新调整,以适应咱们的转换算法,比如说将一个,或者将采样为,而后则需要找到,每一个像素点最接近的颜色值,由于在lab的colormap当中,它也是离散对应的,它不可能说,每一种颜色,都有与之完全相对应的颜色值,所以,我们需要通过欧式几何的距离算法,来得到RGB值最为接近的另一种颜色,而后将这种颜色,根据它在光谱或者它的色谱上的位置,而转换成对应平点的强度,这里我可以看到细节的一些东西,比如说这是右左侧这张图片的,每一个像素点的对应的,颜色值在色谱上的位置,那么就可以根据它的位置,比如说 ,来决定这一点处,他所对应的那个正弦信号的值,也就是说具体的,每一行,对应着一个复杂的或者合成的信号,而每一列则对应着不同的频点,我们从第一行开始,将每将它们转换成一个复杂的信号,第一行的第一个点,对应着起始平点位置的一个正线信号,第二个点,则对应下一平点处的正弦信号,将每一行的这,得到此图当中的,正弦信号,这个则是上面,信号的叠加结果,我们绘制出相应的频谱,可以看到在只在某一个频点处,有较为集中的高幅值的信号分布
当然第一行看起来不是那么的明显,我们可以看稍微居中一点,中间的第,从这张图中可以看到,第,这正好对应着人物的身体部分,这是符合预期的,那么将这,按时间顺序排列以后,则可以得到左侧这张图片,嗯由于这里的算法可能会存在一些,频谱的混叠,可以看到纵向会有一些竖的条纹,但这并并不影响,在接收端接收到这样的信号,右下图呢,左下图则显示了在接收端,逐渐在屏幕上印出我们发射发射,这张图片的过程