我应该如何处理R中freqz返回的NaN?

时间:2016-04-02 03:19:00

标签: r algorithm matlab frequency-analysis digital-filter

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

解决(与buts)

到目前为止,这就是我作为一种解决方法所做的事情:

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)

0 个答案:

没有答案