做一個FSK的收發試驗 之四

正如上述幾個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);
}



 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章