Main Content

Filtros cruzados de altavoces

En este ejemplo se muestra cómo diseñar un modelo simple de un altavoz digital de tres vías. El sistema divide la entrada de audio en bandas de baja, media y alta frecuencia que corresponden respectivamente al woofer, el controlador de rango medio y el tweeter. Los valores típicos de las frecuencias de cruce normalizadas que delimitan las bandas son

<math display="block">
<mrow>
<mn>0</mn>
<mo>.</mo>
<mn>1</mn>
<mn>3</mn>
<mn>6</mn>
<mi>π</mi>
</mrow>
</math>
rad/muestra y
<math display="block">
<mrow>
<mn>0</mn>
<mo>.</mo>
<mn>3</mn>
<mn>1</mn>
<mn>7</mn>
<mi>π</mi>
</mrow>
</math>
rad/muestra.

Cree filtros lowpass, bandpass, y highpass para generar las bandas de baja frecuencia, frecuencia media y alta frecuencia. Especifique las frecuencias.

lo = 0.136; hi = 0.317;

Utilice un diseño Chebyshev Tipo I de 6o orden para cada filtro. Especifique una ondulación de banda de paso de 1 dB, mayor que el valor de los altavoces reales. La función duplica el orden de los diseños de paso de banda.cheby1 Haga que todos los filtros tengan el mismo orden al a la mitad el orden del filtro de paso de banda. Devuelve los ceros, los polos y la ganancia de cada filtro.

ord = 6; rip = 1;  [zw,pw,kw] = cheby1(ord,rip,lo); [zm,pm,km] = cheby1(ord/2,rip,[lo hi]); [zt,pt,kt] = cheby1(ord,rip,hi,'high');

Visualice los ceros y polos de los filtros.

zplane([zw zm zt],[pw pm pt]) lg = legend('Woofer','Midrange','Tweeter'); lg.Box = 'off';

  • Los ceros enWoofer:

    <math display="block">
    <mrow>
    <mi>z</mi>
    <mo>=</mo>
    <mo>-</mo>
    <mn>1</mn>
    </mrow>
    </math>
    suprimir las frecuencias altas. Los polos mejoran la respuesta de magnitud entre
    <math display="block">
    <mrow>
    <mn>0</mn>
    </mrow>
    </math>
    y la menor frecuencia de cruce.

  • Los ceros enMedios:

    <math display="block">
    <mrow>
    <mi>z</mi>
    <mo>=</mo>
    <mn>0</mn>
    </mrow>
    </math>
    Y
    <math display="block">
    <mrow>
    <mi>z</mi>
    <mo>=</mo>
    <mn>1</mn>
    </mrow>
    </math>
    suprimir las frecuencias altas y bajas. Los polos mejoran la respuesta de magnitud entre las frecuencias de cruce más bajas y más altas.

  • Los ceros enTweeter:

    <math display="block">
    <mrow>
    <mi>z</mi>
    <mo>=</mo>
    <mn>1</mn>
    </mrow>
    </math>
    suprimir las frecuencias bajas. Los polos mejoran la respuesta de magnitud entre la mayor frecuencia de cruce y
    <math display="block">
    <mrow>
    <mi>π</mi>
    </mrow>
    </math>
    .

Trazar las respuestas de magnitud en el círculo de la unidad para ver el efecto de los diferentes polos y ceros. Utilice unidades lineales. Representar los filtros como secciones de segundo orden.

sw = zp2sos(zw,pw,kw); sm = zp2sos(zm,pm,km); st = zp2sos(zt,pt,kt);  nf = 1024; [hw,fw] = freqz(sw,nf,'whole'); hm = freqz(sm,nf,'whole'); ht = freqz(st,nf,'whole');  plot3(cos(fw),sin(fw),[abs(hw) abs(hm) abs(ht)]) xlabel('Real') ylabel('Imaginary') view(75,30) grid

Trazar las respuestas de magnitud en dB utilizando .fvtool

hfvt = fvtool(sw,sm,st); legend(hfvt,'Woofer','Mid-range','Tweeter')

Cargue un archivo de audio que contenga un fragmento del "Hallelujah Chorus" de Handel muestreado a 8192 Hz. Divida la señal en tres bandas de frecuencia filtrando. Traza las bandas.

load handel                % To hear, type soundsc(y,Fs)  yw = sosfilt(sw,y);        % To hear, type soundsc(yw,Fs) ym = sosfilt(sm,y);        % To hear, type soundsc(ym,Fs) yt = sosfilt(st,y);        % To hear, type soundsc(yt,Fs)  plot((0:length(y)-1)/Fs,[yw ym yt]) xlabel('Time (s)')

 % To hear all the frequency ranges, type soundsc(yw+ym+yt,Fs)

Referencias

Orfanidis, Sófocles J. .Introduction to Signal Processing Englewood Cliffs, NJ: Prentice Hall, 1996.