Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 6, 2012 12:59:30

eiyawii
От:
Зарегистрирован: 2011-08-04
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

вычисление коэффициентов

PETER LYNCH, The Dolph–Chebyshev Window: A Simple Optimal Filter. (*)

В статье (*) формула (3) является расчетной формулой для коэффициентов окна. Как вычислить cosh ? при вычислениях возникает ошибка “overflow encountered in cosh”. Вот код, реализующий вычисление коэффициентов:

wn = []                         # empty array for coefficients
M = 25 # just a number
N = 2*M + 1 # number of coefficients
r = 10**(-3) # sidelobe attenuation
x0 = cosh(1./2*M)*pow(cosh(1./r), -1) # stop band frequency
for n in range(-M, M+1):
S = 0; theta_n = 2*pi*n*N
for m in range(1, M+1):
theta_m = 2*pi*m/N
S += cheb(2*M, x0*cos(theta_m/2.))*cos(m*theta_n)
wn.append((1./N)*(1+2*r*S))


PS ссылка на статью: http://www.maths.tcd.ie/~plynch/Publications/Dolph.pdf
upd функция cheb(a, b), присутствующая в коде выглядит так:
def cheb(q, x): 
if q == 0:
return 1
if q == 1:
return x
if q > 1:
return 2*x*cheb(q-1, x) - cheb(q-2, x)



Отредактировано eiyawii (Ноя. 6, 2012 13:04:19)

Офлайн

#2 Ноя. 6, 2012 15:40:16

adray
Зарегистрирован: 2012-09-15
Сообщения: 123
Репутация: +  18  -
Профиль   Отправить e-mail  

вычисление коэффициентов

r = 10**(-3)
В статье про это ничего нет.
cosh(1000) это дохрена,
sys.float_info(max=1.7976931348623157e+308...
нужна либо длинная вещественная арифметика, либо значение r считается неправильно

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version