Как мне поступить с NaN, возвращаемым freqz в R?
Я работаю над методом оптимизации для разработки цифровых фильтров и использования freqz
, от signal
пакет, чтобы оценить кандидатов. Тем не менее, я получаю NaN's
на ответ, данный freqz
, Это большая проблема для меня, потому что мне нужно вычислить среднеквадратичную ошибку этого ответа.
Фильтр ниже является примером этого. Самым первым пунктом ответа является NaN
,
Код R:
b <- c(-100.00000, 62.92546, -73.64395, -82.57045, 35.11388, -100.00000)
a <- c(100, 100, 100, -100, -100, -100)
r <- freqz(b,a)
r$h[1]
Запустив эквивалентный код в Matlab я получаю -Inf
, хоть. Что очень хорошо для моей цели.
Код Matlab:
b = [-100.00000, 62.92546, -73.64395, -82.57045, 35.11388, -100.00000]
a = [100, 100, 100, -100, -100, -100]
[h, ~] = freqz(b,a)
h(1)
Насколько я понимаю, так как freqz
делает свои расчеты на основе формулы ниже, что должно происходить, что у нас есть значение, близкое к нулю на знаменателе (обратите внимание, что коэффициенты в a
сложенные вместе равны нулю) но вместо +/-Inf
(как делает Matlab) он по ошибке возвращается NaN
,
Суть в том, что я думаю, что он должен дать тот же ответ, что и Matlab.
Работа вокруг (с бутами)
Пока это то, что я сделал в качестве обходного пути:
r <- freqz(b,a)
if(anyNA(hw$h)){
r$h[is.nan(r$h)] <- Inf
}
Это решает мою проблему, но мне интересно, есть ли лучший способ сделать это или я должен считать это ошибкой и сообщать об этом, я был бы рад помочь. Возможно, это уже было решено (если это реальная ошибка).
Дополнительная информация
В случае, если это уместно, вот моя информация об окружении разработчика:
platform x86_64-apple-darwin13.4.0
arch x86_64
os darwin13.4.0
system x86_64, darwin13.4.0
status
major 3
minor 2.3
year 2015
month 12
day 10
svn rev 69752
language R
version.string R version 3.2.3 (2015-12-10)