2013-02-26 3 views
1

Я использовал пакеты R wavethresh, чтобы получить вейвлет-преобразования и преобразования пакетных вейвлетов. Я легко могу получить коэффициенты вейвлет-преобразования на основе вейвлетов. Однако я не могу справиться с получением базы вейвлетов.Получите вейвлет-базу от вейвлет-преобразования

Я использую стандартные вейвлет-фильтры на данный момент: Daubechies Least Asymmetric.

Вот пример моего кода для вейвлет-преобразования:

data <- cos(1:512/(10*pi)) 
wave <- wd(data) 

и вейвлет-пакетов преобразования:

wave <- wp(Temperature[,1]) 
coeffs <- MaNoVe(wave.th) 
l <- print(coeffs) 

Я попробовал несколько вещей для вейвлетов пакета преобразования:

basis <- matrix(NA,length(l$level),512) 
for (i in 1:length(l$level)) 
    basis[i,] <- drawwp.default(l$level[i],l$pkt[i],resolution=512) 

но я получаю только несколько функций, а не весь базис. Более того, я не уверен, что эти функции мне нужны.

Вот ссылка на документацию к упаковке: wavethresh.pdf. Но если у вас есть решения для моей проблемы в другом R-пакете, это тоже будет отлично;)

Большое спасибо за вашу помощь!

ответ

1

Моя проблема решена! Я использовал пакет wmtsa вместо wavethresh.

Для построения основы в обоих случаях (вейвлет-преобразование и вейвлет-преобразование пакетов) вы можете использовать метод reconstruct для определенного вейвлета w. У этого есть все коэффициенты, установленные на 0, за исключением того, который установлен в 1.

basis <- matrix(NA,2^lvl,2^lvl) 
compt <- 1 
w$data$s9 <- 0 
for (i in 1:lvl) 
    w$data[[i]]<-rep(0,2^(lvl-i)) 
for (i in 1:lvl){ 
    for (j in 1:2^(lvl-i)){ 
      w$data[[i]][j] <- 1 
     basis[,compt] <- reconstruct(b) 
     w$data[[i]][j] <- 0 
     compt <- compt + 1 
    } 
} 

lvl - уровень разрешения вейвлет.

Можно сделать то же самое для преобразования вейвлет-пакетов.

3

Только для записи: Я являюсь основным автором wavethresh, и я также думаю, что wmtsa - прекрасный пакет.

Код, который вы изначально написал для wavethresh, должен работать. Я просто попробовал его на произвольном наборе данных длиной 512 (потому что у меня нет доступа к вашим данным!), И он, похоже, работает нормально, а массив «basis» содержит 215 элементов. График функции (coeffs) также создавал график по частоте, поэтому можно увидеть конкретную разбивку частотно-временной плоскости.

Ссылаясь на ваши две должности. Функция `drawwp.default 'фактически делает именно то, что вы упоминаете в своем втором сообщении. Чтобы получить изображение (или вектор значений) конкретного вейвлет-пакета, последовательность, содержащая все нули, и одна инвертирована. Это общеизвестный трюк вообще и был в wavethresh с 1993 года для всплесков (в функции draw()).

Что делать, и drawwp.default не будет делать, это получить право перевода. Он пытается выбрать хорошее значение перевода, чтобы вы получили красивую картинку. Вот почему аргумент drawwp.default содержит уровень шкалы, «число параметров колебаний», но не значение перевода. Тем не менее, просто перевести всплеск вверх или вниз по оси, и как вы это сделаете, это будет зависеть от того, какие граничные условия вы принимаете.

В моем оригинальном посте появилось (по крайней мере, для меня) одна опечатка. Объект wave' in line 3 becomes wave.th 'в строке 4. Однако я проигнорировал это и взял их как один и тот же объект. Я думаю, вы, возможно, делали некоторые пороговым который не имеет отношения к этой дискуссии :)

Все лучший, Guy Нейзон

Смежные вопросы