在之前的文章中,我了解到,LoRa的擴(kuò)頻通信中,其基本的一個(gè)符號(hào)是一個(gè)chirp,也就是一個(gè)線性調(diào)頻,從時(shí)域和頻域上來(lái)觀察,就像下面圖中展示的樣子:
從頻域上更容易理解,也就是我們想發(fā)送一個(gè)符號(hào),就發(fā)送一個(gè)變化的頻率信號(hào)。假設(shè)我們的帶寬選擇125kHz,也就是BW = 125kHz。那么我們發(fā)射的信號(hào)就是一個(gè)頻率從0到125kHz,一步一步變化上去的信號(hào)。
那么這個(gè)變化的頻率,它的步進(jìn)是多少呢?假設(shè)我們定義SF=7,也就是我們需要講125kHz的帶寬進(jìn)行128等分,這樣頻率從0掃到125kHz的話,就需要進(jìn)行128步。在BW= 125kHz的帶寬上,我們時(shí)域上的掃頻間隔為頻率的倒數(shù),也就是8us。
因此,如果我們按照帶寬BW= 125kHz,SF = 7的擴(kuò)頻因子,發(fā)送一個(gè)線性調(diào)制信號(hào),就要經(jīng)過(guò)128步的頻率增加,每一步所花的時(shí)間是8us,一共需要128*8us= 1.024ms。
從上面的推理可以看出,SF越大,我們發(fā)送一個(gè)符號(hào)的時(shí)間就越長(zhǎng),所以我們的通信速率就越慢。我們以SF=7為例,看一下,符號(hào)是如何被調(diào)制到射頻上去的。
如上圖,在SF=7的情況下,我們把頻率分為了128個(gè)臺(tái)階,接下來(lái)我們來(lái)定義符號(hào)。對(duì)于符號(hào)0,就用從頻率f0開始,頻率一步一步的增加,一直增加到f127的一個(gè)線性頻率變化表示。對(duì)于符號(hào)1,就用從頻率f1開始,頻率一步一步的增加,一直增加到f127,再回到f0為止的線性頻率變化來(lái)表示。
以此類推,我們看到圖中每個(gè)symbol符號(hào),都可以表示成一個(gè)唯一的,從起始頻率開始,掃過(guò)整個(gè)帶寬的頻率變化信號(hào)。這樣一來(lái),我們就可以把0-127所表示的符號(hào),通過(guò)一個(gè)變化的頻率進(jìn)行發(fā)送了。接下來(lái)繼續(xù)看一下,如何將原始數(shù)據(jù)轉(zhuǎn)換到Lora的一幀數(shù)據(jù)中。下圖是以SF=8為例的
上圖第二行為原始數(shù)據(jù)的二進(jìn)制碼,這里要注意,我們?cè)趌ora調(diào)制之前,加入了前向糾錯(cuò)碼來(lái)提高數(shù)據(jù)的可靠性傳輸,也就是我們可以增加多個(gè)冗余的bit值,當(dāng)傳輸過(guò)程中有一個(gè)bit翻轉(zhuǎn),我們可以把這個(gè)翻轉(zhuǎn)的bit找出來(lái),并修正他。
這樣的前向糾錯(cuò)機(jī)制,避免了我們傳輸過(guò)程中受到干擾,需要重傳的問(wèn)題。CR=4/5,也就是每4個(gè)bit的數(shù)據(jù),增加一個(gè)bit的冗余。我們?cè)嫉?2bit就被擴(kuò)展為了40bit。這40bit是我們的lora數(shù)據(jù)幀的payload部分。lora的一幀數(shù)據(jù)還包括前導(dǎo)碼和CRC部分。
其中前導(dǎo)碼是多個(gè)線性調(diào)頻的升頻,這個(gè)符號(hào)是固定的,但是個(gè)數(shù)可以自定義,主要用來(lái)做時(shí)間同步,喚醒,頻率漂移等校準(zhǔn)等,具體不詳。隨后,40個(gè)bit的數(shù)據(jù)按照SF=8,也就是一個(gè)字節(jié)作為一個(gè)符號(hào)進(jìn)行發(fā)送,最后是兩個(gè)符號(hào)長(zhǎng)度的CRC校驗(yàn)。