Pergunta

I têm uma um filtro passa baixo descrito pela seguinte função de transferência:

h [n] = (w_c / Pi) * sinc (n * w_c / Pi), onde é w_c é a frequência de corte

Eu tenho que converter esse filtro low-pass a um filtro passa-banda.

Foi útil?

Solução

Você h[n] transforma em um rect no domínio da freqüência. Para torná-lo banda de passagem que você precisa mover sua freqüência central superior.

Para fazer isso, h[n] multiplicar por exp(j*w_offset*n), onde w_offset é a quantidade de mudança. Se w_offset é positivo, então você mudar para freqüências mais altas.

A multiplicação no domínio do tempo é a convolução no domínio da freqüência. Desde exp(j*w_offset*n) voltas em função impulso centrado em w_offset, as mudanças de multiplicação do H(w) por w_offset.

Transformada de Fourier de tempo discreto para mais detalhes.

Nota : tal filtro não será simétrica cerca de 0, o que significa que terão valores complexos. Para tornar mais simétrica, você precisa adicionar 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 obtemos:

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

Este filtro, em seguida, tem valores puramente reais.

Outras dicas

A resposta curta é que você vai multiplicar por um exponencial complexo no domínio do tempo. A multiplicação no domínio do tempo irá mudar o sinal no domínio da frequência.

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. Aconteceu de eu ter apenas implementado esta funcionalidade exata para a escola um par de semanas atrás.

Aqui está o código para criar o seu próprio filtro de passagem de banda, utilizando o método de janelas:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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()

Exemplo de como usar essa função:

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

Let f[n] ser o sinal que recebe do filtro passa-baixa com w_c no limite inferior da banda desejada. Você pode obter as frequências acima deste limite inferior subtraindo f[n] do sinal original. Esta é a entrada que você deseja para o segundo filtro passa-baixa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top