效果如图,其中方波为基带信号,原始信号为2FSK经过一路带通滤波器后的理想输出结果。
程序对原始信号的绝对值信号进行包络提取。可以看到提取出的包络信号与方波信号相差无几。
代码如下:
//信号条件: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:
V_MAX=100:
稳定起见,后续建议进行斜率检测以删除突变数据,或者用MCU的定时器以基带信号频率来采样获得的包络检波信号。
文章来源地址https://www.toymoban.com/news/detail-650314.html文章来源:https://www.toymoban.com/news/detail-650314.html
到了这里,关于STM32-2FSK解调 一种简单的C语言包络提取方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!