2013-06-23 5 views
1

Мне интересно, есть ли какой-либо пакет, который позволяет нам использовать фильтр Lanczos. Я нашел другие фильтры, такие как butterworth, но я ищу фильтр низких частот Lanczos.Использование фильтра нижних частот lanczos в программе R

Насколько отличается фильтр Lanczos от фильтра butterworth? Любые предложения или подсказки приветствуются.

Спасибо.

+0

Пожалуйста, помогите нам помочь вам, предоставив нам воспроизводимый пример (например, данные кода и примера), см. Http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible- пример для деталей. –

ответ

4

Использование Интернета я нахожу эту MATLAB implementation.

Если вы пропустили первую часть (аргументы проверки), это выглядит просто написать свой R эквивалент.

#  Cf - Cut-off frequency  (default: half Nyquist) 
#  M - Number of coefficients (default: 100) 
lanczos_filter_coef <- function(Cf,M=100){ 
    lowpass_cosine_filter_coef <- function(Cf,M) 
    coef <- Cf*c(1,sin(pi*seq(M)*Cf)/(pi*seq(M)*Cf)) 
    hkcs <- lowpass_cosine_filter_coef(Cf,M) 
    sigma <- c(1,sin(pi*seq(M)/M)/(pi*seq(M)/M)) 
    hkB <- hkcs*sigma 
    hkA <- -hkB 
    hkA[1] <- hkA[1]+1 
    coef <- cbind(hkB, hkA) 
    coef 
} 

Чтобы проверить это, например:

dT <- 1 
Nf <- 1/(2*dT) 
Cf <- Nf/2 
Cf <- Cf/Nf 
lanczos_filter_coef(Cf,5) 

       hkB   hkA 
[1,] 5.000000e-01 5.000000e-01 
[2,] 2.977755e-01 -2.977755e-01 
[3,] 1.475072e-17 -1.475072e-17 
[4,] -5.353454e-02 5.353454e-02 
[5,] -4.558222e-18 4.558222e-18 
[6,] 2.481571e-18 -2.481571e-18 

PS Я не очень хорошо знаю MATLAB (использовал его много лет назад), так что я я использовал this link Для R/MATLAB аналогии. Я надеюсь, что кто-то с большим количеством знаний R/MATLAB/Scilab может проверить мой код.

+1

Приятная находка! Я рекомендую, чтобы OP выполнил сравнительный тест вашего кода «R» и родного Matlab, чтобы узнать, согласуются ли результаты. Хорошая домашняя работа для него :-) –

+0

@CarlWitthoft :) хорошая идея ... – agstudy