Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Abeto gaussiano pulso-modelado de filtro de diseño

Este ejemplo muestra cómo diseñar un filtro FIR de modelado de pulso gaussiano y los parámetros que influyen en este diseño. El diseño del filtro de modelado de pulso gaussiano FIR se realiza truncando una versión muestreada de la respuesta de impulso de tiempo continuo del filtro gaussiano que se da por:

<math display="block">
<mrow>
<mi>h</mi>
<mo stretchy="false">(</mo>
<mi>t</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mfrac>
<mrow>
<msqrt>
<mrow>
<mi>π</mi>
</mrow>
</msqrt>
</mrow>
<mrow>
<mi>a</mi>
</mrow>
</mfrac>
<msup>
<mrow>
<mi>e</mi>
</mrow>
<mrow>
<mo>-</mo>
<mfrac>
<mrow>
<msup>
<mrow>
<mi>π</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msup>
<msup>
<mrow>
<mi>t</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msup>
</mrow>
<mrow>
<msup>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msup>
</mrow>
</mfrac>
</mrow>
</msup>
</mrow>
</math>

El parámetro ' a ' está relacionado con el producto de tiempo de ancho de banda de 3 dB (B * TS) del filtro gaussiano dado por:

<math display="block">
<mrow>
<mi>a</mi>
<mo>=</mo>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mi>B</mi>
<msub>
<mrow>
<mi>T</mi>
</mrow>
<mrow>
<mi>s</mi>
</mrow>
</msub>
</mrow>
</mfrac>
<msqrt>
<mrow>
<mfrac>
<mrow>
<mi mathvariant="normal">log</mi>
<mn>2</mn>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</mfrac>
</mrow>
</msqrt>
</mrow>
</math>

Hay dos errores de aproximación en este diseño: un error de truncamiento y un error de muestreo. El error de truncamiento se debe a una aproximación de tiempo finito (FIR) de la respuesta de impulso teóricamente infinita del filtro gaussiano ideal. El error de muestreo (aliasing) se debe al hecho de que una respuesta de frecuencia gaussiana no es realmente limitada por banda en un sentido estricto (es decir, la energía de la señal gaussiana más allá de una cierta frecuencia no es exactamente cero). Esto se puede notar a partir de la función de transferencia del filtro gaussiano de tiempo continuo, que se da como abajo:

<math display="block">
<mrow>
<mi>H</mi>
<mo stretchy="false">(</mo>
<mi>f</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<msup>
<mrow>
<mi>e</mi>
</mrow>
<mrow>
<mo>-</mo>
<msup>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msup>
<msup>
<mrow>
<mi>f</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msup>
</mrow>
</msup>
</mrow>
</math>

A medida que f aumenta, la respuesta de frecuencia tiende a cero, pero nunca es exactamente cero, lo que significa que no se puede muestrear sin que se produzca un aliasing.

Filtro gaussiano de tiempo continuo

Para diseñar un filtro gaussiano de tiempo continuo, definimos el tiempo del símbolo (TS) como 1 microsegundo y el número de símbolos entre el inicio de la respuesta de impulso y su final (span del filtro) para ser 6. A partir de las ecuaciones anteriores, podemos ver que la respuesta de impulso y la respuesta de frecuencia del filtro gaussiano dependen del parámetro ' a ' que está relacionado con el producto de tiempo del símbolo de ancho de banda de 3 dB. Para estudiar el efecto de este parámetro en el diseño del filtro FIR gaussiano, definiremos varios valores de ' a ' en términos de TS y calcularemos los anchos de banda correspondientes. A continuación, trazaremos la respuesta de impulso para cada respuesta "a" y la magnitud de cada ancho de banda.

Ts   = 1e-6; % Symbol time (sec) span = 6;    % Filter span in symbols  a = Ts*[.5, .75, 1, 2]; B = sqrt(log(2)/2)./(a);  t = linspace(-span*Ts/2,span*Ts/2,1000)'; hg = zeros(length(t),length(a)); for k = 1:length(a)   hg(:,k) = sqrt(pi)/a(k)*exp(-(pi*t/a(k)).^2); end  plot(t/Ts,hg) title({'Impulse response of a continuous-time Gaussian filter';...   'for various bandwidths'}); xlabel('Normalized time (t/Ts)') ylabel('Amplitude') legend(sprintf('a = %g*Ts',a(1)/Ts),sprintf('a = %g*Ts',a(2)/Ts),...   sprintf('a = %g*Ts',a(3)/Ts),sprintf('a = %g*Ts',a(4)/Ts)) grid on;

Tenga en cuenta que las respuestas de impulso se normalizan a la hora del símbolo.

Respuesta de frecuencia para el filtro gaussiano de tiempo continuo

Calcularemos y trazaremos la respuesta de frecuencia para los filtros Gaussianos de tiempo continuo con diferentes anchos de banda. En el gráfico siguiente, el límite de 3 dB se indica mediante los círculos rojos (' o ') en la curva de respuesta de magnitud. Tenga en cuenta que el ancho de banda de 3 dB está entre DC y B.

f = linspace(0,32e6,10000)'; Hideal = zeros(length(f),length(a)); for k = 1:length(a)   Hideal(:,k) = exp(-a(k)^2*f.^2); end  plot(f,20*log10(Hideal)) titleStr = {'Ideal magnitude response for a continuous-time ';...   'Gaussian filter for various bandwidths'}; title(titleStr); legend(sprintf('B = %g',B(1)),sprintf('B = %g',B(2)),...   sprintf('B = %g',B(3)),sprintf('B = %g',B(4))) hold on for k = 1:length(a)   plot(B,20*log10(exp(-a.^2.*B.^2)),'ro','HandleVisibility','off') end  axis([0 5*max(B) -50 5]) xlabel('Frequency (Hz)') ylabel('Magnitude (dB)') grid on;

La aproximación FIR del filtro gaussiano

Diseñaremos el filtro FIR gaussiano usando la función.gaussdesign Las entradas a esta función son el producto de tiempo de símbolo de ancho de banda de 3 dB, el número de periodos de símbolo entre el inicio y el final de la respuesta de impulso del filtro, es decir, el intervalo de filtro en los símbolos y el factor de sobremuestreo (es decir, el número de muestras por símbolo).

El factor de sobremuestreo (OVSF) determina la frecuencia de muestreo y la longitud del filtro y por lo tanto, desempeña un papel importante en el diseño de filtro FIR gaussiano. Los errores de aproximación en el diseño se pueden reducir con una elección adecuada del factor de sobremuestreo. Ilustramos esto comparando los filtros FIR gaussiano diseñados con dos factores de sobremuestreo diferentes.

En primer lugar, consideraremos un factor de sobremuestreo de 16 para diseñar el filtro gaussiano discreto.

ovsf = 16; % Oversampling factor (samples/symbol) h = zeros(97,4); iz = zeros(97,4); for k = 1:length(a)   BT = B(k)*Ts;   h(:,k) = gaussdesign(BT,span,ovsf);   [iz(:,k),t] = impz(h(:,k)); end figure('Color','white') t = (t-t(end)/2)/Ts; stem(t,iz) title({'Impulse response of the Gaussian FIR filter for ';...   'various bandwidths, OVSF=16'}); xlabel('Normalized time (t/Ts)') ylabel('Amplitude') legend(sprintf('a = %g*Ts',a(1)/Ts),sprintf('a = %g*Ts',a(2)/Ts),...   sprintf('a = %g*Ts',a(3)/Ts),sprintf('a = %g*Ts',a(4)/Ts)) grid on;

Respuesta de frecuencia para el filtro gaussiano FIR (factor de sobremuestreo = 16)

Calcularemos la respuesta de frecuencia para el filtro FIR Gaussiano con un factor de sobremuestreo de 16 y lo compararemos con la respuesta de frecuencia ideal (es decir, la respuesta de frecuencia de un filtro gaussiano de tiempo continuo).

Fs = ovsf/Ts; hfvt = fvtool(h(:,1),1,h(:,2),1,h(:,3),1,h(:,4),1,...   'FrequencyRange', 'Specify freq. vector', ...   'FrequencyVector',f,'Fs',Fs,'Color','white'); titleStr = {['Ideal mag. responses (dashed lines) and corresponding ', ...   'FIR approximations (solid lines)'] ;' for various values of B, OVSF=16'}; title(titleStr) legend(hfvt, sprintf('B = %g',B(1)),sprintf('B = %g',B(2)),...   sprintf('B = %g',B(3)),sprintf('B = %g',B(4)), ...   'Location','Best') hold on; plot(f*Ts,20*log10(Hideal),'--') axis([0 32 -350 5])

Observe que los primeros dos filtros FIR exhiben errores de aliasing y los dos últimos filtros FIR exhiben errores de truncamiento. El aliasing se produce cuando la frecuencia de muestreo no es mayor que la frecuencia Nyquist. En el caso de los dos primeros filtros, el ancho de banda es lo suficientemente grande como para que el factor de sobremuestreo no separe las réplicas espectrales lo suficiente como para evitar el aliasing. Sin embargo, la cantidad de aliasing no es muy significativa.

Por otro lado, los dos últimos filtros FIR muestran la limitación de aproximación FIR antes de cualquier aliasing puede ocurrir. Las respuestas de magnitud de estos dos filtros alcanzan un suelo antes de que puedan superponerse con las réplicas espectrales.

Importancia del factor de sobremuestreo

Los errores de aliasing y truncamiento varían según el factor de sobremuestreo. Si se reduce el factor de sobremuestreo, estos errores serán más severos, ya que esto reduce la frecuencia de muestreo (moviendo así las réplicas más cerca) y también reduce las longitudes del filtro (aumentando el error en la aproximación de FIR).

Por ejemplo, si seleccionamos un factor de sobremuestreo de 4, veremos que todos los filtros FIR exhiben errores de aliasing ya que la frecuencia de muestreo no es lo suficientemente grande para evitar la superposición de las réplicas espectrales.

ovsf = 4; % Oversampling factor (samples/symbol) h = zeros(25,4); iz = zeros(25,4); for k = 1:length(a)   BT = B(k)*Ts;   h(:,k) = gaussdesign(BT,span,ovsf);   [iz(:,k),t] = impz(h(:,k)); end figure('Color','white') t = (t-t(end)/2)/Ts; stem(t,iz) title({'Impulse response of the Gaussian FIR filter'; 'for various bandwidths, OVSF=4'}); xlabel('Normalized time (t/Ts)') ylabel('Amplitude') legend(sprintf('a = %g*Ts',a(1)/Ts),sprintf('a = %g*Ts',a(2)/Ts),...   sprintf('a = %g*Ts',a(3)/Ts),sprintf('a = %g*Ts',a(4)/Ts)) grid on;

Respuesta de frecuencia para el filtro gaussiano FIR (factor de sobremuestreo = 4)

Vamos a trazar y estudiar la respuesta de frecuencia para el filtro FIR gaussiano diseñado con factor de sobremuestreo de 4. Un factor de sobremuestreo más pequeño significa una frecuencia de muestreo más pequeña. Como resultado, esta frecuencia de muestreo no es suficiente para evitar la superposición espectral y todos los filtros de aproximación FIR exhiben aliasing.

Fs = ovsf/Ts; hfvt = fvtool(h(:,1),1,h(:,2),1,h(:,3),1,h(:,4),1,...   'FrequencyRange', 'Specify freq. vector', ...   'FrequencyVector',f,'Fs',Fs,'Color','white'); titleStr = {['Ideal mag. responses (dashed lines) and corresponding ',...   'FIR approximations (solid lines)'] ;' for various values of B, OVSF=4'}; title(titleStr) legend(hfvt, sprintf('B = %g',B(1)),sprintf('B = %g',B(2)),...   sprintf('B = %g',B(3)),sprintf('B = %g',B(4)), ...   'Location','Best') hold on; plot(f*Ts,20*log10(Hideal),'--') axis([0 32 -350 5])