Я пытаюсь узнать о шуме, чувствительности и теореме Шеннона-Хартли , и я использую некоторые спецификации для ИС узла LoRa, чтобы опробовать ее.
Теорема Шеннона-Хартли говорит, что максимальная скорость передачи данных дан кем-то
Где и - мощность сигнала и шума в пределах полностью используемой полосы пропускания . LoRa занимает полосу пропускания, используя довольно классный Chirp Spread Spectrum, о котором вы можете узнать больше в этом замечательном ответе , а также в этом вопросе.
Фундаментальным уровнем шума в слабосигнальной аналоговой электронике обычно является тепловой шум, и, если я правильно понимаю, это обычно дается выражением
Я рассчитал предел Шеннона-Хартли для теоретической максимальной скорости передачи данных, возможной для различных значений в Таблице 12 таблицы данных, и сравнил с битами в секунду, фактически реализуемыми при этих указанных значениях чувствительности, я был действительно рад видеть, что я на правильном уровне и хорошо отслеживая тенденцию.
Предел Шеннона-Хартли всегда примерно в 20-30 раз быстрее указанной скорости.
Мне просто интересно; может ли это быть пределом безопасности или консервативной спецификацией (они увеличили чувствительность, чтобы убедиться, что они могут соответствовать ей), или есть фактор, который я забыл?
Вопрос: правильно ли я использую здесь теорему Шеннона-Хартли и тепловой шум?
В качестве бонуса, есть идеи, являются ли 14 дБ запасом прочности или минимальный уровень шума на самом деле не является тепловым?
примечание: при этих скоростях сигнал значительно ниже шума , что также указано в техническом паспорте.
Таблица 12 из версии 5 — август 2016 г. технического описания SEMTECH SX1276/77/78/79 . ©2016 Корпорация Semtech www.semtech.com
def log2(x):
return np.log(x) / np.log(2.)
import numpy as np
import matplotlib.pyplot as plt
kB = 1.38064852E-23 # Joules K^-1 "Boltzman's Constant"
T = 298. # about 25C
BW = np.array(2*[10400] + 2*[20800] + 2*[62500] + 2*[125000], dtype=float)
SF = np.array(4*[6, 12], dtype=float)
bps = np.array([782, 24, 1562, 49, 4688, 146, 9380, 293], dtype=float)
dBm = np.array([-131, -147, -128, -144, -121, -139, -118, -136], dtype=float)
lines = np.arange(1, 9)
noise = kB * T * BW # Joules K^-1 * K * s^-1 = Watts
signal = 10**(0.1*dBm-3.) # Watts
Shannon = BW * log2(1. + signal/noise)
plt.figure()
plt.plot(lines, bps, linewidth=2)
plt.plot(lines, Shannon, linewidth=2)
plt.yscale('log')
lfs, tfs = 16, 16
plt.text(6, 50, 'bps', fontsize=tfs)
plt.text(5, 250000, 'Shannon', fontsize=tfs)
plt.xlabel('line in Table 12', fontsize=lfs)
plt.ylabel('rate (Hz)', fontsize=lfs)
plt.show()
Мне кажется разумным.
Не забывайте, что вы рассчитываете максимально возможную ТЕОРЕТИЧЕСКУЮ производительность для этого канала, предполагая, что он фактически ограничен тепловым шумом, на УКВ и выше это обычно не так.
Внешний интерфейс радиостанции на дешевом чипсете в УВЧ не будет иметь особенно современной производительности, а получение реальной производительности модуляции и кодирования, близкой к теоретическому пределу, является большой проблемой и вряд ли будет возможно с использованием такой простой схемы кодирования. .
По сути, они обменяли информационную полосу пропускания на простоту, низкую мощность и некоторое подавление помех, что неплохо для предполагаемого использования (некоторая форма COFDM будет иметь лучшую эффективность кодирования канала, но требует, например, линейных усилителей в передатчике, что гораздо сложнее сделать ).
ооо