STM32-2FSK解调 一种简单的C语言包络提取方法

文章介绍了对2FSK经过带通滤波后的理想输出进行包络提取的过程,强调了ADC采样频率、载波周期与码元速率的关系,以及阈值设置和V_MAX选择对结果稳定性的影响。建议使用平均值作为阈值并进行斜率检测以优化处理。
摘要由CSDN通过智能技术生成

效果如图,其中方波为基带信号,原始信号为2FSK经过一路带通滤波器后的理想输出结果。

程序对原始信号的绝对值信号进行包络提取。可以看到提取出的包络信号与方波信号相差无几。

8e87c4441cb84457b47645dfd6694823.png

 代码如下:

//信号条件:10khz为码元"1"的载波,所以设置基带信号频率为2400B/S<2500B/S=10K/4
//因为10K/2400=4.1666,取越5个载波周期对应一个码元
//假设v为一个电容的电压
//因为我的ADC采样频率为140KHz,所以每个载波周期对应14个ADC值,因此v的最大值取14+1即可,最大值不应大于14x5=70。
#define V_MAX 15
u8 v=0,j=0;
u8 i=50000;
while (j<=i)
{
    if (ABS[1,j]>0.5)//假设绝对值信号最大值为1,当前值大于最大值的一半
        v=V_MAX ;//电容充能至最大值
    else
        {
        if((v-1)>0)//防止减成负数
            v=v-1;//相当于电容电压衰减
        else
            v=0;//电容能量衰减完后电压持续为0
        }

    if (v>V_MAX/2 )//电压大于阈值
        old_res[1,j]=1;//为逻辑真
    else
        old_res[1,j]=0;//为逻辑假

    j=j+1;
}

可以看出阈值的设置相当重要,建议对输入的信号求平均值,以平均值作为阈值进行后续处理。

V_MAX的选取:

V_MAX=15:

36d2241e58594a839cb016c2bdba815a.png

 V_MAX=100:

d20a45dfd69643e7a59641ccbbcd27f4.png

稳定起见,后续建议进行斜率检测以删除突变数据,或者用MCU的定时器以基带信号频率来采样获得的包络检波信号。

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

睿智の男孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值