0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用I/Q信号设计稳健的FSK解码器

科技观察员 来源:allaboutcircuits 作者:罗伯特·凯姆 2022-05-07 16:18 次阅读

一种改进的算法,结合正交调制,可以实现不受相位失准影响的FSK解码。

FSK 符号的频率可以通过检查将接收信号乘以参考信号产生的波形的直流偏移来识别。这是一种简单有效的技术,可以在理想化的数学环境中完美运行,但我们在上一篇文章中看到它对相位失准的鲁棒性不强。

当使用非相干接收机架构时,无法在发射机和接收机之间建立固定的相位关系。这意味着数据包开头的阶段将是不可预测的。仅此一项不会影响我们的解码器算法,因为我们可以使用训练序列来识别解调基带信号的相位,然后相应地修改参考信号。(但是,我对这种方法没有经验,也不知道它在现实生活中的效果如何。)

但是,当我们考虑短期相位变化时,情况会变得更糟,因为这些变化会导致接收信号的相位在一个数据包的空间内偏离参考信号的相位。因此,数据包最初可能具有相位对齐,但恶化的相位关系会产生误码,导致整个数据包被丢弃。

结合正交解调

我在上一篇文章的最后指出了这个问题的解决方案。我们可以使用正交解调来产生 I 和 Q 基带信号,使 FSK 解码算法对相位失准不敏感。

pYYBAGJ2K1yAUa_hAABQPkUz9kU111.jpg

这是对系统非常有益的修改,但这意味着我们需要解调电路中的附加组件(生成 I/Q 信号而不是单个基带信号)和数字信号处理器中的附加时钟周期(因为数学必须是对两个信号而不是一个信号执行)。

第一个问题是相当次要的:正交解调现在非常普遍,我认为在大多数情况下可以采用它而不会显着增加成本、复杂性或 PCB 尺寸。第二个问题的严重性取决于系统的特性。如果您拥有强大的处理器和低数据速率,那么当您结合额外的数学运算时,您可能完全没有问题。但是,如果您选择了低成本、低功耗的处理器并且您正在尝试最大化数据速率,那么所有新的计算都可能使解码算法无法在下一个数据包到达之前完成对一个数据包的处理。

Scilab 中的 I/Q FSK 解码

让我们从建立二进制 0 频率、二进制 1 频率和每个符号的样本数开始,然后我们将根据每个符号的样本数创建索引变量 (n)。

零频率 = 10e3;
一个频率 = 30e3;
采样频率 = 300e3;
Samples_per_Symbol = 采样频率/零频率;
n = 0:(Samples_per_Symbol-1);

生成 I/Q 信号

现在我们可以为这两个频率生成 I 和 Q 符号。按照惯例,I(同相)信号是余弦波形,Q(正交)信号是正弦波形。

Symbol_Zero_I = cos(2*%pi*n / (SamplingFrequency/ZeroFrequency));
Symbol_One_I = cos(2*%pi*n / (SamplingFrequency/OneFrequency));
Symbol_Zero_Q = sin(2*%pi*n / (SamplingFrequency/ZeroFrequency));
Symbol_One_Q = sin(2*%pi*n / (SamplingFrequency/OneFrequency));

子图(2,2,1)
情节(n,Symbol_Zero_I)
子图(2,2,2)
情节(n,Symbol_One_I)
子图(2,2,3)
情节(n,Symbol_Zero_Q)
子图(2,2,4)
情节(n,Symbol_One_Q)

f = gcf();
对于 k=1:4
  > f.children(k).font_size = 3;
  > f.children(k).children.children.thickness = 3;
  > 结束

poYBAGJ2K16AGzAjAAB5-2WnkUQ588.JPG

(最后的 for 循环会更改每个子图的刻度线标签的大小和每条线的粗细。您可以通过图形窗口中内置的图形界面执行相同的操作;使用 GUI 更直观,但变为一段时间后很累。)

我们的目标是探索相位失调的 I/Q 解决方案,因此我们需要符号的相移版本。如上一篇文章所述,接收信号和参考信号之间的最坏情况相位差为 90°,因此我们将生成相位为 45°(即完美对齐和最坏情况对齐的中间)和 90° 的符号.

Symbol_Zero_I_45deg = cos(%pi/4 + 2*%pi*n / (SamplingFrequency/ZeroFrequency));
Symbol_One_I_45deg = cos(%pi/4 + 2*%pi*n / (SamplingFrequency/OneFrequency));
Symbol_Zero_Q_45deg = sin(%pi/4 + 2*%pi*n / (SamplingFrequency/ZeroFrequency));
Symbol_One_Q_45deg = sin(%pi/4 + 2*%pi*n / (SamplingFrequency/OneFrequency));
Symbol_Zero_I_90deg = cos(%pi/2 + 2*%pi*n / (SamplingFrequency/ZeroFrequency));
Symbol_One_I_90deg = cos(%pi/2 + 2*%pi*n / (SamplingFrequency/OneFrequency));
Symbol_Zero_Q_90deg = sin(%pi/2 + 2*%pi*n / (SamplingFrequency/ZeroFrequency));
Symbol_One_Q_90deg = sin(%pi/2 + 2*%pi*n / (SamplingFrequency/OneFrequency));

