La Red de Conocimientos Pedagógicos - Conocimientos de formación/capacitación - Filtro de coseno elevado: depende de la potencia

Filtro de coseno elevado: depende de la potencia

El filtro de coseno elevado incorporado en matlab puede generar coeficientes fácilmente. Por ejemplo, el siguiente es un filtro de coseno elevado con un coeficiente de caída de 0,25, 8 veces sobremuestreo y un intervalo de 19:

coefRRC = rcosdesign(0.25, 19, 8, 'norm');

Las características de amplitud-frecuencia son las siguientes

Tenga en cuenta que la banda de paso no es 0dB, ​​pero tiene su propia ganancia. Aquí es 9,3dB. Esta ganancia puede compensar la pérdida de energía del ancho de banda que se filtra después de que la señal pasa a través del filtro.

El siguiente es el proceso de verificación:

1. Primero, generamos un símbolo de modulación QPSK normalizado, la velocidad del símbolo es 1 Msps, la potencia de cada punto de muestreo en el dominio del tiempo es 0dBfs, y la potencia La densidad espectral es 0dBm.

2. Después de interpolar (insertando 0) 8 veces, el espectro queda como sigue y su densidad espectral de potencia disminuye 8 veces, es decir, 10*log10 (1/8) = -9,03dBm. Se puede entender que la energía total permanece sin cambios, es decir, el área del rectángulo es la misma y el alargamiento de la longitud del momento conducirá inevitablemente a una disminución en el ancho del momento. La potencia promedio de los puntos de muestreo en el dominio del tiempo cae a -9,03 dBfs, pero el número de puntos de muestreo aumenta, es decir, la energía permanece sin cambios.

3. Después de pasar el filtro de coseno elevado, los componentes de frecuencia fuera de la banda de paso se filtran (la longitud del momento disminuye. Si no hay ganancia en la banda de paso (el ancho del momento permanece sin cambios), entonces el El área del rectángulo disminuye. Es decir, a medida que disminuye la energía de la señal, la potencia del punto de muestreo en el dominio del tiempo disminuirá.

Sin embargo, debido a la ganancia de la banda de paso del filtro (el ancho del momento aumenta) y el área efectiva permanece sin cambios, es decir, la energía de la señal permanece sin cambios, la potencia del punto de muestreo en el dominio del tiempo después el filtrado no cambia a -9.03dBfs.

Resumen: De hecho, las áreas del espectro de la señal en la Figura 2, Figura 3 y Figura 4 son todas iguales, es decir, la energía de la señal en todo el proceso permanece sin cambios y la energía perdida por el filtrado tiene ha sido compensada por la ganancia de la banda de paso del filtro. Si la banda de paso del filtro tiene una ganancia de 0 dB, la potencia promedio del punto de muestreo en el dominio del tiempo es -9,03-9,3 = -18,33 dBfs.

¿Por qué la ganancia de la banda de paso es de 9,3 dB? Se especula que debe calcularse a partir de la curva característica de amplitud-frecuencia del filtro.

Dado que insertar 0 en el muestreo ascendente hará que la potencia promedio del punto de muestreo disminuya después del muestreo, podemos usar el punto de muestra distinto de cero más cercano para garantizar que la potencia promedio permanezca sin cambios después del muestreo y la energía total. se vuelve más grande.

El espectro después de la interpolación distinta de cero es el siguiente

Espectro filtrado

Adjunto

cerrar todo

SR = 1e6; velocidad de símbolo

Crear filtro de modelado de pulsos FIR de coseno elevado

rolloff = 0,25

span8x = 19;

coefRRC = rcosdesign(rolloff, span8x, 8, 'norm');

fvtool(coefRRC, 1);

Generar símbolos de datos

Nsymb = 5000 ;

rng(17);

datos = randi([0 3], Nsymb, 1);

modData = exp(1j*pi); /4 1j*data*pi/2); QPSK

Trazar el espectro de símbolos modulados

alcance1 = dsp.SpectrumAnalyzer('SampleRate', SR);

alcance1 (modData);

Interpolación 8 veces con cero

modDataZero8x = upsample(modData, 8);

Trazar espectro de símbolos interpolados con cero

alcance2 = dsp.SpectrumAnalyzer('SampleRate', SR*8);

alcance2(modDataZero8x);

Interpolación 8 veces con símbolo cercano

modDataNonZero8xTemp = repmat(modData, 1, 8);

modDataNonZero8x = reshape(modDataNonZero8xTemp.', [], 1);

Espectro gráfico de símbolos interpolados distintos de cero

alcance3 = dsp.SpectrumAnalyzer('SampleRate', SR*8);

alcance3(modDataNonZero8x

Filtrar el símbolo de inserción cero

dataFilter = conv(modDataZero8x, coefRRC);

tailLen = floor(length(coefRRC)/2);

zeroDataFilterOut = dataFilter(tailLen 1:end-tailLen);

Trazar el espectro de símbolos interpolados distintos de cero

alcance4 = dsp.SpectrumAnalyzer('SampleRate', SR*8);

alcance4(

zeroDataFilterOut);

Filtrar el símbolo de inserción distinto de cero

dataFilter1 = conv(modDataNonZero8x, coefRRC);

tailLen = floor(length(coefRRC)/2

nonZeroDataFilterOut = dataFilter1(tailLen 1: end-tailLen);

Espectro gráfico de símbolos interpolados distintos de cero

alcance5 = dsp.SpectrumAnalyzer(' SampleRate', SR*8);

alcance5(nonZeroDataFilterOut);

Estadística de potencia

power1 = funCountPower(modData);

power2 = funCountPower(modDataZero8x);

power3 = funCountPower(modDataNonZero8x);

power4 = funCountPower(zeroDataFilterOut);

power5 = funCountPower(nonZeroDataFilterOut);