Правильно ли я использую здесь теорему Шеннона-Хартли и тепловой шум?

Я пытаюсь узнать о шуме, чувствительности и теореме Шеннона-Хартли , и я использую некоторые спецификации для ИС узла LoRa, чтобы опробовать ее.

Теорема Шеннона-Хартли говорит, что максимальная скорость передачи данных С дан кем-то

С "=" Б Вт   л о г 2 ( 1 + С Н ) .

Где С и Н - мощность сигнала и шума в пределах полностью используемой полосы пропускания Б Вт . 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()

Ответы (1)

Мне кажется разумным.

Не забывайте, что вы рассчитываете максимально возможную ТЕОРЕТИЧЕСКУЮ производительность для этого канала, предполагая, что он фактически ограничен тепловым шумом, на УКВ и выше это обычно не так.

Внешний интерфейс радиостанции на дешевом чипсете в УВЧ не будет иметь особенно современной производительности, а получение реальной производительности модуляции и кодирования, близкой к теоретическому пределу, является большой проблемой и вряд ли будет возможно с использованием такой простой схемы кодирования. .

По сути, они обменяли информационную полосу пропускания на простоту, низкую мощность и некоторое подавление помех, что неплохо для предполагаемого использования (некоторая форма COFDM будет иметь лучшую эффективность кодирования канала, но требует, например, линейных усилителей в передатчике, что гораздо сложнее сделать ).

Хорошо, это имеет смысл. Хороший краткий ответ, который касается как вопроса, так и основных проблем. Спасибо!