现在让我们为二进制序列 0101 创建三组 I 和 Q 基带信号。

Baseband_I_aligned = [Symbol_Zero_I Symbol_One_I Symbol_Zero_I Symbol_One_I];
Baseband_Q_aligned = [Symbol_Zero_Q Symbol_One_Q Symbol_Zero_Q Symbol_One_Q];
Baseband_I_45deg = [Symbol_Zero_I_45deg Symbol_One_I_45deg Symbol_Zero_I_45deg Symbol_One_I_45deg];
Baseband_Q_45deg = [Symbol_Zero_Q_45deg Symbol_One_Q_45deg Symbol_Zero_Q_45deg Symbol_One_Q_45deg];
Baseband_I_90deg = [Symbol_Zero_I_90deg Symbol_One_I_90deg Symbol_Zero_I_90deg Symbol_One_I_90deg];
Baseband_Q_90deg = [Symbol_Zero_Q_90deg Symbol_One_Q_90deg Symbol_Zero_Q_90deg Symbol_One_Q_90deg];

子图(3,2,1)
情节(Baseband_I_aligned)
子图(3,2,2)
情节(Baseband_Q_aligned)
子图(3,2,3)
绘图(Baseband_I_45deg)
子图(3,2,4)
绘图(Baseband_Q_45deg)
子图(3,2,5)
情节(基带_I_90度)
子图(3,2,6)
绘图(Baseband_Q_90deg)

f = gcf();
对于 k=1:6
  > f.children(k).font_size = 3;

> 结束
pYYBAGJ2K1-AICDNAAD7kGbtYRg859.JPG

I/Q 乘法

我们现在可以将相位对齐和相移的 I/Q 基带信号乘以参考符号。尽量不要被一长串的计算分心;我们所做的只是将 I 和 Q 波形首先乘以二进制 0 符号的等长数组,然后乘以二进制 1 符号的等长数组。但是,我们必须这样做 3 次,因为我们想要比较相位对齐版本、相位 = 45° 版本和相位 = 90° 版本的结果。这并不反映将由数字信号处理器执行的实现——在实际应用中将只有一个 I/Q 基带信号。

请注意,这里我使用 I 符号作为参考符号,但我也可以使用 Q 符号。实际上,我可以使用具有任何相位值的参考符号:通过将 I/Q 技术结合到此解码算法中,我们使该过程对接收符号和参考符号之间的任何类型的相位差异都不敏感。

DecodeZero_I_aligned = Baseband_I_aligned .* [Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I];
DecodeZero_Q_aligned = Baseband_Q_aligned .* [Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I];
DecodeOne_I_aligned = Baseband_I_aligned .* [Symbol_One_I Symbol_One_I Symbol_One_I Symbol_One_I];
DecodeOne_Q_aligned = Baseband_Q_aligned .* [Symbol_One_I Symbol_One_I Symbol_One_I Symbol_One_I];

DecodeZero_I_45deg = Baseband_I_45deg .* [Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I];
DecodeZero_Q_45deg = Baseband_Q_45deg .* [Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I];
DecodeOne_I_45deg = Baseband_I_45deg .* [Symbol_One_I Symbol_One_I Symbol_One_I Symbol_One_I];
DecodeOne_Q_45deg = Baseband_Q_45deg .* [Symbol_One_I Symbol_One_I Symbol_One_I Symbol_One_I];

DecodeZero_I_90deg = Baseband_I_90deg .* [Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I];
DecodeZero_Q_90deg = Baseband_Q_90deg .* [Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I Symbol_Zero_I];
DecodeOne_I_90deg = Baseband_I_90deg .* [Symbol_One_I Symbol_One_I Symbol_One_I Symbol_One_I];
DecodeOne_Q_90deg = Baseband_Q_90deg .* [Symbol_One_I Symbol_One_I Symbol_One_I Symbol_One_I];

下图显示了乘法产生的波形。

子图(2,2,1)
情节(DecodeZero_I_aligned)
子图(2,2,2)
情节(DecodeZero_Q_aligned)
子图(2,2,3)
情节(DecodeOne_I_aligned)
子图(2,2,4)
情节(DecodeOne_Q_aligned)

poYBAGJ2K2CARPZJAACx1M0c7wc524.JPG

子图(2,2,1)

情节(DecodeZero_I_45deg)

子图(2,2,2)

情节(DecodeZero_Q_45deg)

子图(2,2,3)

情节(DecodeOne_I_45deg)

子图(2,2,4)

情节(DecodeOne_Q_45deg)

poYBAGJ2K2GAIKSKAAClpmRqdNI555.JPG

