كيفية تحويل مرشح تمرير منخفض لتصفية الفرقة تمرير

StackOverflow https://stackoverflow.com/questions/820944

  •  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] من الإشارة الأصلية. هذا هو المدخل الذي تريده لثاني مرشح تمرير منخفض.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top