1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu FIR Filters - Bessel Filters ppt

8 273 0
Tài liệu được quét OCR, nội dung có thể không chính xác
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Bessel Filters
Định dạng
Số trang 8
Dung lượng 179,46 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bessel Filters Bessel filters are designed to have maximally flat group-delay characteristics.. These values were generated by the C function besselCoefficients provided in Listing 6.1.

Trang 1

Bessel Filters

Bessel filters are designed to have maximally flat group-delay characteristics

As a consequence, there is no ringing in the impulse and step responses 6.1 Transfer Function

The general expression for the transfer function of an nth-order Bessel

lowpass filter is given by

bo

where q,(s) = >, 6,s*

h=il

(2n — k)!

by ~ 92-* Bln — k)!

The following recursion can be used to determine g„(s) from g„_ ;(s) and

Qn —2(8):

Qn = (2n — 1)q„_¡ + 8”q„_›

Table 6.1 lists g„(s) for n = 2 through ø =8 These values were generated by

the C function besselCoefficients( ) provided in Listing 6.1 This function is used by other Bessel filter routines presented later in lân section

Unlike the transfer function for Butterworth and Chebyshev filters, Eq (6.1) does not provide an explicit expression for the poles of the Bessel filter The numerator of (6.1) will be a polynomial in s, upon which numerical

root-finding methods (such as Algorithm 2.1) must be used to determine the

pole locations for H(s) Table 6.2 lists approximate pole locations for n =2

through n = 8

109

Trang 2

TABLE 6.1 Denominator Polynomials for Transfer Functions of Bessel Filters Normalized to Have Unit Delay at w =0

2 s?4+3s+3

3 8346s? + 15s +15

4 s*+ 10s? + 45s? + 105s + 105

5 8P + 15st + 105s° + 420s? + 945s + 945

6 s® + 218° + 210s* + 1260s? + 4725s? + 10,395s + 10,895

vi s7 + 285° + 37885 + 3150s? + 17,3253 3 + 62,3708? + 135,135s + 135,135

8 s® + 36s7 + 630s° + 6930s° + 9450s4 + 270,270s? + 945,945s? + 2,027,025s + 2,027,025

TABLE 6.2 Poles of Bessel Filter Normalized

to Have Unit Delay at w =0

— 1.8390 + 1.7543;

— 2.8961 + 0.8672]

— 2.3247 + 3.5710)

—3.3520 + 1.7427)

6 —2.5158 + 4.4927)

—3.7357 + 2.6263)

— 4.2484 + 0.8675;

— 2.6857 + 5.4206;

—4.0701 + 3.5173)

— 4.7584 + 1.7393)

— 4.3683 + 4.41467

— 2.8388 + 6.3540)

—5.5878 + 0.86767

The transfer functions given by (6.1) are for Bessel filters normalized to have unit delay at w =0 The poles p, and denominator coefficients b, can be renormalized for a 3-dB frequency of w =1 using

Pi =Ap, 0, =A" * By

where the value of A appropriate for n is selected from Table 6.3 (The

values from the table have been incorporated in the besselCoefficient( ) function.)

Trang 3

TABLE 6.3 Factors for Renormalizing Bessel

Filter Poles from Unit Delay at w =0 to

3-dB Attenuation at w =1

1.35994 1.74993 2.13011 2.42003 2.69996 2.95000 3.17002

6.2 Frequency Response

Figures 6.1 and 6.2 show the magnitude responses for Bessel filters of several

different orders The frequency response data was generated by the C routine besselFreqResponse( ), which is provided in Listing 6.2

6.3 Group Delay

Group delays for lowpass Bessel filters of several different orders are plotted

in Fig 6.3 The data for these plots was generated by the C function

besselGroupDelay( ), provided in Listing 6.3, which performs numerical

differentiation of the phase response to evaluate the group delay

' XN °

' œ T

frequency

Figure 61 Pass-band magnitude response of lowpass Bessel filters.

Trang 4

-10 a

m

3

o

9

=

5

frequency

Figure 6.2 Stop-band magnitude response of lowpass Bessel filters

