資料介紹
描述
?

介紹
在我的數(shù)字通信課上,我試圖通過發(fā)現(xiàn)領(lǐng)域問題并解決它們來幫助我的學(xué)生學(xué)習(xí)數(shù)字通信/計算機(jī)網(wǎng)絡(luò)。在上一節(jié)課中,我們使用激光和 LDR構(gòu)建了一個摩爾斯電碼發(fā)射器/接收器。
今天,我將其擴(kuò)展到傳輸數(shù)字?jǐn)?shù)據(jù);以0和1的流編碼的數(shù)據(jù)。在摩爾斯電碼中,'dot'和'dash'相當(dāng)于數(shù)字?jǐn)?shù)據(jù)的0和1。但是,我們有 0/點(diǎn)的明確信號。沒有信號不被解釋為零。這使得渠道成本更高。我可以達(dá)到每分鐘約 18 個單詞(PARIS 通常用作此計算的參考單詞)。這相當(dāng)于每分鐘 75 個字節(jié)或10bps 。
發(fā)射機(jī)
由于我的發(fā)射器是一個具有開和關(guān)狀態(tài)的激光二極管,關(guān)閉狀態(tài)可以被認(rèn)為是 0,而打開狀態(tài)可以被認(rèn)為是 1。然而,這提出了一個挑戰(zhàn),即如何區(qū)分代表數(shù)據(jù)的一組 0 和0代表靜默(沒有數(shù)據(jù)傳輸)。
編輯代碼
由于我們遇到了這個問題,我添加了一個開始消息頭/模式 (1011) 和一個結(jié)束消息頭/模式 (1101)。我不斷地在我的 LDR 接收器上采樣數(shù)據(jù),并將讀取值 0/1 添加到我的數(shù)據(jù)中。然后,我檢查結(jié)束模式,如果找到,我檢查 8 位數(shù)據(jù)之前的起始標(biāo)頭。
1011 <8 位數(shù)據(jù)> 1101
H: 1011010010001101
E: 1011010001011101
L: 1011010011001101
L: 1011010011001101
O: 1011010011111101
我可以在我的接收器上解碼這個模式。

然而,這種封裝消息的簡單模式并非萬無一失。它很容易被流氓數(shù)據(jù)系列破解。

那么如何驗證接收到的數(shù)據(jù)是否真的是另一端發(fā)送的數(shù)據(jù)呢?
我在數(shù)據(jù)末尾添加了一個小簽名;設(shè)置位數(shù)。由于我的數(shù)據(jù)是 8 位,我又添加了 4 位來表示可以在數(shù)據(jù)中設(shè)置的最多 8 位。
1011 <8_bit_data><4_sign_bits> 1101
H: 10110100100000101101
E: 10110100010100111101
L: 10110100110000111101
L: 10110100110000111101
O: 10110100111101011101
我也可以解碼這個模式。結(jié)果,我可以過濾掉一些垃圾:

