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