3.5 Ƒ

8

o

2

6

5

frequency

Figure 6.3 Group-delay response of lowpass Bessel filters

10

Trang 5

Listing 6.1 besselCoefficienis( )

BA ORIG AAI IIR SIA AA IT #

#include <nath,h?

#include "globDefs,h”

void besselCoefficients( int order,

char type@fNormalization,

real coef{}) {

int t, N, index, indextl, indext2;

nedl B[3][HRXIRDER];

real A, renorm[MAXORDER} ;

renorm[2] = @.?2675;

renorm[ 3] ~ @,57145;

renorm[4] = 6.46946;

renorm[5} = 6.41322;

nenerm[6] = 8.37838;

renorm[?] = 9.33898;

nenonm[B] = @.31546;

A = renormlorder];

index = 1;

indexfl = 8;

indexl2 = 2;

for( i=8; ¡{(3*HRR0BDER); ¡++) B[B][¡) = 8;

B[B8][83 = !.8;

BE11[8] = 1.8;

BETI[H = 1.8;

for( N=2; N<=order; N++)

{

index = Cindextl)83;

index] = Cindexfll + 1723;

indexf2 = (indexH2 + 1)83;

for( =8; LÊN; tt)

{

B[index][i] = (2*R-1) * B[indexH11[i1;

}

for€ i=2; i<=N; itt)

Trang 6

{

B{index][i] = B[index][i] + B[indexH2][¡-21;

}

}

if(typedfNormalization == 'R')

{

for( i+; i<sorder; i++) coeffi] = Blindex] [i]; }

else

{

for( i=@; i<=order; i++)

{

coeffi] = Blindex]{i] * powff, Carder - i) ); }

}

return;

}

Listing 6.2 besselFreqResponse( )

ff RREREREEREAERE EAA EAAE RENAE RAR ERE /

JXYKKKXKXK ĐK KX KX KEO KEO KẾ EÐ 2

#include <cRath.h>

*include “gtobDefs.h"

#include “protos,h”

void besselFreqRespanse{ int order,

real coef[],

real frequency, real *magnitude, real *phase}

{

struct conplex numen, omeqg, denon, tronsfenFurrct ion; int i;

numer = cnplx{ coef[B], 8.8);

oRegd = cnplx{ 8.8, fnequencu);

denom = capix( coeflorder], 6.8);

for( itorder-f; i>=8; i )

{

Trang 7

denom = cltult (omega, denom);

denon.Re = denow.Re + coef[i],

}

transferFunction = cDiv( numer, denam);

*gagnitude = 26.8 * logi@(cAbs(transferFunction));

*phase = 186.8 * arg(transferFunction) / PI;

return;

}

Listing 6.3 besselGroupDelay( )

LRA IR TTR IT TR TRA IE AACE IR RIP

/* besselBnoupe lau() xf

/XYXXXXXXXXXXXTXXXXSXSXXXSXXXXXX*dS#+/

uoid besse lñnoupDe | quí int order,

real coef[], real frequency,

real delta,

real *groupDe lay)

{

struct complex numer, omega, omegaPlus, denom, transferFunct ion;

int i;

real phase, phased;

numer = cmplx( coef[@], 8.0);

denog = cmplxÍ coef[oarder], 6.8);

omeqg = cnplx( 0., fnequencu);,

for{ jxorder-1; i>*“8; i ) {

denom = cliult (omega, denom) ;

denon.fe = denoa,fe + coef[i];

}

transferFunction = cDiu( numer, denam);

phase = arg(transferFunct ion);

denom = caplx( coefforder], 8,8);

omegaPlus = cmplx(@.0, frequency + delta);

for( isorder-1; i>=8; i ) {

denom = clult (omegaPlus,denom) ;

Trang 8

denom.He = denom.Re + coef[i];

}

transferFunction = cDiv( numer, denon);

phase2 = arg(transferFunct ion);

*groupDelay = (phase2 - phase)/delta;

return;

}

Ngày đăng: 24/12/2013, 12:16

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm