Programación en Matlab
clc
N_ofdm = 2048Los puntos OFDM son 2048.
f _ delta = 15 E3; el espacio entre subportadoras es 15k, que en realidad no se utiliza en el código.
n _ bloque = 1000; cantidad analógica máxima
n _ subportadora = 1320; porcentaje del número de subportadoras disponibles
n _ CP = 144; longitud
symbol_number = 14; Porcentaje de símbolos OFDM por transmisión
conv _poly=; polinomio generador de código convolucional
k = 5 longitud de restricción de código convolucional
p>trel=poly2trellis(K, conv_poly); genera un diagrama de cuadrícula de código convolucional
cola = 0(1,K-1); agrega bits de cola para poner a cero el codificador de código convolucional
mod_grado = 4; modulación 16QAM
code_rate = 0,5 velocidad de código
tb_len = 50 longitud de rastreo del decodificador Viterbi
bit_longitud = mod_grado * código _ tasa * N _ subportadora * Símbolo _ número-K 1; de acuerdo con la configuración de parámetros anterior, puede obtener un bloque de datos que se puede transportar El número total de bits de información.
SNR _ db = 0:1:10 Establece el rango de relación señal-ruido analógico.
Relación señal-ruido=10. ^(snr_db/10); convierte la relación señal-ruido a un valor natural.
ber = cero (1, longitud (SNR)); espacio de almacenamiento de tasa de error de inicialización
bler = cero (1, longitud (SNR)); p>
bler = zero (1, longitud (SNR)); espacio de almacenamiento de tasa de error de inicialización
p>
h1=modem.qammod('m', 2^mod_grado, 'inputtype ', 'bit', 'symoblord', 'gray'); Genera un objeto de modulación QAM, el tipo de entrada es entrada de bits y el orden de los símbolos es mapa de grises.
h2=modem.qamdemod(h1,'OutputType','bit','DecisionType','approximatellr',...NoiseVariance',1); Genera el objeto de demodulación QAM y selecciona el formulario de demodulación de decisión suave. . Porque la posición de variación de ruido en este momento se establece temporalmente en 1.
Para loop_snr=1: longitud (snr)
err = 0;
err _ blk = 0
sigma = sqrt; (1/SNR(loop_SNR)/2);
Para loop_block=1: N_block, el código omitido aquí es el proceso de procesamiento de cada marco de datos, que se describirá en detalle a continuación.
Fin
ber(loop _ SNR)= err/(bit _ length * loop _ block
bler(loop _ SNR)= err _); blk/loop_block;
Fin
for loop block=1:N block
source=randsrc(1, bit_length, [0, 1]) ;Generado fuente
code=convenc([source,tail],trel);Codificación convolucional, estado puesto a cero
symbol=modulate(h1,code');Secuencia de código Modular usando el objeto de modulación h1 .
Símbolo = símbolo/3.1622; normalización de la energía del símbolo de la subportadora
transmitir _ datos = cero (1, Símbolo _ número * (N _ CP N _ OFDM)); inicialización de muestra
for bucle _ símbolo = 1: símbolo _ período de símbolo OFDM, cada período genera todas las muestras en el dominio del tiempo de un símbolo OFDM.
freq_domain=zeros(1,N_OFDM); Inicialización de datos en el dominio de frecuencia
freq_domain((N_OFDM-N_subcarrier)/2 1: (N_OFDM -Nsubcarrier)/2 N_subcarrier)= símbolo ((bucle _ símbolo-1) * N _ subportadora 1: bucle _ símbolo * N _ subportadora, mapeado en la subportadora N_subportadora intermedia);
time _ domain = IFFT(freq _ domain)* sqrt(N _ OFDM); IFFT implementa la modulación OFDM y presta atención a la normalización de energía.
transmitir_datos((bucle_símbolo-1)*(N_CPN_OFDM)1:bucle_símbolo*(N_CPN_OFDM))=[tiempo_dominio(N_ OFDM-N_CP 1:N_OFDM), dominio_tiempo]; agregar CP
Fin
datos_recibidos = transmitir_datos (randn(1, longitud(transmitir-datos)) j * randn (1, longitud (transmitir _ datos))) * sigma; agregar ruido para obtener una señal aceptable.
símbolo de bucle for=1: número de símbolo
de _ CP = datos _ recibidos((bucle _ símbolo-1)*(N _ CP N _ OFDM) N _ CP 1 :loop _ símbolo *(N _ CP N _ OFDM)); eliminar CP
FFT _ data = FFT(de _ CP)/sqrt(N _ OFDM, normalización de energía
); p>de mapp _ data((loop _ símbolo-1)* N _ subportadora 1:loop _ símbolo * N _ subportadora)= FFT _ data((N _ OFDM-N _ subportadora)/2 1: ( N _ OFDM-N _ subportadora)/2 N _ subportadora Demapping
Fin
h2. variación de ruido = sigma * sigma * 3.1622 * 3.1622 Restablezca los parámetros de variación de ruido del objeto de demodulación.
data _ demodulation = demodulation (h2, de mapp _ data * 3.1622); demodulación suave, tenga en cuenta que antes de la demodulación, la señal debe volver a convertirse a la constelación original de acuerdo con los requisitos de la demodulación. objeto.
temp 1 = size(data_demudulated);
data_demudulated=reshape(data_demudulated, 1, templ(1)* templ(2)); vectores.
decisión = vit dex(data_demod, trel, tb_len, 'term', 'un quant'); decodificación de Viterbi con cuantificación de descuantificación
decisión = decisión( 1: Longitud (fuente) ); bits truncados
err=err sum(decision~=source número de errores estadísticos
If(sum(decision~=source)~=0 ) cuenta el número de bloques de errores.
err _ blk err _ blk 1;
Fin
if (err _ blk gt; = 10) El bloque de error 10 se detiene bajo esta señal a- Simulación de la relación de ruido.
Pausa;
Fin
Fin
semilogía(SNR_dB, ber, '-^')
Cuadrícula en
xlabel(' SNR(dB)');
ylable(' BER ');