子图(2,2,1)

情节(DecodeZero_I_90deg)

子图(2,2,2)

情节(DecodeZero_Q_90deg)

子图(2,2,3)

情节(DecodeOne_I_90deg)

子图(2,2,4)

情节(DecodeOne_Q_90deg)

pYYBAGJ2K2KANJwvAAC0gDgZY0Q349.JPG

结论

如果您仔细思考最后一组图,我想您将开始了解 I/Q 处理在 FSK 解码上下文中的好处。由于输入信号的相位与参考符号的相位失去对齐,因此作为接收频率与参考频率之间相似性的指标,乘法波形的 DC 偏移变得不可靠。然而,90°相移基带信号的存在弥补了这种影响,因为当一个基带信号的相位差接近±90°(最坏情况)时,另一个基带信号的相位接近0°或 180°(最佳情况)。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 解码器
    +关注

    关注

    9

    文章

    1073

    浏览量

    40145
  • FSK
    FSK
    +关注

    关注

    14

    文章

    113

    浏览量

    57967
  • 信号设计
    +关注

    关注

    0

    文章

    4

    浏览量

    5864
收藏 人收藏

    评论

    相关推荐

    【FPGA设计实例】基于FPGA的正交解码器建立

    本节知识我们讲解如何用FPGA建立正交解码器正交解码器FPGA是最适合建立正交解码器。正交信号是什么? 正交信号是两个
    发表于 03-15 09:29

    红外解码器

    红外解码器
    发表于 12-08 20:35

    怎么在硬件上实现红外信号解码器

    通用的IR(红外)接收解码器。一个可以解码任何常见的红外遥控信号。前端将威或尖锐的红外接收机解调36 / 38khz信号。我想我会连接的
    发表于 02-14 14:35

    具有外部穿孔的Viterbi解码器如何解码呢?

    根据维特比解码器数据表,硬编码不能进行擦除(外部穿孔)(即仅对软编码有效)。如果我有硬输入,我将如何解码呢?我已经在解码器之前解析了我的数据。我现在需要知道的是,如果我有一个硬输入,我将如何使我
    发表于 03-14 10:19

    如何才能用2B直接输出I2S信号到DAC解码器

    2B有带原生的I2S接口吗?我查了一下资料,好像是模拟出来的, 想问一下各位大大,怎样才可以用2B直接输出I2S信号到我的DAC解码器,我的解码器
    发表于 09-17 05:55

    ESS的ES9311Q 音响、功放、解码器

    \音响系统ES9026PRO 解码器ES9028Q2M 手机,手持播放解码器ES9028PRO 音响、功放、解码器ES9038
    发表于 11-27 13:49

    这个很特别 音频解码器

    `淘来一块蓝牙板,看屁股应该是音频解码器,前面两个咪咪,一个指示灯一个像信号接收。应该是树立着使用的东西,和市面上买的解码器设计不一样。接了12v电源,手机能连接上蓝牙,但是接功放没
    发表于 03-09 09:16

    怎么理解真正的编码解码器

      在进入关于编码解码器的现实之前,让我们对复用进行简要的思考。通常我们会在需要将一些输入信号一次一个地加载到一个单独负载的应用程序中。选择输入信号中的一个输入
    发表于 09-01 17:48

    解码器常见故障及解决方法

    拔到了输出485信号;  3、检查解码器协议是否设置正确;  4、检查波特率设置是否与解码器符合(检查地址码设置与所选的摄像机是否一致(详细的地址码拔码表见解码器说明书);  5、检查
    发表于 12-11 14:12

    哪些i.MX 8 SOC支持/不支持FTM正交解码器

    i.MX 8DualX/8DualXPlus/8QuadXPlus 应用处理参考手册,版本 0,05/2020 p7198 16.1.2.14 FTM “注意无法使用正交解码器,因为 A 相
    发表于 05-22 07:29

    AMBA解码器产品手册

    解码器执行三个功能: ·它为每个总线从机生成从机选择信号(DSELx),表示需要传输到该从机。 ·当未选择从机时,它在仅地址传输期间产生从机响应信号(BWAIT、BLAST和BERROR)。 ·它可
    发表于 08-22 06:26

    DTMF解码器原理是什么?

    DTMF 解码器原理
    发表于 10-27 08:29

    来电解码器及其在客户关系管理中的应用

    介绍了一种基于单片机AT89C2051和FSK解码芯片HT9032C实现的来电解码器,说明了设计的原理和解码器的结构。该解码器可应用于客户关
    发表于 08-03 11:09 20次下载

    常用DTMF/FSK解码器集成电路

    常用DTMF/FSK解码器集成电路
    发表于 06-30 19:19 3096次阅读

    什么是音频编解码器

    什么是音频编解码器? 编解码器(编码器/解码器)转换成模拟信号的数字码流,另一个相同的编解码器转换为数字流回到成模拟信
    发表于 05-03 23:48 3900次阅读