Answers:
我目前正在实施声学FSK调制和解调。我不是信号处理人员...
既然您说您有匹配的滤波器,并且提到了非相干检测,那么我认为您已经是一个数字通信人员,成为DSP人员的步骤非常小:)
因此,执行此操作的经典方法是将两个滤波器的输出(幅度)平方(平方),将低通滤波器的结果取到,然后在滤波期间/之后进行抽取(如果可能),因此我们不会每秒浪费操作。
我给自己做了一个快速的实值带通信号FSK解调(我想如果再做一次,我将用一个组合的频率转换和一个低通滤波器替换两个带通滤波器,给我提供复杂的基带,或者扔了一个多相滤波器组在GNU Radio伴随下(在此流程图文件中)在GNU Radio中解决了这个问题,但无论如何):
关键是我们可能希望符号定时在分频和阈值块之间同步。之后我们可以做–经典的“微控制器和数字硬件设计”方法实际上是Muller&Mueller时钟接收器,并且在那也可以使用–但我们不要浪费斜坡信息。
因此,我将在此处添加一个多相时钟同步;我必须承认,我不能比同名哈里斯的汤姆汤姆在同名的GNU Radio块的文档中做得更好:
使用多相滤波器组的定时同步器。
该模块通过使滤波信号的导数最小化来执行PAM信号的时序同步,从而使SNR最大化并使ISI最小化。
这种方法通过建立两个滤波器组来起作用。一个滤波器组包含信号的脉冲整形匹配滤波器(例如根升余弦滤波器),其中滤波器组的每个分支都包含滤波器的不同相位。第二个滤波器组包含第一个滤波器组中滤波器的导数。考虑到时域,第一个滤波器组包含具有正弦形状的滤波器。我们希望将要采样的输出信号对准正弦形状的峰值。正弦的衍生物包含在所述的最大点零(正弦(0 )= 1 ,)。此外,零点周围的区域是相对线性的。我们利用这一事实来生成错误信号。
如果信号出的派生滤波器被为我个过滤器,和匹配滤波器的输出为X 我 [ Ñ ],我们计算误差为:
该方程式将实部和虚部的误差取平均值。我们乘以信号本身有两个原因。首先,符号可能是正向还是负向,但是我们希望误差项始终告诉我们朝着相同的方向前进,具体取决于零点位于哪一侧。的符号会调整误差项以执行此操作。其次,x i [ n ]的大小取决于符号的幅度来缩放误差项,因此较大的信号为我们提供了更强的误差项,因为我们对该符号的值更有信心。使用x i [ n ]的大小对于低信噪比的信号而言,它不仅适用于符号,而且尤其适用。
因此,适当地将此块参数化(并可能减少bpf_decim
并lpf_decim
为同步器提供更大的扩展空间来移相),您可以建立一个非常稳定的符号定时恢复,这对于您的应用程序来说完全是过大的😁
由于您正在使用声卡的两端进行采样,并且由于我假设您不必处理多普勒,因此符号率与载波频率具有固定的关系(例如,发送方具有较高的载波,且周期内有8个声卡样本,而一个符号总是要说128个样本,因此有固定的比率),您可以使用一个捷径:
好吧,由于您有一个工作的解调器,当没有信号出现时,解调器可能会运行得太不同步,只需使用已知的固定数据序列来查找您的数据包。