我確實(shí)有數(shù)據(jù)丟失,但現(xiàn)在垃圾更少了。那么我該如何進(jìn)一步改進(jìn)呢?我可以修復(fù)傳輸錯誤嗎?我可以更好地利用符號位嗎?大量可能的改進(jìn),但當(dāng)我們遇到問題并且我們確信該問題值得解決時,我們將解決。可能是下節(jié)課……
發(fā)射機(jī):
#define PULSE 50
#define START_MSG one(); zero(); one(); one();
#define ??END_MSG one(); one(); zero(); one();
#define MSG_PACK(x) START_MSG x END_MSG
void setup() {
?pinMode(13, OUTPUT);
}
void loop() {
// <8_Data_Bits><4_Sign_Bits>
?//H: 2 set bits
?MSG_PACK(zero(); one(); zero(); zero(); one(); zero(); zero(); zero(); \
??????????zero(); zero(); one(); zero(); )
?//E: 3 set bits
?MSG_PACK(zero(); one(); zero(); zero(); zero(); one(); zero(); one(); \
??????????zero(); zero(); one(); one(); )
?//L: 3 set bits
?MSG_PACK(zero(); one(); zero(); zero(); one(); one(); zero(); zero(); \
??????????zero(); zero(); one(); one(); )
?//L: 3 set bits
?MSG_PACK(zero(); one(); zero(); zero(); one(); one(); zero(); zero(); \
??????????zero(); zero(); one(); one(); )
?//O: 5 set bits
?MSG_PACK(zero(); one(); zero(); zero(); one(); one(); one(); one(); \
??????????zero(); one(); zero(); one(); )
?//CR: 3 set bits
?MSG_PACK(zero(); zero(); zero(); zero(); one(); one(); zero(); one(); \
??????????zero(); zero(); one(); one(); )
?//LF: 2 set bits
?MSG_PACK(zero(); zero(); zero(); zero(); one(); zero(); one(); zero(); \
??????????zero(); zero(); one(); zero(); )
}
void zero()
{
?digitalWrite(13, LOW);
?delay(PULSE);
}
void one()
{
?digitalWrite(13, HIGH);
?delay(PULSE);
}
接收者:
#define SOM 0xB
#define EOM 0xD
#define PULSE 50
unsigned long data = 0;
void setup() {
?// put your setup code here, to run once:
?Serial.begin(9600);
}
void loop() {
?// put your main code here, to run repeatedly:
?int val = analogRead(4);
?unsigned long sign = 0;
?data = (data << 1);
?if(val >= 10){
???data |= 1;
?}else {
???data |= 0;
?}
?//check tail signature
?if(EOM == (data&EOM))
?{
???//check head signature
???if(SOM == ((data >> 16)&0xF)){
?????sign = (data>>4)&0xF; // 4 bits of signature
?????data = (data>>8)&0xFF;// 8 bits of data
?????if(sign == getSetBits(data))
?????{
???????Serial.print((char)data);
?????}
?????//Diagnostics
?????//if(data==72||data==69||data==76||data==79||data==13||data==10){
???????//data
???????//digitalWrite(13, HIGH);
?????//}else{
???????//error
???????//digitalWrite(12, HIGH);
?????//}
?????data = 0;
???}
?}
?delay(PULSE);
?//digitalWrite(13, LOW);
?//digitalWrite(12, LOW);
}
unsigned long getSetBits(unsigned long n)
{
?unsigned long count = 0;
?while(n)
?{
???n &= (n-1);
???count++;
?}
?return count;
}
順便說一句,我使用此處發(fā)布的最終代碼實(shí)現(xiàn)了每秒約 1 字節(jié)數(shù)據(jù)的速度。包括標(biāo)頭在內(nèi),達(dá)到每秒 20 位!
編輯
為了檢測數(shù)據(jù)中的錯誤,我在數(shù)據(jù)中添加設(shè)置位數(shù)的簽名機(jī)制并沒有被證明是好的。我需要一個不會增加大量數(shù)據(jù)開銷的更好、更便宜的解決方案。
I XOR 高半字節(jié)和低半字節(jié)以生成 4 位簽名。此簽名不太可能失敗,因為錯誤(位翻轉(zhuǎn))必須發(fā)生在高半字節(jié)和低半字節(jié)的相應(yīng)位上。
// (sign == (right ^ left))
if(sign == ((data & 0xF) ^ ((data >> 4) & 0xF))){
Serial.print((char)data);
}
正如預(yù)期的那樣,結(jié)果比以前更好。我很少看到惡意字節(jié)通過此測試。

