做一个FSK的收发试验 之四

59 篇文章 4 订阅
25 篇文章 50 订阅

正如上述几个BLOG所描述的,我们这个FSK的基本思路就是传递数据0时候一个频率,传递1时候是另外一个频率。我们通过DDS合成不同的频率,而通过过零检测实现对接收到基带频率统计周期的计算,从而判断是在那个频率点上,以解调出来0或者1。

我们这里做一个接口,查看一下在不同的频率设置点上,收到的信号周期都是多少。

这个cnt寄存器索引到axi lite的4号寄存器里面。

unsigned int FSK_GET_CNT(){
	unsigned int r = *(volatile unsigned int *) (0x43c00000 + 4*4) ;
	return ( r );

}

之后循环设置不同的step数值,调用这个函数看一下周期数duosh。

	while(1){
		FSK_TX_SET	 (0,0,i,i); 
		usleep(1000);
		t32=2;
		while(t32--)
			{ 
			printf("%d , %d ,\n",i,FSK_GET_CNT());
			usleep(100); 
			}
		while(1) if ( 0x0d == getchar())break;
		i++;
	}

 

我们看一下结果:

很显然发送时设置的步进step和收的周期计数器cnt基本成反比,即在误差允许范围内step*cnt=360

文本的统计我列下来:

/*
 *1 , 359 ,
2 , 179 ,
3 , 118 ,
4 , 89 ,
5 , 71 ,
6 , 59 ,
7 , 51 ,
8 , 44 ,
9 , 39 ,
10 , 35 ,
11 , 32 ,
12 , 29 ,
13 , 26 ,
14 , 25 ,
15 , 23 ,
16 , 22 ,
17 , 21 ,
18 , 19 ,
19 , 18 ,
20 , 17 ,
21 , 17 ,
22 , 16 ,
23 , 15 ,
24 , 14 ,
25 , 14 ,
26 , 13 ,
27 , 14 ,
28 , 12 ,
29 , 12 ,
30 , 11 ,
31 , 11 ,
32 , 11 ,
33 , 10 ,
34 , 10 ,
35 , 10 ,
36 , 9 ,
37 , 9 ,
38 , 9 ,
39 , 9 ,
40 , 8 ,
41 , 8 ,
42 , 8 ,
43 , 8 ,
44 , 8 ,
45 , 7 ,
46 , 7 ,
47 , 7 ,
48 , 7 ,
49 , 7 ,
50 , 7 ,
51 , 7 ,
52 , 6 ,
53 , 6 ,
54 , 6 ,
55 , 6 ,
56 , 6 ,
57 , 6 ,
58 , 6 ,
59 , 6 ,
60 , 5 ,
61 , 5 ,
62 , 5 ,
63 , 5 ,
64 , 5 ,
65 , 5 ,
66 , 5 ,
67 , 5 ,
68 , 5 ,
69 , 5 ,
70 , 5 ,
71 , 5 ,
72 , 4 ,
73 , 4 ,
74 , 4 ,
75 , 4 ,
76 , 4 ,
77 , 4 ,
78 , 4 ,
79 , 4 ,
80 , 4 ,
81 , 4 ,
82 , 4 ,
83 , 4 ,
84 , 4 ,
85 , 4 ,
86 , 4 ,
87 , 4 ,
88 , 4 ,
89 , 4 ,
90 , 3 ,
91 , 3 ,
92 , 3 ,
93 , 3 ,
94 , 3 ,
95 , 3 ,
96 , 3 ,
97 , 3 ,
98 , 3 ,
99 , 3 ,
100 , 3 ,
101 , 3 ,
102 , 3 ,
103 , 3 ,
104 , 3 ,
105 , 3 ,
106 , 3 ,
107 , 3 ,
108 , 3 ,
109 , 3 ,
110 , 3 ,
111 , 3 ,
112 , 3 ,
113 , 3 ,
114 , 3 ,
115 , 3 ,
116 , 3 ,
117 , 3 ,
118 , 3 ,
119 , 3 ,
120 , 2 ,
121 , 2 ,
 * */

另外我也记录一下设置不同数值时候频谱状况(因为是不变频率的基带,所以也算不上频谱,就说频率吧)。

为了能在频谱仪上显示的明显一些并且好换算,如果是设置了基带采样率是36M,这样当360个点DDS出一个基带波形时候,基带频率应该是 0.1M ,在频谱仪上显示的结果的是RF频率加0.1M。我们以RF频率2.4G设置为中心,频谱仪每格设置成2M,分辨率50KHZ进行试验。我实际试验用的基带采样频率是默认的37M(忘记设置成36M,等发现的时候已经拍照很多了),这样大家看到的频谱和36M有一点点差别,可以自行脑补一下。

以下是截图:

 

 

 

 

 

还有对应step数值更多图,我上传到了网盘了: 

链接:https://pan.baidu.com/s/1_1xezYx4v9SDzluuNvU9uA 
提取码:3psm

图上能反应出以下几个问题:

1,当step是能被360整除的数时候,污染的频谱很少。

2,当step是能被360整除的数时候,有一定频谱的污染,这个可以归结在我们my_dds模块的简单实现。所以这里有继续研究ADI官方DDS和XILINX的DDS现成的IP和的必要。但是当符合被360整除时候,还是简单医用的。

3,另外返现有一个镜像的频率出现,这个点需要仔细研究一下。对比其他DDS实现研究一下是问题来源。

 

 

我们这里取两个点step点表示0和1,分别是25和14,而区分这两个点的cnt分别设置15和24。

void FSK_SET (){
	FSK_TX_SET (0,0,25,14);   
	FSK_RX_SET(14+1,25-1);
}



 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值