两年前尝试做了Elektor SDR,详见https://blog.csdn.net/zkf0100007/article/details/107030610?spm=1001.2014.3001.5501
效果确实不错,但是解调都是在PC端实现,一直想用FPGA来做解调,先从最简单的AM做起。因为Elektor SDR本身就是按Arduino接口做的,可以直接插到PYNQ-Z2上,用一根音频线将输出接到PYNQ-Z2的LINE IN即可。
对Elektor SDR用LTspice做了简单的仿真。Elektor SDR的原理很简单,若中频IF=12KHz,要接收900KHz的信号,则SI5351输出为4*(900-12)KHz,经扭环计数器输出4路相位差为0度、90度、180度和270度的信号用于控制模拟开关,完成下变频,变频后的中频信号经运放放大后,从3.5mm音频插座输出。仿真波形如下图所示,从下到上依次为:调幅波、中频和解调结果。
PYNQ-Z2通过ADAU1761的LINE IN对中频信号进行采集,然后采用sqrt(I * I+Q * Q)进行解调,解调结果送到ADAU1761输出音频。解调部分的框图如下:
最终的接收效果还不错。