저역 통과 필터를 대역 통과 필터로 변환하는 방법
-
03-07-2019 - |
문제
다음 전송 기능에 의해 설명 된 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]
원래 신호에서. 이것은 두 번째 저역 통과 필터에 원하는 입력입니다.