Pregunta

Tengo un filtro de paso bajo descrito por la siguiente función de transferencia:

h [n] = (w_c / Pi) * sinc (n * w_c / Pi), donde w_c es la frecuencia de corte

Tengo que convertir este filtro de paso bajo en un filtro de paso de banda.

¿Fue útil?

Solución

Usted h [n] se transforma en un rect en el dominio de la frecuencia. Para hacer que pase la banda, necesita mover su frecuencia central más alta.

Para hacer esto, multiplique h [n] por exp (j * w_offset * n) , donde w_offset es la cantidad a cambiar . Si w_offset es positivo, entonces cambia a frecuencias más altas.

La multiplicación en el dominio del tiempo es una convolución en el dominio de la frecuencia. Como exp (j * w_offset * n) se convierte en una función de impulso centrada en w_offset , la multiplicación desplaza H (w) por w_offset .

Consulte Transformada de Fourier en tiempo discreto para obtener más detalles.

Nota : dicho filtro no será simétrico con respecto a 0, lo que significa que tendrá valores complejos. Para hacerlo simétrico, debe agregar h [n] multiplicado por exp (-j * w_offset * n) :

h_bandpass [n] = h [n] (exp (j * w_offset * n) + exp (-j * w_offset * n))

Desde cos (w * n) = (exp (j * w * n) + exp (-j * w * n)) / 2 obtenemos:

h_bandpass [n] = h [n] cos (w_offset * n)

Este filtro tiene valores puramente reales.

Otros consejos

La respuesta corta es que se multiplicará por un exponencial complejo en el dominio del tiempo. La multiplicación en el dominio del tiempo cambiará la señal en el dominio de la frecuencia.

Código Matlab:

n_taps = 100;
n = 1:n_taps;
h = ( w_c / Pi ) * sinc( ( n - n_taps / 2) * w_c / Pi ) .* ...
    exp( i * w_offset * ( n - n_taps / 2) );

p.s. Resulta que acabo de implementar esta funcionalidad exacta para la escuela hace un par de semanas.

Aquí está el código para crear su propio filtro de paso de banda usando el método de ventanas:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Function: Create bandpass filter using windowing method
% Purpose:  Simple method for creating filter taps ( useful when more elaborate
%           filter design libraries are not available )
%
% @author   Trevor B. Smith, 24MAR2009
%
% @param    n_taps    How many taps are in your output filter
% @param    omega_p1  The lower cutoff frequency for your passband filter
% @param    omega_p2  The upper cutoff frequency for your passband filter
% @return   h_bpf_hammingWindow     The filter coefficients for your passband filter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function h_bpf_hammingWindow = BPF_hammingWindow(n_taps,omega_p1,omega_p2)
    % Error checking
    if( ( omega_p2 == omega_p1 ) || ( omega_p2 < omega_p1 ) || ( n_taps < 10 ) )
        str = 'ERROR - h_bpf_hammingWindow():   Incorrect input parameters'
        h_bpf_hammingWindow = -1;
        return;
    end

    % Compute constants from function parameters
    length = n_taps - 1; % How many units of T ( i.e. how many units of T, sampling period, in the continuous time. )
    passbandLength = omega_p2 - omega_p1;
    passbandCenter = ( omega_p2 + omega_p1 ) / 2;
    omega_c = passbandLength / 2; % LPF omega_c is half the size of the BPF passband
    isHalfSample = 0;
    if( mod(length,2) == 1 )
        isHalfSample = 1/2;
    end

    % Compute hamming window
    window_hamming = hamming(n_taps);

    % Compute time domain samples
    n = transpose(-ceil(length/2):floor(length/2));
    h1 = sinc( (1/pi) * omega_c * ( n + isHalfSample ) ) * pi .* exp( i * passbandCenter * ( n + isHalfSample ) );

    % Window the time domain samples
    h2 = h1 .* window_hamming;
    if 1
        figure; stem(h2); figure; freqz(h2);
    end

    % Return filter coefficients
    h_bpf_hammingWindow = h2;
end % function BPF_hammingWindow()

Ejemplo sobre cómo usar esta función:

h_bpf_hammingWindow = BPF_hammingWindow( 36, pi/4, 3*pi/4 );
freqz(h_bpf_hammingWindow); % View the frequency domain

Sea f [n] la señal que recibe del filtro de paso bajo con w_c en el límite inferior de la banda deseada. Puede obtener las frecuencias por encima de este límite inferior al restar f [n] de la señal original. Esta es la entrada que desea para el segundo filtro de paso bajo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top