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