¿Estoy usando el Teorema de Shannon-Hartley y el ruido térmico correctamente aquí?

Estoy tratando de aprender sobre el ruido, la sensibilidad y el teorema de Shannon-Hartley , y estoy usando algunas especificaciones para un IC de nodo LoRa para probarlo.

El teorema de Shannon-Hartley dice que la tasa máxima de datos C es dado por

C = B W   yo o gramo 2 ( 1 + S norte ) .

Dónde S y norte son las potencias de la señal y el ruido dentro del ancho de banda completamente utilizado B W . LoRa ocupa el ancho de banda utilizando un Chirp Spread Spectrum bastante genial sobre el que puede leer más en esta gran respuesta y la pregunta allí también.

El piso fundamental para el ruido en la electrónica analógica de pequeña señal suele ser el ruido térmico, y si entiendo correctamente, eso suele estar dado por

norte   =   k B   T   B W .

Calculé el límite de Shannon-Hartley para la tasa de datos máxima teórica posible para los diversos valores en la Tabla 12 de la hoja de datos, y en comparación con los bits por segundo realmente implementados en esas sensibilidades citadas, me alegró mucho ver que estoy en el estadio correcto y siguiendo la tendencia muy bien.

El límite de Shannon-Hartley es siempre un factor de alrededor de 20 a 30 más rápido que la tasa indicada.

Tengo curiosidad; ¿Podría ser esto un margen de seguridad o una especificación conservadora (rellenaron la sensibilidad para asegurarse de que pudieran cumplirla) o hay un factor que he olvidado?

Pregunta: ¿Estoy usando el Teorema de Shannon-Hartley y el ruido térmico correctamente aquí?

Como beneficio adicional, ¿alguna idea de si los 14 dB son un margen de seguridad o si el ruido de fondo en realidad no es térmico?

nota: A estas tasas, la señal está muy por debajo del ruido que también se indica en la hoja de datos.

Tabla 12 de la Rev. 5 - agosto de 2016 de la hoja de datos SX1276/77/78/79 de SEMTECH . ©2016 Semtech Corporation www.semtech.com

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

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()

Respuestas (1)

Me parece razonable.

No olvide que está calculando el rendimiento TEÓRICO máximo posible para ese canal, suponiendo que de hecho está limitado por el ruido térmico, en VHF y más, ese no suele ser el caso.

La interfaz de radio en un conjunto de chips barato en UHF no tendrá un rendimiento particularmente avanzado, y obtener un rendimiento real de modulación y codificación que se acerque al límite teórico es una gran tarea y no es probable que sea posible utilizando un esquema de codificación tan simple. .

En efecto, han cambiado el ancho de banda de información por simplicidad, baja potencia y cierto rechazo de interferencias, lo que no es un mal cambio para los usos previstos (alguna forma de COFDM tendría una mejor eficiencia de codificación de canales pero necesita amplificadores lineales en el transmisor, por ejemplo, mucho más difícil de hacer). ).

OK, esto tiene mucho sentido. Buena respuesta concisa que aborda tanto la pregunta como los problemas subyacentes. ¡Gracias!