我正在研究一种优化方法来设计数字滤波器,并使用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)