كيفية تحويل مرشح تمرير منخفض لتصفية الفرقة تمرير
-
03-07-2019 - |
سؤال
ولدي مرشح تمرير منخفض وصفها وظيفة نقل التالية:
ح [ن] = (w_c / بي) * سينك (ن * w_c / بي)، حيث هو w_c هو التردد قطع
ولقد لتحويل هذا مرشح تمرير منخفض لتصفية الفرقة تمرير.
المحلول
وأنت h[n]
التحويلات إلى 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)
وهذا الفلتر ثم ديه القيم الحقيقية بحتة.
نصائح أخرى
والجواب القصير هو أنك سوف تتضاعف قبل الأسي المعقدة في المجال الزمني. والضرب في نطاق الوقت تحول إشارة في مجال التردد.
ورمز ماتلاب:
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. حدث لي للتو تنفيذ هذه الوظيفة بالضبط عن المدرسة قبل أسبوعين.
وهنا هو رمز لخلق الخاصة مرشح تمرير الفرقة الخاصة بك باستخدام أسلوب النوافذ:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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]
من الإشارة الأصلية. هذا هو المدخل الذي تريده لثاني مرشح تمرير منخفض.