I thought FT8, JT65, JT9, etc, were the best low noise schemes because of the very narrow bandwidth, which means you can use very narrow filters and get rid of almost all the noise.
GPS Signals also come below the noise floor. They also have a correlation receiver type. The descriptions of it, that I found, did not brought me insight how it really works on the modulation level. I only understood that upper layer, there it receives from the 4 or more satellites their precise realtime and precise in space position, albeit the last digits of these numbers are enciphered for intentionally reducing the precision on non-military receivers.
It's like all of signal processing topics in one video! Exciting to learn about a robust platform with so much room for a lot of creative micro modulations.
This wasn't really emphasized but usually more bits per symbol means worse performance for a given SNR, but in LoRas case, a higher SF also greatly increases the symbol's duration (as well as the bits per symbol), increasing SF by 1 means 1 more bit per symbol but it also doubles the symbol length, so that gives you more effective spreading, and lets you go to lower SNRs.
This is an extremely important point that confused me at first. Since the symbol duration doubles with each increase in the spreading factor by one, the symbol duration increases exponentially with the SF. However, the number of bits per symbol increases linearly with the SF. Consequently, the overall data rate decreases with an increased SF. There's no magic there; a lower data rate improves the permissible signal-to-noise ratio.
I’m a ham operator. I setup a LoRa base station using the lora ham shield that runs on top of an arduino. With that arduino plugged into my raspberry pi at home, and another arduino with lora hsm shield running in my car. I was able to TX/RX short text messages first try back/forth about 9 miles apart. This was at only 1 watt or less power output, on 440 mhz. I was dumbfounded. It took some pass band filters, and good antennas, but still… Able to communicate well beyond any voice, digital voice, or digital modes on UHF from a very tough location to another, separated by multiple freeways, high rise buildings, trees, cars, etc, etc…
@paddler-sn7ub I don't sorry. It was an old project based on the LoRaChat program, and lora hamshield. The youtube channel was run by username inductive twig or something, and the arduino code for LoRaChat is on his github page. The key to making these cheap single board transceivers communicate much further than what is possible, is by using band pass filters to block out all the other RF noise. So I used very tight, 435 to 450 mhz band pass filters when experimenting. Also very good coax and antennas. My base station during that test had 1/2" hardline running up to a good folded dipole 15' above my roof. So just reducing the losses. Especially at the receive side.
@ I don't think LoRa is possible on HF due to it's spread spectrum nature. The FCC only allows a single transmitting station to use and occupy so much of a frequency span simultaneously. Even on the upper bands, the power has to be kept low to avoid breaking the spectrum bandwidth restrictions.
Great video! Just one comment: The LoRa demodulator is basically a correlator plus a bank of filters, the latter being implemented using FFT. And, the LoRa symbols are basically time shifted versions of each other. Conceptually it is very similar to an FMCW radar that also uses a similar demodulator. Instead of the symbols, the radar receives time delayed versions of the chirp waveform depending on the location of the target. The correlator output is a sine wave (for a single point target) whose frequency is proportional to the time delay (i.e. the range). Bank of filters (i.e. FFT) can thus be used to discriminate targets.
@@eswnl1 The FFT IS the bank of matched filters. Each FFT bin is computing how well the input signal matches the frequency for that bin. For CSS, the highest bin number is the symbol. For FMCW radar, the highest bin number is the range.
This is what I call well-balanced video making and editing: normal transitions, clear presentation, voice level fairly constant, background tune merely present and allows or even helps one to get immersed in the topic without being disturbed either by its loudness or a crappy tune choice. Your explanation is pretty good and shows you have a good understanding of the principles, but math is my weak side so I mostly skip over calculus and differential equations.
I've been very impressed with the performance I've been getting with LoRa, and this was a wonderful addition to the documentation from Semtec. They make it easy enough to use, but this understanding is invaluable.
Man, your explanation is awesome. I really liked the way you added the paper information and brought a nice explanation. Please, keep going with these kind of videos. Regards, Pedro.
This the very original way in which knowledge should be conveyed. Structured, well articulated language and definitely accurate. Thank you for your time and effort. New subscriber.
I'm new to radio staff. But I have basic knowledge of signal processing from my university studied 30 years ago. That is best described LoRa that I really understood. Keep up with a great job spreading knowledge and understanding!!! 🙏🙏🙏
Thanks for such a well presented and clear description of the modulation scheme used. In response to your question, the LoRa modulation scheme is still subject to the Shannon limit, the maximum information rate is a function of channel SNR and bandwidth. If you increase the spreading factor in a channel where the SNR is constant, you will need more bandwidth to maintain the received symbol error rate. As bandwidth is usually fixed for a given channel, the SF can be varied to optimise information throughput for a given channel SNR. This can be done adaptively as the SNR varies over time, due to radio fading and interference sources.
Many thanks for posting this video. I had no idea how LoRa worked beforehand but your video clearly explained it. It took a while to figure out how convert your Matlab code into Octave code and correct my typos. But the final result worked exactly like your demo showed.
There is an error starting at about 13:40 about complex conjugate, and goes on further at 16 etc. The actual demodulation chirp is of the same slope as the modulated signal. With multiplication you get sum and difference of the frequencies, and that does the dechirping.
Thanks for the video and very clear explanation. As a graduated in electronic engineering at the Padua university ( the same of Lorenzo Evangelista) I studied spread spectrum in the nineties but at the time I didn't catched the concept: too much theory and few concrete examples. At the time spread spectrum modulation was probably used only by military and hardware was not able to support the computation needed. After this video I want to go deeper on how Lora works, I think I will take the mathlab simulation you have developed to play a bit by myself.
Awesome explanation and really amazing that higher s gives better performance on low snr. Should definitely be watched by many hams here on YT since it seems they still mess up all the terms and don't really understand LoRa
As a visual learner - THANK YOU! I don't think I could have ever wrapped my head around this without your visual representation of time. All of it makes sense and, when you see how it works, it is one of those things that makes you go - yeah, why did it take so long for this to be figured out?! THANK YOU!!!
Thanks for the clear explanation! I do wonder what happens if there are 2 LoRa transmitters in an area though, how would the receiver distinguish between them?
Let me see, as stated in some comments, if the SF increases by 1, the symbol length (and window) doubles. That effectively lowers the bitrate, which makes total sense. Then, why the chirp at all? You could do exactly the same with nFSK, just have more possible values per symbol, over a longer time with a lower bitrate. For this to work so well, the chirp has to provide some important benefit. Perhaps less reliance in the oscillator stability? I'd love to see a comparison between LoRa and an equivalent nFSK in Matlab. BTW awesome video!
I guess the nFSK system would fail much sooner due to frequency selective multipath or constant carrier interference. That interference won't match the chirp rate. The difference wouldn't show in a simulation using AGWN like in this video. Just a guess, this video is the only real research I've done into LoRa.
@realsolarcars I guess, but you could address those problems in nFSK in an upper level of spreading and FEC, no one said the FSK should be simple and straight, after all LoRa isn't. I think what I try to say is that there is no real need for the continuous shifting in frequency, you could instead do discrete jumping between the n subcarriers. The reason could very well be making it patentable. Anyway I am just guessing. Regards!
The benefit is each symbol is spread across the entire bandwidth, so no symbol can be lost in a multipath null, unlike what could happen with nFSK. When you DONT use forward error correction this has big advantage!
Great explanation. Here is the code if you want to play with it. clear all SF = 7; %Spreading Factor BW = 1000;% Bandwidth Fs = 1000;%Sampling Frequency s = 127; %send symbol '10' SNR = -10;%Signal to Noise Ratio %Generate a data symbol num_samples =(2^SF)*Fs/BW; k = s; %add s to k to start (defines the data symbol) lora_symbol = zeros(1,num_samples); for n=1:num_samples if k>= (2^SF) k = k-2^SF; end k = k+1; lora_symbol(n) = (1/(sqrt(2^SF)))*exp(1i*2*pi*(k)*(k/(2^SF*2))); end loop = 100; ind2 = zeros(1,loop); for j=1:loop %Add noise lora_symbol_noisy = awgn(lora_symbol,SNR,'measured'); %Transmit %Receiver below % Generate the Base Down Chirp base_down_chirp = zeros(1,num_samples); k=0; for n=1:num_samples if k>= (2^SF) k = k-2^SF; end k = k + 1; base_down_chirp(n) = (1/(sqrt(2^SF)))*(exp(-1i*2*pi*(k)*(k/(2^SF*2)))); end dechirped = lora_symbol_noisy.*(base_down_chirp); corrs = (abs(fft(dechirped)).^2); figure(1); plot(corrs) [~, ind] = max(corrs); ind2(j) = ind; pause(0.01) end figure(2); histogram(ind2,2^SF) symbol_error_rate = sum(ind2~=s+1)/j figure(3); spectrogram(lora_symbol)
Well done. It would be interesting to add information about the bandwidth of the signal vs SF. This relates directly to the received noise and hence the S/N ratio. This will perhaps also shed a light on your question how far one can go by increasing the SF.
Thanks for explaining this what I always considered RF wizardry. Even though I don't have the mathematical fundament to stand on to understand it thoroughly, I have the feeling that I'm a lot smarter than before the video
Years ago with a friend i did a equivalent experiment using GNU-Radio. Not related to LoRa but the target was using width bandwidth spreadspectrum to get a signal over a long distance 100 - 200 km (60-100Mi) I also added a noise generator to see what happened.... it's long ago, but you retriggered my interest.
That was a very nice description - thank you. As a retired signal processing engineer it's nice to hear a good explanation! You suggest that the performance might keep on increasing with spreading factor without limit - it would be interesting (necessary, even) to include the initial detecton and synchronisation process, in noise, in your simulation, and then perhaps the effects of multipath, fading and Doppler. The decoder could be quite sensitive to symbol timing variation thoughout the packet - how long would a packet be? Terrestrial DAB modulation is based on frequencies rather than chirps, but the receive process is not disimilar - do you have any idea of the relative performance? I'm not familiar with the papers or the intended applications, but I would expect there to be further gains from hard or soft error detection/correction coding at the data level.
Wow beautiful! From a new modulation concept with a complex maths expressions to a smart way of computational representation, that’s incredible! Cannot imagine how people invented this smart are!
This is a really good video you did explaining LoRa "mathematics', i.e. the magic of decoding a symbol where signal is less than noise i.e. SNR negative 8-) and the Matlab code is really useful. Thank you!
Very well presented! In thinking about the limits to the number of symbols, as the symbol duration increases distortions in propagation will modulate the baseband coordinates and increase the error rate. This is not ‘noise’ and will not show up in simulation. A noise driven delay modulation term would cover this.
Wow - great explanation - usually there are 3 features but youre only allowed 2 of them - here you can choose 3 simultanously :) Low Bitrate, Low Power and Long Range :) - great idea :)))
Well technically the desirable traits are High Bitrate, Low Power and Long Range. Power and bitrate are low to begin with. Each time you increment the spreading factor, symbol duration has to double, but so does the number of bits per symbol. I think the trade-off there is in the processing power needed by the larger FFT in the receiver.
what if instead of one sweep of frequency you have a "chord" of a few frequencies; If the spread between the chord was constant/known by both parties could that be used to further reduce the SER/dB by trying to pick out which one is the signal (i.e. its more improbable that subsequent signals would share that pattern)... Only thing I could think of (non expert) could be that harmonics might produce similar correlated patterns, but if you had some other sort of shared pseudo-noise to pick the subsequent chord spacings ... or would having multiple signals being sent not be using the same SER/dB calculation?
Overall great video. Good job extracting the bottom line information from the sinusoidal equations. Small correction needed: 20 db implies a magnitude of 100, not 10. Meaning the at -20db, the Noise is 100x the Signal magnitude, further driving the point of just how effective the signaling scheme is at handling noise, especially when you show the -10dB signal... just imagine 10x that. I do wish that you explained the Y axis of the Err Rate vs SNR a little bit, because the way its graphed in the video (right to left) almost implies that the higher value on the Y axis is good, but for anyone viewing, having an error rate of 1 is of course unusable. Maybe a horizontal line on the graph that shows an acceptable error rate wouldve helped. Oh, and thank you VERY much for providing a Matlab example
Fantastic analysis and explanation of the signal. So does this breakdown such that many of the newer SDR equipment could utilize this as a new digital mode as well? This could be a new mode to explore for ham radio.
Thanks for the video-i’m an Amateur radio operator with an interest in digital modes and LORA. I’m not sophisticated enough to follow along with the calculations in the video, but I understood the scene behind interpreting the symbols based on your description.
Well, done! I was having a discussion in a math class where I introduced "i" and Complex Numbers to my 9 & 10.5 year old grandsons! (Yes, great joy in doing that!). I was immediately asked words to the effect of, "Well, that's all nice and consistent, and even beautiful if you wish, but it is all based on something that doesn't exist - the square root of negative one. How how can that have any practical value?" My answer then was (based on old analog oscillators I had studied early in EE in college) that when the complex roots of a quadratic equation have an imaginary component, the oscillator is unstable.) Neither a practical nor a very fascinating example for a 10-year old. But this! You've given me the most practical use of complex numbers - even more than the FFT itself - to be the basis of communication with a signal well below the noise level. As a long time amateur radio operator, liking CW (Morse code), we really appreciate digging a usable signal out of the noise. It can save lives. Some ham communications (lower frequency bands) bounce up and down off the ionosphere to make global communication with just milliwatts. Just subscribed. Will properly thank soon!
I would guess that the reduction in noise is related to the square root of the number of samples if the noise is uncorrelated. Just a basic signal averaging process after you account for the chirp?
This video provides an awesome explanation of the LoRa receiver. But my query is how the LoRa receiver knows about the received transmission's spreading factory. Only if the receiver knows the SF of the received transmission can it perform dechirping.
normally you'd be configuring both ends, or at least one end publishes the configuration parameters. for instance, the things network specifies the spreading factor, bandwidth, and frequencies that are used.. these vary by region. If you want to sniff for LoRa signals I think you'd have to try each spreading factor in turn, or if you had enough processing power you could apply several spreading factors to the same signal and see which one could sync up.
What an extremely well presented video on a very complex subject. What I was wondering is what kind of bit rate you expect from this modulation scheme. You could always add a Foreward Error Correction protocol (FEC) to the original signal to improve the SNR. We use that extensively on high speed optical transmission systems
Is there anything superior here compared to a classic MFSK, that can also be optionally spread with DSSS or something? All the low power perf just seems like a natural outcome of the super long correlation times, which would boost perf of any scheme. What am I missing?
It is traditional to modulate a signal with a carrier that is many times the frequency of the signal. If you were interested in doing the reverse and wanted to swap the carrier to be (for example 30MHz) and the signal to have a frequency of many times the carrier (for example 30GHz), how would you go about doing that and what modulation scheme would you propose?
Carrier would be lost (attenuated) when the distance is higher much more than signal having the base frequency? (I mean that the carrier would be lost much sooner with the distance increased than the base range)
@@vencdee That is the behaviour we would expect for a higher frequency signal but what if that higher frequency signal is modulated or embedded in a lower frequency carrier, wouldn't that allow the signal to cover much longer distances?
Man, how have I not come across your channel before and how are your subscriber numbers not 10x?! Instant subscribe, super clear explanation thank you!!
So, a SF=17 means each symbol could be treated as a 16-bit value, plus a parity bit, enabling the receiver to actually detect when the wrong symbol was received.
If I understand the modulation scheme correctly, then the spreading factor correlates with the symbol transmission time. This means that it falls entirely with the expected strategy for improving the probability of error, which is to either reduce the data rate (larger spreading factor) or to increase the transmission power. You could get even better error performance by (a priori) agreeing to only use a subset of the the symbols provided by a given spreading factor, since reducing the constellation size increases the distance between symbols and therefore reducing the probability of misinterpreting a symbol.
Are you certain about your treatment of # of symbols at 5:30 etc? Based on other documentation it would seem that spread factor has to do with how long each symbol takes to transmit, not the number of discreet frequencies steps that can be measured. Data rates go down with increasing spread factors, not up.
Spreading factor of 7 = 128 possible symbols (7 bits). Spreading factor = 8 = 256 possible symbols (8 bits). But the SF=8 symbol takes twice as long. So, increasing the spreading factor by 1 allows you to send 1 more bit per symbol but at half the previous symbol rate. The net effect is the datarate goes down with spreading factor even though there are a greater set of possible symbols transmitted within each chirp.
Wow, what a great video explanation. Thankyou. So if I get this correctly there is a signal hidden in the noise, you just need to know how to decode ... so wonder what the implications of something like this is for SETI and so on. Would the checks that SETI perform still just show noise as well.
This post attemps to fully describe the math behind the central equation of the video. The video shows the mathematical basis for a trick used in the LoRa implementation to reduce the complexity and power requirements of LoRa receivers. How LoRa works is quite simple, it sends a fixed duration linear chirp between fixed low and high frequencies, for each symbol to be transmitted, which symbol is determined by when the abrupt transiton from the highest back to the lowest frequency of the chirp occurs. There is also an abrupt transition between symbol boundaries. en.wikipedia.org/wiki/LoRa#LoRa_PHY The core equation for the trick is a thick read if you're not an RF design engineer. At 6:40 into the video, it shows Equation 2 from the original paper: c(n*Ts+k*T) = 1/sqrt(2**SF)*e**(j*2*pi*((s(n*Ts)+k)mod(2**SF))*(k*T*B/(2**SF)) c(): The complex number result from the equation, to be evaluated at each moment in time n*Ts+k*T: The time in seconds from time 0, when the k'th sample of the n'th symbol is sent SF: The "Spreading Factor", which is the number of bits in each symbol. k: An integer that increments up from 0 to (2**SF)-1 for each sample within a symbol Ts: The time it takes to send each symbol, there are 2**SF samples in each symbol n: An integer that increments up (starting from 0) with each symbol to be transmitted s(n*Ts): The integer value of the n'th symbol to be transmitted, a value between 0 and (2**SF)-1 B: The bandwidth that the complete LoRa signal will occupy in Hz pi: 3.14159265... (Ratio of the circumference over the diameter of a circle) e: 2.71828... (Euler's constant) j: The square root of -1 (some sources use the letter i instead of j) This is the equation for a complex sine wave using Euler's formula e**(j*2*pi*f*t) = cos(j*2*pi*f*t) + j*sin(j*2*pi*f*t) Euler's formula converts what would be a trigonometric equation involving sines and cosines into an exponential in the complex plane that is much easier to manipulate mathematically. We are interested the real part cos(2*pi*f*t), equal to sin(2*pi*f*t) shifted 90 degrees. In sin(2*pi*f*t), the sin() operator expects a value in radians, not in degrees. There are 2*pi radians in a full cycle of 360 degrees, so 2*pi*f is the frequency expressed in radians per second. Multiplying that by the time t in seconds we get the number of radians that have passed since time zero, and can evaluate the sin() function to determine the value (perhaps in Volts) of the sine wave at that moment. As t increases to infinity, the result of sin(2*pi*f*t) repeatedly cycles through values between +1 and -1. The complex conjugate of Equation 2 is: e**(-j*2*pi*f*t) = cos(j*2*pi*f*t) - j*sin(j*2*pi*f*t) At 15:00 minutes into the video he multiplies Equation 2 by its complex conjugate while performing the convolution, the imaginary parts involving j cancel out leaving only a real result. The mathematical trick is that the complex conjugate can be broken down into two terms, we need only multiply each incoming symbol by a base down-chirp (the complex conjugate of a base up-chirp), and this will result in a different constant tone for each possible symbol. The receiver must first be synchronized to the symbol boundaries by inspecting the preamble sequence. But forget complex conjugates, let's evaluate the real part of Equation 2: v(n*Ts + k*T) = 1/sqrt(2**SF) * sin(2*pi*((s(n*Ts)+k) mod(2**SF))*(k*T*B/(2**SF))) The v(n*Ts + k*T) means that the formula gives a value (perhaps in Volts) for the k'th sample of the n'th symbol to be transmitted. The 1/sqrt(2**SF) is a constant for the amplitude in Volts of the sine wave, which scales with the power of the transmitter. This is arbitrary, and we can ignore this factor. The remainder of the equation is: sin(2*pi*((s(n*Ts)+k) mod(2**SF))*(k*T*B/(2**SF))) and we expect this to be of the form: sin(2*pi*f*t). Since k is the number of steps and T is the seconds per step, then (k*T) is the elapsed time since the start of the symbol, and thus equal to "t". With that resolved, the remaining terms must be the frequency f in Hz: f = ((s(n*Ts)+k) mod(2**SF))*(B/(2**SF)) Lets make this all a bit more concrete by specifying that SF=7, so the symbols transmitted have 7 bits of information, and thus each symbol can take any of the 128 integer values between 0 and 127. We will further assume that the transmitter is continuously sending the same symbol of s(n*Ts) = 0. The text above Equation 2 in the paper says LoRa (arbitrarily?) sets the bandwidth B equal to the inverse of the sample time T, or B = 1/T. Let's assume a LoRa bandwidth of 10400 Hz, (one of the standard choices) so the sample time is 1/10400 = 0.000096 seconds When all the above substitutions are made, the equation for f in Hz simplifies to: f = ((0+k) mod(128))*(10400Hz/(128)) With the symbol value held at 0, the mod(128) no longer has any effect since it never sees an argument greater than 127: f = k * 10400Hz/128 And now it is clear that the frequency varies from 0 to 10400*127/128 = 10318.75 Hz with a step size of 10400/128 = 81.25 Hz as k increments from 0 to 127 during each symbol. This is a baseband signal. The signal must later be translated up to the target center frequency for transmission, in the US this would typically be in the 915 MHz ISM band. It seems likely that the discrete frequencies given by equation 2 would be the frequency at the center of each sample period, and that the frequency is varied continuously. Given that, the bandwidth will indeed be 10400 Hz. Each symbol in our example with SF=7 takes 128/10400 seconds to transmit, giving us a data rate of 7/(128/10400) = 568.75 bits/second. There will be overhead added to that for the preamble sequence used for synchronization, a header to identify the transmitter, and the proprietary LoRa Forward Error Correction. As others have noted in the comments, if we increase SF from 7 to 8 bits per symbol then the time it takes to send one symbol goes up from 128 sample periods to 256. Given the much longer time per bit spent transmitting, it is not surprising that noise immunity improves. Receiving signals below the noise floor has been done by radio amateurs for at least 50 years. Other services likely had similar schemes long before that. www.sigidwiki.com/images/a/a5/Coherent_CW_arrl.pdf
Can you explain why the the paper and video both use sample rates equal to the bandwidth? Is it because since they use complex signals, they can have negative frequencies for when the signal exceeds half the sample rate?
@@maxxiang8746 Good question! The word "sample" in the paper refers to a step in the chirp sent with each symbol. In the case of the SF=7 example in my previous post, there are SF**2 = 128 "samples" in each chirp, and the baseband signal goes from 0 hz to 10400 Hz, and thus has a bandwidth of 10400 Hz. Each "sample" or step is arbitrarily set to have a period of T=1/B = 1/10400 = 0.000096 seconds, and those steps come out at a rate of 10400 Hz. The Nyquist criteria states that a digital receiver would have to sample the baseband signal at an absolute minimum of twice the maximum frequency, or 2*10400=20800 Hz to fully represent the baseband signal, so clearly a digital receiver's ADC will have to sample at a much faster rate than the rate at which each step is transmitted. Tricks like sub-sampling might be used if assumptions are made about the transmitted signal, but I suspect that is not done. The more or less arbitrary T=1/B reduces the number of variables making computations easier, and it does seem to have a deep mathematical basis. I've been assuming the receiver has a single ADC that samples the incoming signal only after it is sharply filtered to the minimum possible bandwidth using analog techniques and down converted to baseband. In a real system, the sample rate would have to be much higher because such a perfect filter is impossible. Getting back to your question, if this is a phasing receiver that creates physically separate I and Q channels, then we could use two ADC's operating at half the sample rate required for a single ADC on those I and Q channels, which in a world of perfect filters could approach a minimum sample rate of B=1/T, or 10400 Hz in the example. However, if the I and Q channels are only a mathematical concept in the computations that occur after sampling a single ADC (as the paper suggests), then the Nyquist limit of twice the maximum baseband frequency is the absolute minimum theoretical sample rate. Speaking of Nyquist, he also also stated that a signal that carries n bits of information per second could occupy a minimum theoretical bandwidth of n/2 Hz, assuming there is no noise in the channel. This is the inverse of the previous concept that requires a sampling rate that is double the maximum frequency of an incoming signal, and a fair bit less intuitive: en.wikipedia.org/wiki/Nyquist_rate Our example sends 568.75 bits per second as computed in my previous post, the absolute minimum channel to transfer that information is 568.75/2 = 284.375 Hz. The 10400 Hz wide channel used by the SF=7 example is far larger, giving immunity from noise and allowing tolerances in the implementation of filters. The LoRa signal is optimized for reduced computation at the receiver, minimizing bandwidth may not be a primary goal. One complication I see but have no idea how to address quantitatively is that the sudden discontinuities in the LoRa chirp would increase the bandwidth required, and thus the sampling rate. I am not an expert in this, it took some thought for me to come up with this response. Anyone seeing errors or having further insights is encouraged to reply.
So what are the disavantages actually? I have the impression that this modulation could be used in many more applications. Such as space communication, oceanic VHF communication and if the radio waves are reflected in the atmosphere then also for over the horizon communication?? Good emergency network when the electric grid is down for some longer time and GSM starts to fail etc.
I dont think that the FFT to distinguish 2^SF symbols after dechirping is computational easier than 2^SF correlations with permutations of the ramp. The reason why LoRa is cheaper than the general case of spread spectrum is that there is not only the synchronization issue of the signal whose origin is initially unknown, but also frequency drift between the receiver and transmitter, and instead of calculating n x m correlations for n different timing offsets and m different frequency offsets, it can be done in n + m steps, by first superposing the chirps (local and remote) at best and then improving their correlation further by adjusting the frequency offset.
Exactly my first thought while watching this video. We need to look into radio SETI data for such signals. The problem is, there are so many parameter configurations you won't be able to find the signal. We need another mathematical trick there to speed up the search...
Everything about Lora is counterintuitive. Increasing the spreading factor which means increasing the possible symbols IMPROVES performance? Incredible how the maths proves the fact. Does make you think about what more advanced tech the military has hidden away
How does the receiver perform in the presence of two transmitters of equal received power? For other spread spectrum modulations, other transmitters would become noise. I don't think that would happen for this modulation scheme, it would be hard to separate them.
Impressed by the BER or more likely the SER (SymbolErrorRate), but what happens to the symbol rate or bit rate as you go higher in bits per symbol ?? I haven't read up at this yet, but let me guess - as the bits per symbol (SF) goes up you are blessed with better noise performance but the inverse bits per second rate penalty. Am I right?, if not why isn't this modulation scheme used anywhere?
I had a little difficulty understanding the math which means I need to study more math. I do have a couple of questions about the chirp. I am assuming that the positive slope represents a frequency that is starting at a low frequency and ends at a higher frequency. How does the size of the symbol affect the waveform? Does the bit size of the symbol change the slope and the amount of frequency change? What is meant by discontinuity? How does modulo fit into the explanation? What does a negative slope mean? Thank you for your video.
Assume we have an SF of 7, so each symbol we send has 7 bits, and there is one of 2**7=128 possible symbols encoded in each chirp, and the math described in this video assumes the receiver takes 128 samples in the time that it takes to send each chirp. If we go to an SF of 8, we are sending 8 bits per symbol, and there are 2**8=256 possible symbols, and the receiver takes 256 samples per chirp. If the sample rate is constant between those two examples, then it takes twice as long to send each symbol (or chirp) when SF=8. A third party looking at the signal would just see chirps of some constant duration, it would not be apparent what the sample rate or bits per symbol are, each chirp simply varies in frequency from some low frequency to some high frequency as determined by the bandwidth chosen by the transmitter. When the chirp reaches its maximum frequency, the modulo operator causes the frequency to suddenly transition back to the lowest frequency and start climbing up in frequency again, that is one example of a discontinuity (or sudden jump) in signal frequency. There are similar discontinuities between symbols (unless those symbols happen to have the same value). The negative slope you refer to is probably the down chirp (frequency falls instead of rises) used by the receiver to demodulate the signal, part of the trick that makes LoRa so cheap to implement.
Good video, but I don't quite understand why increasing the symbol duration gives better performance with lower SNR? Could someone please explain this?
Although I wasn't able to follow most of the parts related to the mathematical bases, but I got the concept behind and I've learned something new and interesting. I am sure I will never use it... but thanks :)
Amazing video! If i'm not wrong LoRa technique was used in Express LRS open source system used for example in FPV drones. You can get amazing range even at super small TinyWhoop like Mobula 7 1S ELRS. There is super tiny ceramic antenna and this system rocks in terms of penetration even on small transmitter power.
Which modulation scheme should I cover next? 🤔
I thought FT8, JT65, JT9, etc, were the best low noise schemes because of the very narrow bandwidth, which means you can use very narrow filters and get rid of almost all the noise.
This one....but after reading what Shannon limit is and Eb/N0...
Then you will compare apple to apples....
GPS Signals also come below the noise floor. They also have a correlation receiver type.
The descriptions of it, that I found, did not brought me insight how it really works on the modulation level.
I only understood that upper layer, there it receives from the 4 or more satellites their precise realtime and precise in space position, albeit the last digits of these numbers are enciphered for intentionally reducing the precision on non-military receivers.
I agree with Zach..894, any of the digital modes created by Dr. Joe Taylor. Use FT8 as your search term.
Go for WCDMA so you can compare processing gain against LoRa.
This is possibly the best explanation of Lora modulation I’ve seen ever…
It's like all of signal processing topics in one video! Exciting to learn about a robust platform with so much room for a lot of creative micro modulations.
No it is not !!
@@negvorsacould you link to a better one? I’d love to see that one too.
Why?
This is possibly the best explanation of anything I've ever seen.
This wasn't really emphasized but usually more bits per symbol means worse performance for a given SNR, but in LoRas case, a higher SF also greatly increases the symbol's duration (as well as the bits per symbol), increasing SF by 1 means 1 more bit per symbol but it also doubles the symbol length, so that gives you more effective spreading, and lets you go to lower SNRs.
Yes, you explain it well.
I was confused by this at first because I'm so used to more bits per symbol meaning worse performance, but this makes it clear, thanks!
Thanks for adding this crucial comment. I'm not sure why longer symbols give more effective spreading?
This is an extremely important point that confused me at first. Since the symbol duration doubles with each increase in the spreading factor by one, the symbol duration increases exponentially with the SF. However, the number of bits per symbol increases linearly with the SF. Consequently, the overall data rate decreases with an increased SF. There's no magic there; a lower data rate improves the permissible signal-to-noise ratio.
So how does the performance versus the bit energy to noise density ratio (Eb/No) compare to other modulation schemes and how does it change with SF?
I’m a ham operator. I setup a LoRa base station using the lora ham shield that runs on top of an arduino. With that arduino plugged into my raspberry pi at home, and another arduino with lora hsm shield running in my car. I was able to TX/RX short text messages first try back/forth about 9 miles apart. This was at only 1 watt or less power output, on 440 mhz. I was dumbfounded. It took some pass band filters, and good antennas, but still… Able to communicate well beyond any voice, digital voice, or digital modes on UHF from a very tough location to another, separated by multiple freeways, high rise buildings, trees, cars, etc, etc…
That is impressive.
Have a tutorial? I would be interested in your project 👍🏽
@paddler-sn7ub I don't sorry. It was an old project based on the LoRaChat program, and lora hamshield. The youtube channel was run by username inductive twig or something, and the arduino code for LoRaChat is on his github page.
The key to making these cheap single board transceivers communicate much further than what is possible, is by using band pass filters to block out all the other RF noise. So I used very tight, 435 to 450 mhz band pass filters when experimenting. Also very good coax and antennas. My base station during that test had 1/2" hardline running up to a good folded dipole 15' above my roof. So just reducing the losses. Especially at the receive side.
@ I don't think LoRa is possible on HF due to it's spread spectrum nature. The FCC only allows a single transmitting station to use and occupy so much of a frequency span simultaneously. Even on the upper bands, the power has to be kept low to avoid breaking the spectrum bandwidth restrictions.
It absolutely blew my mind how clearly you have explained the LoRa modulation despite the complex maths behind it.
Thanks!
“You can always detect a sine wave in noise….if you are willing to “wait” long enough” - E.J. Swanson
Dont know what amazed me more - the LoRa protocol or your explaination. Thanks for the video.
Great video!
Just one comment: The LoRa demodulator is basically a correlator plus a bank of filters, the latter being implemented using FFT. And, the LoRa symbols are basically time shifted versions of each other.
Conceptually it is very similar to an FMCW radar that also uses a similar demodulator. Instead of the symbols, the radar receives time delayed versions of the chirp waveform depending on the location of the target. The correlator output is a sine wave (for a single point target) whose frequency is proportional to the time delay (i.e. the range). Bank of filters (i.e. FFT) can thus be used to discriminate targets.
Are matched filters used to sense each frequency component?
The FFT by its nature is a matched filter to the fundamental sin/cos waves@@eswnl1
@@eswnl1 The FFT IS the bank of matched filters. Each FFT bin is computing how well the input signal matches the frequency for that bin. For CSS, the highest bin number is the symbol. For FMCW radar, the highest bin number is the range.
This is what I call well-balanced video making and editing: normal transitions, clear presentation, voice level fairly constant, background tune merely present and allows or even helps one to get immersed in the topic without being disturbed either by its loudness or a crappy tune choice.
Your explanation is pretty good and shows you have a good understanding of the principles, but math is my weak side so I mostly skip over calculus and differential equations.
If he'd encoded the music using LoRa it could have been turned down to below the noise floor! /s
Perfect material for our LoRa APRS group!
I've been very impressed with the performance I've been getting with LoRa, and this was a wonderful addition to the documentation from Semtec. They make it easy enough to use, but this understanding is invaluable.
Man, your explanation is awesome. I really liked the way you added the paper information and brought a nice explanation. Please, keep going with these kind of videos.
Regards,
Pedro.
This the very original way in which knowledge should be conveyed. Structured, well articulated language and definitely accurate. Thank you for your time and effort. New subscriber.
Excellent video mate, cheers for that! Good to see matlab getting used as well, it is invaluable in so many ways.
I'm new to radio staff. But I have basic knowledge of signal processing from my university studied 30 years ago. That is best described LoRa that I really understood. Keep up with a great job spreading knowledge and understanding!!! 🙏🙏🙏
Thanks for such a well presented and clear description of the modulation scheme used.
In response to your question, the LoRa modulation scheme is still subject to the Shannon limit, the maximum information rate is a function of channel SNR and bandwidth.
If you increase the spreading factor in a channel where the SNR is constant, you will need more bandwidth to maintain the received symbol error rate.
As bandwidth is usually fixed for a given channel, the SF can be varied to optimise information throughput for a given channel SNR. This can be done adaptively as the SNR varies over time, due to radio fading and interference sources.
Brilliant video, this has demystified how the modulation and below noise floor parts work for me far better than any other video I've watched.
Many thanks for posting this video. I had no idea how LoRa worked beforehand but your video clearly explained it. It took a while to figure out how convert your Matlab code into Octave code and correct my typos. But the final result worked exactly like your demo showed.
Can you pls share your octave version?
🎯 Key points for quick navigation:
00:00:00 *Long-range IoT communication*
00:00:27 *Unique Lora modulation*
00:00:42 *Demodulating below noise*
00:01:12 *Chirp waveform basis*
00:04:12 *Up and down chirps*
00:05:10 *Frequency shift chirp*
00:06:18 *Symbol frequency continuity*
00:09:06 *Correlation similarity check*
00:11:00 *Frame synchronization issue*
00:13:07 *Efficient mathematical trick*
00:15:10 *Multiplication with downchirp*
00:17:08 *Detecting hidden signals*
00:18:20 *Excellent low SNR performance*
00:21:30 *MATLAB symbol error rate*
00:25:50 *Flexibility in spreading factor*
00:27:36 *Efficient chirp spectrum usage*
Made with HARPA AI
There is an error starting at about 13:40 about complex conjugate, and goes on further at 16 etc. The actual demodulation chirp is of the same slope as the modulated signal. With multiplication you get sum and difference of the frequencies, and that does the dechirping.
Thanks for the video and very clear explanation.
As a graduated in electronic engineering at the Padua university ( the same of Lorenzo Evangelista) I studied spread spectrum in the nineties but at the time I didn't catched the concept: too much theory and few concrete examples. At the time spread spectrum modulation was probably used only by military and hardware was not able to support the computation needed.
After this video I want to go deeper on how Lora works, I think I will take the mathlab simulation you have developed to play a bit by myself.
I have been long time to browse such best explanation of Lora to understand, thanks for great lecture
Awesome explanation and really amazing that higher s gives better performance on low snr. Should definitely be watched by many hams here on YT since it seems they still mess up all the terms and don't really understand LoRa
This video is simply unbelievable, very clever explanation!
Thanks!
As a visual learner - THANK YOU! I don't think I could have ever wrapped my head around this without your visual representation of time. All of it makes sense and, when you see how it works, it is one of those things that makes you go - yeah, why did it take so long for this to be figured out?! THANK YOU!!!
Thanks for the clear explanation! I do wonder what happens if there are 2 LoRa transmitters in an area though, how would the receiver distinguish between them?
Let me see, as stated in some comments, if the SF increases by 1, the symbol length (and window) doubles. That effectively lowers the bitrate, which makes total sense.
Then, why the chirp at all? You could do exactly the same with nFSK, just have more possible values per symbol, over a longer time with a lower bitrate.
For this to work so well, the chirp has to provide some important benefit. Perhaps less reliance in the oscillator stability?
I'd love to see a comparison between LoRa and an equivalent nFSK in Matlab.
BTW awesome video!
I guess the nFSK system would fail much sooner due to frequency selective multipath or constant carrier interference. That interference won't match the chirp rate. The difference wouldn't show in a simulation using AGWN like in this video. Just a guess, this video is the only real research I've done into LoRa.
@realsolarcars I guess, but you could address those problems in nFSK in an upper level of spreading and FEC, no one said the FSK should be simple and straight, after all LoRa isn't. I think what I try to say is that there is no real need for the continuous shifting in frequency, you could instead do discrete jumping between the n subcarriers. The reason could very well be making it patentable. Anyway I am just guessing. Regards!
The benefit is each symbol is spread across the entire bandwidth, so no symbol can be lost in a multipath null, unlike what could happen with nFSK. When you DONT use forward error correction this has big advantage!
Great explanation. Here is the code if you want to play with it.
clear all
SF = 7; %Spreading Factor
BW = 1000;% Bandwidth
Fs = 1000;%Sampling Frequency
s = 127; %send symbol '10'
SNR = -10;%Signal to Noise Ratio
%Generate a data symbol
num_samples =(2^SF)*Fs/BW;
k = s; %add s to k to start (defines the data symbol)
lora_symbol = zeros(1,num_samples);
for n=1:num_samples
if k>= (2^SF)
k = k-2^SF;
end
k = k+1;
lora_symbol(n) = (1/(sqrt(2^SF)))*exp(1i*2*pi*(k)*(k/(2^SF*2)));
end
loop = 100;
ind2 = zeros(1,loop);
for j=1:loop
%Add noise
lora_symbol_noisy = awgn(lora_symbol,SNR,'measured');
%Transmit
%Receiver below
% Generate the Base Down Chirp
base_down_chirp = zeros(1,num_samples);
k=0;
for n=1:num_samples
if k>= (2^SF)
k = k-2^SF;
end
k = k + 1;
base_down_chirp(n) = (1/(sqrt(2^SF)))*(exp(-1i*2*pi*(k)*(k/(2^SF*2))));
end
dechirped = lora_symbol_noisy.*(base_down_chirp);
corrs = (abs(fft(dechirped)).^2);
figure(1); plot(corrs)
[~, ind] = max(corrs);
ind2(j) = ind;
pause(0.01)
end
figure(2); histogram(ind2,2^SF)
symbol_error_rate = sum(ind2~=s+1)/j
figure(3); spectrogram(lora_symbol)
Well done. It would be interesting to add information about the bandwidth of the signal vs SF. This relates directly to the received noise and hence the S/N ratio. This will perhaps also shed a light on your question how far one can go by increasing the SF.
Thanks for explaining this what I always considered RF wizardry. Even though I don't have the mathematical fundament to stand on to understand it thoroughly, I have the feeling that I'm a lot smarter than before the video
This video really explains not only LoRa protocol. But Modulation/Demodulation process in general. Nice!
Years ago with a friend i did a equivalent experiment using GNU-Radio.
Not related to LoRa but the target was using width bandwidth spreadspectrum to get a signal over a long distance 100 - 200 km (60-100Mi)
I also added a noise generator to see what happened....
it's long ago, but you retriggered my interest.
Wonderful video. Amazing. I'm working with LoRA modeling on my thesis. Great job and great explanation.
That was a very nice description - thank you. As a retired signal processing engineer it's nice to hear a good explanation! You suggest that the performance might keep on increasing with spreading factor without limit - it would be interesting (necessary, even) to include the initial detecton and synchronisation process, in noise, in your simulation, and then perhaps the effects of multipath, fading and Doppler. The decoder could be quite sensitive to symbol timing variation thoughout the packet - how long would a packet be? Terrestrial DAB modulation is based on frequencies rather than chirps, but the receive process is not disimilar - do you have any idea of the relative performance?
I'm not familiar with the papers or the intended applications, but I would expect there to be further gains from hard or soft error detection/correction coding at the data level.
Very good points raised here 👍
Thanks
Many thanks for your support.
This video is simply incredible. Thank you _so_ much for explaining this. Help me tons!
Perfect video. It's like a missed Digital Communications lecture that I finally found. Thank you.
Quick correction at 18:23: SNR ratio of -20 db means that the noise is 100 times greater than signal.
thank you so much, kind person! Without you it would have taken ages for to learn all of that
For as little as I do know about wireless, and even wired signal communications, this honestly feels like it fills a lot of gaps in my brain
Since TH-cam has trouble with comments on Shorts, if there are any here that are unrelated, @ me so I can just delete them
Wow beautiful! From a new modulation concept with a complex maths expressions to a smart way of computational representation, that’s incredible! Cannot imagine how people invented this smart are!
Thanks! Yes, it is a smart idea with a lot of applications.
This is a really good video you did explaining LoRa "mathematics', i.e. the magic of decoding a symbol where signal is less than noise i.e. SNR negative 8-) and the Matlab code is really useful. Thank you!
Great video. I love learning the theory behind stuff like LoRa. Keep it up.
Very well presented! In thinking about the limits to the number of symbols, as the symbol duration increases distortions in propagation will modulate the baseband coordinates and increase the error rate. This is not ‘noise’ and will not show up in simulation. A noise driven delay modulation term would cover this.
Life, the Universe and Everything.
Excellent Teaching.
Wow - great explanation - usually there are 3 features but youre only allowed 2 of them - here you can choose 3 simultanously :) Low Bitrate, Low Power and Long Range :) - great idea :)))
Well technically the desirable traits are High Bitrate, Low Power and Long Range. Power and bitrate are low to begin with. Each time you increment the spreading factor, symbol duration has to double, but so does the number of bits per symbol. I think the trade-off there is in the processing power needed by the larger FFT in the receiver.
what if instead of one sweep of frequency you have a "chord" of a few frequencies; If the spread between the chord was constant/known by both parties could that be used to further reduce the SER/dB by trying to pick out which one is the signal (i.e. its more improbable that subsequent signals would share that pattern)... Only thing I could think of (non expert) could be that harmonics might produce similar correlated patterns, but if you had some other sort of shared pseudo-noise to pick the subsequent chord spacings ...
or would having multiple signals being sent not be using the same SER/dB calculation?
Overall great video. Good job extracting the bottom line information from the sinusoidal equations. Small correction needed: 20 db implies a magnitude of 100, not 10. Meaning the at -20db, the Noise is 100x the Signal magnitude, further driving the point of just how effective the signaling scheme is at handling noise, especially when you show the -10dB signal... just imagine 10x that.
I do wish that you explained the Y axis of the Err Rate vs SNR a little bit, because the way its graphed in the video (right to left) almost implies that the higher value on the Y axis is good, but for anyone viewing, having an error rate of 1 is of course unusable. Maybe a horizontal line on the graph that shows an acceptable error rate wouldve helped.
Oh, and thank you VERY much for providing a Matlab example
Great tutorial! TH-cam at it's finest. Thank you.
Really good explanation! Again this shows the power of FFT. OFDM uses a similar mathimatical trick with the FFT btw.
Great video, why the code in the exponential part divided by 2^SF*2? in the paper, it is devided by 2^SF, the same in dechirp part? Thanks a lot.^_^
What a great video and details explanation!
That helps me a lot with my project in LoRa IoT!
Thank you very much!
Excellent explanation. Excellent content. Excellent topic. Keep up the good work.
Fantastic analysis and explanation of the signal. So does this breakdown such that many of the newer SDR equipment could utilize this as a new digital mode as well? This could be a new mode to explore for ham radio.
what are the situations where higher spreading factor is better and what are the situations where lower spreading factor is better?
Thanks for the video-i’m an Amateur radio operator with an interest in digital modes and LORA. I’m not sophisticated enough to follow along with the calculations in the video, but I understood the scene behind interpreting the symbols based on your description.
Glad it was helpful!
Well, done! I was having a discussion in a math class where I introduced "i" and Complex Numbers to my 9 & 10.5 year old grandsons! (Yes, great joy in doing that!).
I was immediately asked words to the effect of, "Well, that's all nice and consistent, and even beautiful if you wish, but it is all based on something that doesn't exist - the square root of negative one. How how can that have any practical value?" My answer then was (based on old analog oscillators I had studied early in EE in college) that when the complex roots of a quadratic equation have an imaginary component, the oscillator is unstable.) Neither a practical nor a very fascinating example for a 10-year old. But this!
You've given me the most practical use of complex numbers - even more than the FFT itself - to be the basis of communication with a signal well below the noise level.
As a long time amateur radio operator, liking CW (Morse code), we really appreciate digging a usable signal out of the noise. It can save lives. Some ham communications (lower frequency bands) bounce up and down off the ionosphere to make global communication with just milliwatts. Just subscribed. Will properly thank soon!
I would guess that the reduction in noise is related to the square root of the number of samples if the noise is uncorrelated. Just a basic signal averaging process after you account for the chirp?
Great Vid! Although I mostly forgot university maths, I got to understand the principle of spreading factor and symbols on LORA.
@1.40 The diagram seems to indicatr frequency shift keying not phase shift keying
Signed up! Love so deep math analysis.
This video provides an awesome explanation of the LoRa receiver. But my query is how the LoRa receiver knows about the received transmission's spreading factory. Only if the receiver knows the SF of the received transmission can it perform dechirping.
normally you'd be configuring both ends, or at least one end publishes the configuration parameters. for instance, the things network specifies the spreading factor, bandwidth, and frequencies that are used.. these vary by region. If you want to sniff for LoRa signals I think you'd have to try each spreading factor in turn, or if you had enough processing power you could apply several spreading factors to the same signal and see which one could sync up.
Excellent video. Is it possible to get the Matlab code?
Truly wonderful and comprehensive explanation. Thanks a lot!
What an extremely well presented video on a very complex subject. What I was wondering is what kind of bit rate you expect from this modulation scheme. You could always add a Foreward Error Correction protocol (FEC) to the original signal to improve the SNR. We use that extensively on high speed optical transmission systems
Is there anything superior here compared to a classic MFSK, that can also be optionally spread with DSSS or something? All the low power perf just seems like a natural outcome of the super long correlation times, which would boost perf of any scheme. What am I missing?
Nothing! This is known as orthogonal modulation. The price you pay is low bot rate and wide bandwidth for performance a low SNR's.
It is traditional to modulate a signal with a carrier that is many times the frequency of the signal. If you were interested in doing the reverse and wanted to swap the carrier to be (for example 30MHz) and the signal to have a frequency of many times the carrier (for example 30GHz), how would you go about doing that and what modulation scheme would you propose?
Carrier would be lost (attenuated) when the distance is higher much more than signal having the base frequency? (I mean that the carrier would be lost much sooner with the distance increased than the base range)
@@vencdee That is the behaviour we would expect for a higher frequency signal but what if that higher frequency signal is modulated or embedded in a lower frequency carrier, wouldn't that allow the signal to cover much longer distances?
Well produced! I'll investigate more with MatLab; very inspiring!
This is a super valuable video! Simple and to the point. Thanks!
Man, how have I not come across your channel before and how are your subscriber numbers not 10x?! Instant subscribe, super clear explanation thank you!!
Super. Best explanation possible using difficult math.
"Spreading factor is between 7 and 12 in Lora"
Fascinating, I'll be sure to let her know.
So, a SF=17 means each symbol could be treated as a 16-bit value, plus a parity bit, enabling the receiver to actually detect when the wrong symbol was received.
The clearest explanation in the history of explanations.
If I understand the modulation scheme correctly, then the spreading factor correlates with the symbol transmission time. This means that it falls entirely with the expected strategy for improving the probability of error, which is to either reduce the data rate (larger spreading factor) or to increase the transmission power. You could get even better error performance by (a priori) agreeing to only use a subset of the the symbols provided by a given spreading factor, since reducing the constellation size increases the distance between symbols and therefore reducing the probability of misinterpreting a symbol.
Are you certain about your treatment of # of symbols at 5:30 etc?
Based on other documentation it would seem that spread factor has to do with how long each symbol takes to transmit, not the number of discreet frequencies steps that can be measured. Data rates go down with increasing spread factors, not up.
Spreading factor of 7 = 128 possible symbols (7 bits). Spreading factor = 8 = 256 possible symbols (8 bits). But the SF=8 symbol takes twice as long. So, increasing the spreading factor by 1 allows you to send 1 more bit per symbol but at half the previous symbol rate. The net effect is the datarate goes down with spreading factor even though there are a greater set of possible symbols transmitted within each chirp.
Amazing lecture indeed. Would you make more tutorials on LoRaWAN implementation, hacking, and defending?
@ 7:44 Does the emitted signal amplitude have to present a discontinuity or can it be phase-continuous ?
Hi, would you please let me know how can I plot LoRa spreading Factor for RSSI and Distance?
at 4:09 you put up both down chirps. Thanks for the lecture
Wow, what a great video explanation. Thankyou. So if I get this correctly there is a signal hidden in the noise, you just need to know how to decode ... so wonder what the implications of something like this is for SETI and so on. Would the checks that SETI perform still just show noise as well.
This post attemps to fully describe the math behind the central equation of the video.
The video shows the mathematical basis for a trick used in the LoRa implementation
to reduce the complexity and power requirements of LoRa receivers. How LoRa works is
quite simple, it sends a fixed duration linear chirp between fixed low and high frequencies,
for each symbol to be transmitted, which symbol is determined by when the abrupt transiton
from the highest back to the lowest frequency of the chirp occurs. There is also an abrupt
transition between symbol boundaries. en.wikipedia.org/wiki/LoRa#LoRa_PHY
The core equation for the trick is a thick read if you're not an RF design engineer.
At 6:40 into the video, it shows Equation 2 from the original paper:
c(n*Ts+k*T) = 1/sqrt(2**SF)*e**(j*2*pi*((s(n*Ts)+k)mod(2**SF))*(k*T*B/(2**SF))
c(): The complex number result from the equation, to be evaluated at each moment in time
n*Ts+k*T: The time in seconds from time 0, when the k'th sample of the n'th symbol is sent
SF: The "Spreading Factor", which is the number of bits in each symbol.
k: An integer that increments up from 0 to (2**SF)-1 for each sample within a symbol
Ts: The time it takes to send each symbol, there are 2**SF samples in each symbol
n: An integer that increments up (starting from 0) with each symbol to be transmitted
s(n*Ts): The integer value of the n'th symbol to be transmitted, a value between 0 and (2**SF)-1
B: The bandwidth that the complete LoRa signal will occupy in Hz
pi: 3.14159265... (Ratio of the circumference over the diameter of a circle)
e: 2.71828... (Euler's constant)
j: The square root of -1 (some sources use the letter i instead of j)
This is the equation for a complex sine wave using Euler's formula
e**(j*2*pi*f*t) = cos(j*2*pi*f*t) + j*sin(j*2*pi*f*t)
Euler's formula converts what would be a trigonometric equation involving sines and cosines
into an exponential in the complex plane that is much easier to manipulate mathematically.
We are interested the real part cos(2*pi*f*t), equal to sin(2*pi*f*t) shifted 90 degrees.
In sin(2*pi*f*t), the sin() operator expects a value in radians, not in degrees.
There are 2*pi radians in a full cycle of 360 degrees, so 2*pi*f is the frequency
expressed in radians per second. Multiplying that by the time t in seconds we get the
number of radians that have passed since time zero, and can evaluate the sin() function
to determine the value (perhaps in Volts) of the sine wave at that moment. As t increases
to infinity, the result of sin(2*pi*f*t) repeatedly cycles through values between +1 and -1.
The complex conjugate of Equation 2 is: e**(-j*2*pi*f*t) = cos(j*2*pi*f*t) - j*sin(j*2*pi*f*t)
At 15:00 minutes into the video he multiplies Equation 2 by its complex conjugate while performing
the convolution, the imaginary parts involving j cancel out leaving only a real result.
The mathematical trick is that the complex conjugate can be broken down into two terms,
we need only multiply each incoming symbol by a base down-chirp (the complex conjugate of
a base up-chirp), and this will result in a different constant tone for each possible symbol.
The receiver must first be synchronized to the symbol boundaries by inspecting the preamble sequence.
But forget complex conjugates, let's evaluate the real part of Equation 2:
v(n*Ts + k*T) = 1/sqrt(2**SF) * sin(2*pi*((s(n*Ts)+k) mod(2**SF))*(k*T*B/(2**SF)))
The v(n*Ts + k*T) means that the formula gives a value (perhaps in Volts)
for the k'th sample of the n'th symbol to be transmitted.
The 1/sqrt(2**SF) is a constant for the amplitude in Volts of the sine wave, which
scales with the power of the transmitter. This is arbitrary, and we can ignore this factor.
The remainder of the equation is: sin(2*pi*((s(n*Ts)+k) mod(2**SF))*(k*T*B/(2**SF)))
and we expect this to be of the form: sin(2*pi*f*t).
Since k is the number of steps and T is the seconds per step, then (k*T) is the
elapsed time since the start of the symbol, and thus equal to "t".
With that resolved, the remaining terms must be the frequency f in Hz:
f = ((s(n*Ts)+k) mod(2**SF))*(B/(2**SF))
Lets make this all a bit more concrete by specifying that SF=7,
so the symbols transmitted have 7 bits of information, and thus each symbol
can take any of the 128 integer values between 0 and 127. We will further assume
that the transmitter is continuously sending the same symbol of s(n*Ts) = 0.
The text above Equation 2 in the paper says LoRa (arbitrarily?) sets the bandwidth B equal
to the inverse of the sample time T, or B = 1/T. Let's assume a LoRa bandwidth of 10400 Hz,
(one of the standard choices) so the sample time is 1/10400 = 0.000096 seconds
When all the above substitutions are made, the equation for f in Hz simplifies to:
f = ((0+k) mod(128))*(10400Hz/(128))
With the symbol value held at 0, the mod(128) no longer has any effect
since it never sees an argument greater than 127:
f = k * 10400Hz/128
And now it is clear that the frequency varies from 0 to 10400*127/128 = 10318.75 Hz
with a step size of 10400/128 = 81.25 Hz as k increments from 0 to 127 during each symbol.
This is a baseband signal. The signal must later be translated up to the target center
frequency for transmission, in the US this would typically be in the 915 MHz ISM band.
It seems likely that the discrete frequencies given by equation 2 would be the frequency
at the center of each sample period, and that the frequency is varied continuously.
Given that, the bandwidth will indeed be 10400 Hz.
Each symbol in our example with SF=7 takes 128/10400 seconds to transmit,
giving us a data rate of 7/(128/10400) = 568.75 bits/second.
There will be overhead added to that for the preamble sequence used for synchronization,
a header to identify the transmitter, and the proprietary LoRa Forward Error Correction.
As others have noted in the comments, if we increase SF from 7 to 8 bits per symbol
then the time it takes to send one symbol goes up from 128 sample periods to 256.
Given the much longer time per bit spent transmitting, it is not surprising
that noise immunity improves.
Receiving signals below the noise floor has been done by radio amateurs for at least 50 years.
Other services likely had similar schemes long before that.
www.sigidwiki.com/images/a/a5/Coherent_CW_arrl.pdf
Can you explain why the the paper and video both use sample rates equal to the bandwidth? Is it because since they use complex signals, they can have negative frequencies for when the signal exceeds half the sample rate?
@@maxxiang8746
Good question! The word "sample" in the paper refers to a step in the chirp sent with each symbol. In the case of the SF=7 example in my previous post, there are SF**2 = 128 "samples" in each chirp, and the baseband signal goes from 0 hz to 10400 Hz, and thus has a bandwidth of 10400 Hz. Each "sample" or step is arbitrarily set to have a period of T=1/B = 1/10400 = 0.000096 seconds, and those steps come out at a rate of 10400 Hz. The Nyquist criteria states that a digital receiver would have to sample the baseband signal at an absolute minimum of twice the maximum frequency, or 2*10400=20800 Hz to fully represent the baseband signal, so clearly a digital receiver's ADC will have to sample at a much faster rate than the rate at which each step is transmitted. Tricks like sub-sampling might be used if assumptions are made about the transmitted signal, but I suspect that is not done.
The more or less arbitrary T=1/B reduces the number of variables making computations easier, and it does seem to have a deep mathematical basis. I've been assuming the receiver has a single ADC that samples the incoming signal only after it is sharply filtered to the minimum possible bandwidth using analog techniques and down converted to baseband. In a real system, the sample rate would have to be much higher because such a perfect filter is impossible. Getting back to your question, if this is a phasing receiver that creates physically separate I and Q channels, then we could use two ADC's operating at half the sample rate required for a single ADC on those I and Q channels, which in a world of perfect filters could approach a minimum sample rate of B=1/T, or 10400 Hz in the example. However, if the I and Q channels are only a mathematical concept in the computations that occur after sampling a single ADC (as the paper suggests), then the Nyquist limit of twice the maximum baseband frequency is the absolute minimum theoretical sample rate.
Speaking of Nyquist, he also also stated that a signal that carries n bits of information per second could occupy a minimum theoretical bandwidth of n/2 Hz, assuming there is no noise in the channel. This is the inverse of the previous concept that requires a sampling rate that is double the maximum frequency of an incoming signal, and a fair bit less intuitive: en.wikipedia.org/wiki/Nyquist_rate
Our example sends 568.75 bits per second as computed in my previous post, the absolute minimum channel to transfer that information is 568.75/2 = 284.375 Hz. The 10400 Hz wide channel used by the SF=7 example is far larger, giving immunity from noise and allowing tolerances in the implementation of filters. The LoRa signal is optimized for reduced computation at the receiver, minimizing bandwidth may not be a primary goal. One complication I see but have no idea how to address quantitatively is that the sudden discontinuities in the LoRa chirp would increase the bandwidth required, and thus the sampling rate.
I am not an expert in this, it took some thought for me to come up with this response. Anyone seeing errors or having further insights is encouraged to reply.
So what are the disavantages actually? I have the impression that this modulation could be used in many more applications. Such as space communication, oceanic VHF communication and if the radio waves are reflected in the atmosphere then also for over the horizon communication?? Good emergency network when the electric grid is down for some longer time and GSM starts to fail etc.
its very slow and uses a large bandwidth compared to other methods
Have we looked into radio SETI data potentially using this or a similar modulation?
I dont think that the FFT to distinguish 2^SF symbols after dechirping is computational easier than 2^SF correlations with permutations of the ramp. The reason why LoRa is cheaper than the general case of spread spectrum is that there is not only the synchronization issue of the signal whose origin is initially unknown, but also frequency drift between the receiver and transmitter, and instead of calculating n x m correlations for n different timing offsets and m different frequency offsets, it can be done in n + m steps, by first superposing the chirps (local and remote) at best and then improving their correlation further by adjusting the frequency offset.
Excellent introduction, if possible post links cited in the video is better.
Will do, thanks.
Did this come out of SETI research? Or could it be applied to SETI data like the SETI at Home recordings from the Arecebo dish back in the late 90s?
Exactly my first thought while watching this video. We need to look into radio SETI data for such signals. The problem is, there are so many parameter configurations you won't be able to find the signal. We need another mathematical trick there to speed up the search...
Everything about Lora is counterintuitive. Increasing the spreading factor which means increasing the possible symbols IMPROVES performance? Incredible how the maths proves the fact. Does make you think about what more advanced tech the military has hidden away
As noted in other comments, the data rate falls in relation to improvement in noise performance
How does the receiver perform in the presence of two transmitters of equal received power? For other spread spectrum modulations, other transmitters would become noise. I don't think that would happen for this modulation scheme, it would be hard to separate them.
Impressed by the BER or more likely the SER (SymbolErrorRate), but what happens to the symbol rate or bit rate as you go higher in bits per symbol ??
I haven't read up at this yet, but let me guess - as the bits per symbol (SF) goes up you are blessed with better noise performance but the inverse bits per second rate penalty.
Am I right?, if not why isn't this modulation scheme used anywhere?
I had a little difficulty understanding the math which means I need to study more math. I do have a couple of questions about the chirp. I am assuming that the positive slope represents a frequency that is starting at a low frequency and ends at a higher frequency. How does the size of the symbol affect the waveform? Does the bit size of the symbol change the slope and the amount of frequency change? What is meant by discontinuity? How does modulo fit into the explanation? What does a negative slope mean? Thank you for your video.
Assume we have an SF of 7, so each symbol we send has 7 bits, and there is one of 2**7=128 possible symbols encoded in each chirp, and the math described in this video assumes the receiver takes 128 samples in the time that it takes to send each chirp. If we go to an SF of 8, we are sending 8 bits per symbol, and there are 2**8=256 possible symbols, and the receiver takes 256 samples per chirp. If the sample rate is constant between those two examples, then it takes twice as long to send each symbol (or chirp) when SF=8. A third party looking at the signal would just see chirps of some constant duration, it would not be apparent what the sample rate or bits per symbol are, each chirp simply varies in frequency from some low frequency to some high frequency as determined by the bandwidth chosen by the transmitter. When the chirp reaches its maximum frequency, the modulo operator causes the frequency to suddenly transition back to the lowest frequency and start climbing up in frequency again, that is one example of a discontinuity (or sudden jump) in signal frequency. There are similar discontinuities between symbols (unless those symbols happen to have the same value). The negative slope you refer to is probably the down chirp (frequency falls instead of rises) used by the receiver to demodulate the signal, part of the trick that makes LoRa so cheap to implement.
Good video, but I don't quite understand why increasing the symbol duration gives better performance with lower SNR? Could someone please explain this?
Excellent ! Really helped me to grasp the intution about LoRa !
Very good, well done. How can I get the Matlab script, please?
How the spreading factor is related to the bandwidth?
How can a receiver distinguish between transmitters? Can LoRa be jammed?
Although I wasn't able to follow most of the parts related to the mathematical bases, but I got the concept behind and I've learned something new and interesting. I am sure I will never use it... but thanks :)
Amazing video! If i'm not wrong LoRa technique was used in Express LRS open source system used for example in FPV drones. You can get amazing range even at super small TinyWhoop like Mobula 7 1S ELRS. There is super tiny ceramic antenna and this system rocks in terms of penetration even on small transmitter power.
Truly amazing work . Thanks for your efforts. Inspiring ❤
Excellent. Is your matlab code available? I'm interested in the performance in a multipath environment.