Red de conocimiento informático - Aprendizaje de programación - Programación en Matlab

Programación en Matlab

Borrar todo;

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 ');