Audio 调幅解调的gnuradio相位漂移

Audio 调幅解调的gnuradio相位漂移,audio,signal-processing,gnuradio,gnuradio-companion,Audio,Signal Processing,Gnuradio,Gnuradio Companion,我正在使用GNUradio和一个便宜的SDR开始一个项目 该项目的一部分要求我生成一个参考音频音调,并将该音调的相位与解调音频进行比较 为了模拟系统的这一部分,我生成了一个简单的GNUradio流程图: 我对源音频和解调音频有一些问题,因为它们会相对漂移。这发生在原始流程图上的作用域同步上。为了帮助排除故障,我通过声卡的第二个通道发送解调后的音频,并在外部示波器上监测两个音频流以及调制后的射频: 起初一切似乎都很好,但解调后的音频相对于原始源和射频漂移: 我的问题是:我是在流程图中做错了

我正在使用GNUradio和一个便宜的SDR开始一个项目

该项目的一部分要求我生成一个参考音频音调,并将该音调的相位与解调音频进行比较

为了模拟系统的这一部分,我生成了一个简单的GNUradio流程图:

我对源音频和解调音频有一些问题,因为它们会相对漂移。这发生在原始流程图上的作用域同步上。为了帮助排除故障,我通过声卡的第二个通道发送解调后的音频,并在外部示波器上监测两个音频流以及调制后的射频:

起初一切似乎都很好,但解调后的音频相对于原始源和射频漂移:

我的问题是:我是在流程图中做错了什么,还是我对廉价SDR的性能期望过高


提前感谢您提供的任何见解

如果没有全数字模拟,或者只有一个振荡器的全模拟电路,您将无法看到零相位漂移,因为没有两个(物理)振荡器具有相同的频率

在您的案例中,有两个相关的振荡器:

  • RTL-SDR单元中的采样时钟
  • 声卡输出中的样本时钟
  • 在GNU无线电流程图中,没有时间参考本身,一切都取决于连接到硬件的源和汇

    流程图中的相关源是RTL-SDR硬件;只要它的振荡器与其标称值(28.8 MHz,恰巧如此)不同,它产生的一切都将是绝对意义上的离频(RF载波频率和解调输出的音频频率)

    但实际上你没有绝对的频率参考;您拥有声卡产生的音调。声卡有自己的振荡器,它决定样本转换为模拟信号的速率,从而决定流程图中样本的消耗速率

    因此,参考信号将以两个振荡器之间的频率误差差确定的速率相对于接收和解调信号漂移


    此外,由于您的声卡将以与RTL-SDR产生样本的实时速率稍有不同的速率接收来自流程图的样本,因此随着错误的累积,您将注意到音频中的周期性故障,必须加以处理;它们将立即开始出现(如果源比接收器慢,则需要声卡播放静音),或者在缓冲区达到最大大小的延迟后(如果源比接收器快,则需要RTL-SDR丢弃一些样本)。

    仅供参考,一般来说,你不应该期望人们从外部网站下载文件来获取你的部分问题。你现在有足够的声誉,嵌入尽可能多的链接或图像,因为你喜欢;我建议您编辑问题以嵌入图像。感谢您的评论,我按照您的建议编辑了问题。感谢您的回复。一个小澄清:调制源不是射频信号发生器(发射机)中的音频振荡器,调制是在GNU流程图中生成的,并通过声卡发送到sig gen。也就是说,RTL-SDR和计算机声卡之间仍然存在差异。既然所有的东西都是由GNU无线电控制的,那么有没有办法同步这些东西,以便确定源信号和解调结果之间的相对相位,而不一定是零相位?@EdColeman我已经更新了我的答案来纠正这一部分。是的,您可以通过使用公共时钟参考(传统上为10 MHz)来获得同步,但这是RTL-SDR或消费声卡上都没有的高端功能。例如,您可以使用Ettus USRP来实现这一点。再次感谢您的回答。即使使用USRP,您也必须使用一个明确支持调谐后恒定相位的设备,以及一个时钟分配器,以便将PPS和10MHz都传输到所有涉及的USRP,并且您必须对它们进行编程,以便在同一时刻进行调谐。