矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 3922|回复: 24

关于使用数字模式和机器学习方法接收CW信号的想法

[复制链接]
     
发表于 2022-12-16 08:56:53 | 显示全部楼层 |阅读模式

上次看到sjp前辈用mc13135做的40米接收机后,就像看到了一扇新打开的门,非常感兴趣,也有很多想法。有一些在下面的回帖中提到了 (http://www.crystalradio.cn/forum.php?mod=viewthread&tid=2047537&page=2#pid24864595 ) ,并且已经下单了一些关键器件,如芯片和晶振,准备假期动手做一些测试和验证。(其实还有些延伸的想法,比如利用限幅放大之后的信号,提取载波的频率和相位信息,进而做相干检波,不过看到一些资料,说跟ASK的包络检波比较,相干检波的性能提升并不明显,有些说是1个dB,有些说是3个dB)


我上次的回帖中,核心想法是把CW信号的接收转成数字模式,即相比之前全靠人耳去听和判断摩尔斯代码,现在是借助OOK/ASK技术来判断。

这两天我又有了一些新的想法,与各位分享。这次想法的核心有两个。这两个想法都会用到单片机,但我认为这并不是太大的问题。

一个是OOK/ASK方法的延续,具体而言, 就是把手工发送的CW摩尔斯码序列当作是高速OOK/ASK数字通信信道上传送的数据。比如数字信号的速率可能是每秒1000比特(1kbps),而在20WPM (20个词每分钟,每个次平均4个滴答组合)的速率下,CW的等效传输速率其实是80个滴答信号,因此这每个滴答信号平均下来对应12.5比特。 这意味着:当利用单片机的模数转换之后,单片机有机会在12.5个bit中进行判断,当前收到的信号是滴还是答。我可以看到这里面可以有很多算法可以弄。当然,效果好坏我不知道,至少有很多可能性。

另外一个想法是建立在上一个想法基础之上的,就是:得到一个二进制采样序列之后,我们可以用怎样的算法来解调出原始的滴答信号,并作出进一步译码,得到字母序列。具体而言,我觉得可以尝试使用当前比较热门的神经网络技术,尤其是跟自然语言(Natural Language Processing, NLP)相关的技术。本质上,通过CW方式传送过来的摩尔斯码,等价于一个很远的地方,有人扯着喉咙加:di di di da da da,而接收方则是通过耳朵和我们的听觉系统去理解其中的含义,这正是当前自然语言处理技术要解决的问题(比如语音识别,把人说话的声音转换成文字输出)。从另外一个角度看,这种方法是用一个专用的神经网络模型来模拟/替代人类大脑中处理CW摩尔斯码时所激活的一些列神经细胞的功能。有了这个想法之后,我随便搜索了一下,发现有人已经有了类似的想法(比如下面这个开源的软件提到一些尝试: https://github.com/f4exb/sdrangel/issues/603 ,而另外一个则给出了一些测试代码: https://github.com/f4exb/morsean ... ngle-ord36e96.ipynb )。不过我还没有做进一步测试,不知道效果怎么样。另外,这些都是针对SDR设备的,用Python+各种数据处理和机器学习的框架,而我更希望是一个轻量级的,能够在STM32这样的单片机里面就能够运行。

总而言之,我觉得CW摩尔斯码通信是一个很古老的技术,但是在今天的技术加持之下(例如基于概率和神经网络的滤波器和译码器等),应该可以推进到一个新的极限高度 (比如负信噪比下仍能接收,而这对人耳收听来说,应该是不可能的)。

有点罗嗦,有点空想,我自己也不知道是否能实现(主要是时间的问题),但是在这个过程中肯定能学到很多新的东西,更何况,追求极限性能本身就是让人兴奋的事情。以此与诸位共享。

     
 楼主| 发表于 2022-12-21 12:13:46 | 显示全部楼层
本帖最后由 zkh.frank 于 2022-12-21 12:16 编辑
martian618 发表于 2022-12-21 11:29
同频也可以实现相干检波,且性能与同相是一样的。为解决相位模糊问题,可采用正交双通道。

至于相参 ...



我猜想你说的可能是IQ解调,不知道是否正确。我从网上了解到的信息是:这种IQ解调算是零中频接收,直接得到IQ两路正交的基带信号。但是,要求这两个通道的对称性要求比较高。这种思路国外已经有不少套件是这样做的:利用si5351产生两路正交本振信号,然后控制某种总线开关芯片,得到的两路输出经过低通之后就是IQ信号。

还有另外一种技术,超外差与IQ的结合:模拟段先用超外差得到某个中频信号,然后对中频信号采样,转换到数字域,然后在数字域产生两路相位差90度的本振信号,与采样的中频信号分别相乘,得到两路IQ信号,后面再做处理。

我觉得后者可以试一试,比如变成一个低于20KHz的低中频,然后声卡采样,再按照上面的方法来处理。

评分

1

查看全部评分

回复 支持 1 反对 0

使用道具 举报

     
发表于 2022-12-17 15:25:03 来自手机 | 显示全部楼层
机器学习不能提高误码率。但若信号之间有相关性,那么机器学习可以推测出原始信号,仅此而已。

评分

1

查看全部评分

回复 支持 1 反对 0

使用道具 举报

     
发表于 2022-12-16 10:40:30 | 显示全部楼层

“比如负信噪比下仍能接收,而这对人耳收听来说,应该是不可能的”

真的是这样的吗?


回复 支持 反对

使用道具 举报

     
发表于 2022-12-16 11:56:13 | 显示全部楼层
你就用个麦克风插电脑,程序用python写不就行了,调试没问题了,移到stm32上去
回复 支持 反对

使用道具 举报

     
发表于 2022-12-16 12:57:39 | 显示全部楼层
这个想法很好,也曾经搜集了很多资料,门槛有点高,小众产品,投入多了点……
回复 支持 反对

使用道具 举报

     
发表于 2022-12-16 13:41:39 | 显示全部楼层
相干检波要同频同相吧?最好的还是IQ解调,我也是瞎想,不知道对不对。
回复 支持 反对

使用道具 举报

     
发表于 2022-12-16 17:38:50 | 显示全部楼层
用Arduino做译码的代码挺多,有用麦克风拾取音频的、用LM567解码再译码的,做过简单实验,收/发都是单片机,而且直连可以正确译码,一旦接入电台,译码器就变成玩具了
回复 支持 反对

使用道具 举报

     
发表于 2022-12-16 20:26:48 | 显示全部楼层
机器学习技术可以对传输信号进行降噪、修补和润色处理,可参照在用的AI图像修复方案;AI也能做语义识别与补全。近几年很火的OpenAI GPT-x涵盖了上述全部需求。
回复 支持 反对

使用道具 举报

     
发表于 2022-12-16 23:03:53 | 显示全部楼层
SDR对于等幅报早就有encode和decode的插件,接收自动转文本,发射可以从文本自动发送,你耳机里听到的滴滴答答有很多都是机器自动发送的
回复 支持 反对

使用道具 举报

     
发表于 2022-12-17 02:45:54 | 显示全部楼层
电传打字机了解一下
回复 支持 反对

使用道具 举报

     
发表于 2022-12-17 15:16:23 来自手机 | 显示全部楼层
衅躁比影响的是误码率,低衅躁比意味着高误码率,这不是算法能影响的。
回复 支持 反对

使用道具 举报

     
发表于 2022-12-17 15:40:19 | 显示全部楼层
Aline744 发表于 2022-12-17 15:25
机器学习不能提高误码率。但若信号之间有相关性,那么机器学习可以推测出原始信号,仅此而已。

不能降低误码率。
回复 支持 反对

使用道具 举报

     
发表于 2022-12-17 15:46:51 | 显示全部楼层
本帖最后由 martian618 于 2022-12-17 15:51 编辑

通信基本理论决定了最佳接受条件下所能达到的误码率,

采用机器学习或者神经网络技术都不能降低误码率。

由于采用最佳接收时解调系统相对较为复杂,

所以如楼主那样探索新的解调方案还是有一定的现实意义的。
回复 支持 反对

使用道具 举报

     
发表于 2022-12-17 15:53:33 | 显示全部楼层
world_all 发表于 2022-12-16 13:41
相干检波要同频同相吧?最好的还是IQ解调,我也是瞎想,不知道对不对。


相干检波需要同频。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-12-20 18:24:28 | 显示全部楼层
我不是学通信的,对于相干解调也是一知半解。我觉得相干解调应该是要同频同相的。如果不同频,则解调出来的信号不是在直流附近(其实也还好),
但是如果不同相,那么解调结果会带一个cos(phi)的系数,这个phi是指本振与信号之间的额相位差。

为了验证一些想法,我随便写了一个Python程序(根据我对相干解调的理解)。程序如下,也可以在附件中下载。

大致思路是:首先产生一个均值为0, 标准差为20的高斯白噪声(这个标准差的平方可以达标噪声的能量)。然后,产生一个正弦波信号,信号幅度在-1~+1之间。接着把这两个信号加起来,就相当于收到了一个带噪声的信号。信噪比我不是很确信应该怎么计算,但是应该是一个负数了吧。如果把叠加后的时域波形显示出来,看不出正弦波的痕迹。

后面那一步是模拟相干解调。具体做法是:对前面产生的正弦波信号进行移位(本质上是移相),然后和噪声与信号的混合体相乘。为了形象的观察移相对解调结果的影响,我通过一个循环来遍历不同的相位偏移,并把每次的结果都存起来。

理论上,移相后的本地载波LO与带噪信号相乘之后,应该还要经过一个低通滤波器。这里我偷懒,直接对序列求均值(我认为这也是一个低通滤波器)。

为了做对比,我把移相后的本地载波LO也与纯噪声相乘,然后把均值也保存起来。

最终,我把这两个序列画出来。蓝色的曲线是带噪信号解调在不同相移条件下的结果。可以看出:当相移是0时,也就是载波与收到的信号同相位时,经过低通能检测到的输出是最大的。而对比纯噪声信号,则要小很多。

我想这已经能够证明:同频同相的相干解调技术,如果真的能完全做到同相位的话,的确很厉害。对于CW摩尔斯码这种OOK类型的信号,关键是检测信号的有无,应该可以做到负信噪比(S/N)接收。

当然,问题是如何做到本地载波与收到的信号同相。我觉得数字信号处理也许可行。举例来说:在模拟域变频到一个相对低中频后,模数转换到数字域,然后在数字域进行我程序中类似的移相搜索,找到值最大的那个相位差。当然,实现的时候可能没有这么简单,比如计算量的问题,比如判别门限的自适应学习等。

## ====== The Python Code ======
import numpy as np
from matplotlib import pyplot as plt


# 下面是产生正态分布的噪声,有两个参数
# mu 是均值,取0, sigma是标准差,取100 (非常大了)
mu = 0
sigma = 20
N = 10000 # 产生10000个随机数
noise = np.random.normal(mu, sigma, N)

# 下面是产生信号
step = 0.1
i = np.arange(0, N*step, step)
signal = np.sin(i) # 信号为正弦函数,范围是[-1, 1]

# 下面是将信号和噪声叠加在一起,模拟接收到的、含噪声
# 的信号。 这时的信噪比我也不知道是怎么算,但是一定是
# 小于0的, 因为噪声的幅度的标准差是100,而信号幅度是+/-1
noise_plus_signal = noise + signal

# 下面是模拟相干检波。相干检波理想情况下要求同频同相
# 我们直接使用signal数组来模拟本地载波,但是通过不同
# 的移位来模拟相位差异。当相位差为(3.14/0.1)的整数倍
# 时( 包括0 ),那么本地载波与接收到的信号是同频同相

# 理论上,这里还要做一个低通滤波,但我这里简化处理,直接
# 求均值(我认为这其实也是一种低通)
PI = 3.14
ret_1 = []
ret_2 = []
for phase in range(0,int(PI/0.1)*10):
    # 将phase差异转变成要移位的位置数量
    #shift_offset = int(10*phase)
    #print("phase shift rotation: ", shift_offset)
    # 通过移位产生本地载波
    LO = np.roll(signal, phase)
    # product_1是本地载波与接收到的噪声信号混合体相乘
    product_1 = LO * noise_plus_signal
    # product_2是本地载波与噪声信号相乘
    product_2 = LO * noise
    mean_1 = product_1.mean()
    mean_2 = product_2.mean()
    ret_1.append(mean_1)
    ret_2.append(mean_2)

plt.plot(ret_1, "b", label="Signal+Noise N(0,20)")
plt.plot(ret_2, "r", label="noise only N(0,20)")
plt.legend(loc="upper right")
plt.grid(True)
plt.savefig("coherent_detector.jpg")
plt.show()

CoherentDetectorTesting

CoherentDetectorTesting

coherent_detector.zip

1.27 KB, 下载次数: 49

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-5-6 03:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表