在理想情況下,我不會出錯。我還沒有看到流氓字節(jié),但我確實(shí)看到數(shù)據(jù)包被丟棄了。我如何確保以正確的順序收到所有數(shù)據(jù)?
這是下一個要解決的問題。為每個數(shù)據(jù)包構(gòu)建一個 ACK??,以便發(fā)送方可以確認(rèn)他發(fā)送的內(nèi)容確實(shí)已收到。我計劃發(fā)回收到的異或符號。但是我沒有其他激光二極管用于此目的...
- 信路達(dá) CAN收發(fā)器 XL2515-TSS數(shù)據(jù)手冊
- 低功耗收發(fā)器MAX490模塊電路圖下載 161次下載
- 硅鍺24GHz收發(fā)器MMICBGT24MTR11數(shù)據(jù)手冊 27次下載
- RS-232收發(fā)器SP3223E/3243E數(shù)據(jù)手冊 36次下載
- 單片無線收發(fā)器芯片NRF24L01 PCB原理圖下載 0次下載
- TC32306FTG射頻收發(fā)器數(shù)據(jù)手冊 32次下載
- 基于RF收發(fā)器的基帶處理器 7次下載
- 2.4GHz無線收發(fā)器IC及其應(yīng)用 29次下載
- FPGA與ADC數(shù)字?jǐn)?shù)據(jù)輸出的接口 96次下載
- 無線射頻收發(fā)器TRF6900A的應(yīng)用研究 151次下載
- 大功率無線數(shù)傳收發(fā)器安裝使用手冊 85次下載
- 基于MICRF005的高速無線UHF收發(fā)器原理及應(yīng)用
- 高保真數(shù)字無線音頻收發(fā)器產(chǎn)品說明書
- 數(shù)字?jǐn)?shù)據(jù)網(wǎng)
- 計算機(jī)無線數(shù)據(jù)收發(fā)器電路及制作
- 射頻收發(fā)器是混合集成電路嗎 322次閱讀
- 收發(fā)器的主要作用與種類詳解 2428次閱讀
- 收發(fā)器保護(hù)電路原理圖 747次閱讀
- 適用于數(shù)字混頻器的主要選項 1579次閱讀
- PoE光纖收發(fā)器如何工作,PoE光纖收發(fā)器的應(yīng)用 5256次閱讀
- 光纖收發(fā)器a與b怎么放 3w次閱讀
- 光纖收發(fā)器的效果原理 4229次閱讀
- ADI的最新收發(fā)器產(chǎn)品ADRV9009實(shí)現(xiàn)雜散去相關(guān)的收發(fā)器功能 8709次閱讀
- 數(shù)據(jù)通信與網(wǎng)絡(luò):數(shù)字?jǐn)?shù)據(jù),模擬數(shù)據(jù)和數(shù)字信號間的轉(zhuǎn)換 1.1w次閱讀
- 數(shù)字擴(kuò)頻收發(fā)器RF109:可將電路復(fù)雜程度和成本降到最低 1381次閱讀
- UAA3545收發(fā)器的應(yīng)用電路 1817次閱讀
- 收發(fā)器SA2421的技術(shù)特點(diǎn)和應(yīng)用電路 1021次閱讀
- 光纖模塊與光纖收發(fā)器使用方法_光纖模塊與光纖收發(fā)器的區(qū)別 2.5w次閱讀
- 基于TDA5255和XC866單片機(jī)的射頻收發(fā)器設(shè)計 1899次閱讀
- 有關(guān)光纖收發(fā)器的基本常識解析 1987次閱讀
下載排行
本周
- 1NS1081/NS1081S/NS1081Q USB 3.0閃存數(shù)據(jù)手冊
- 0.40 MB | 4次下載 | 2 積分
- 2光伏并網(wǎng)逆變器原理
- 7.31 MB | 3次下載 | 2 積分
- 3T20電烙鐵原理圖資料
- 0.27 MB | 2次下載 | 免費(fèi)
- 4PL83081 雙路恒流同步降壓轉(zhuǎn)換器技術(shù)手冊
- 3.34 MB | 1次下載 | 免費(fèi)
- 5PL88052 4.8V至60V輸入,5A,同步降壓轉(zhuǎn)換器技術(shù)手冊
- 3.36 MB | 1次下載 | 免費(fèi)
- 6LX8201微孔霧化驅(qū)動芯片電路圖資料
- 0.15 MB | 1次下載 | 免費(fèi)
- 7PC6200_7V直流電機(jī)驅(qū)動器技術(shù)手冊
- 0.47 MB | 次下載 | 免費(fèi)
- 8恒溫晶體振蕩器(OCXO)FOC-2D:20.6×20.6mm在通信基站和測試設(shè)備中的應(yīng)用參數(shù)規(guī)格
- 485.75 KB | 次下載 | 免費(fèi)
本月
- 1如何看懂電子電路圖
- 12.88 MB | 329次下載 | 免費(fèi)
- 2RK3588數(shù)據(jù)手冊
- 2.24 MB | 14次下載 | 免費(fèi)
- 3PC5502負(fù)載均流控制電路數(shù)據(jù)手冊
- 1.63 MB | 12次下載 | 免費(fèi)
- 4STM32F10x參考手冊資料
- 13.64 MB | 12次下載 | 1 積分
- 5OAH0428 V1.0英文規(guī)格書
- 5.86 MB | 8次下載 | 免費(fèi)
- 6NS1081/NS1081S/NS1081Q USB 3.0閃存數(shù)據(jù)手冊
- 0.40 MB | 4次下載 | 2 積分
- 7PID控制算法學(xué)習(xí)筆記資料
- 3.43 MB | 3次下載 | 2 積分
- 8光伏并網(wǎng)逆變器原理
- 7.31 MB | 3次下載 | 2 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935132次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191415次下載 | 10 積分
- 5十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183349次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81599次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73818次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65990次下載 | 10 積分
評論