문제

다음 전송 기능에 의해 설명 된 AA 로우 패스 필터가 있습니다.

h [n] = (w_c / pi) * sinc (n * w_c / pi), 여기서 w_c는 컷오프 주파수입니다.

이 저역 통과 필터를 대역 통과 필터로 변환해야합니다.

도움이 되었습니까?

해결책

h[n] a로 변모합니다 rect 주파수 도메인에서. 밴드 패스를 만들려면 중앙 주파수를 더 높이 이동해야합니다.

이렇게하려면 곱하십시오 h[n] ~에 의해 exp(j*w_offset*n), 어디 w_offset 이동 금액입니다. 만약에 w_offset 긍정적이면 더 높은 주파수로 이동합니다.

시간 도메인의 곱셈은 주파수 도메인의 컨볼 루션입니다. 부터 exp(j*w_offset*n) 중심의 임펄스 기능으로 바뀝니다 w_offset, 곱셈은 H(w) ~에 의해 w_offset.

보다 불연속 시간 푸리에 변환 자세한 사항은.

메모: 이러한 필터는 0 정도의 대칭이되지 않으므로 복잡한 값이 있습니다. 대칭으로 만들려면 추가해야합니다 h[n] 곱한 exp(-j*w_offset*n):

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

부터 cos(w*n) = (exp(j*w*n)+exp(-j*w*n))/2 우리는 얻는다 :

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

이 필터에는 순전히 실제 값이 있습니다.

다른 팁

짧은 대답은 시간 영역에서 복잡한 지수를 곱할 것입니다. 시간 영역의 곱셈은 주파수 영역에서 신호를 이동시킵니다.

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) );

추신 : 몇 주 전에 학교 에서이 정확한 기능을 구현했습니다.

다음은 Windowing 메소드를 사용하여 자신만의 밴드 패스 필터를 만드는 코드입니다.

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

이 기능 사용 방법에 대한 예 :

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

허락하다 f[n] 저역 통과 필터에서 얻은 신호가 되십시오. w_c 원하는 밴드의 하한에서. 빼기를 통해이 하한 이상의 주파수를 얻을 수 있습니다. f[n] 원래 신호에서. 이것은 두 번째 저역 통과 필터에 원하는 입력입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top