R学习_multitaper包解析1:子函数centre,dpss
生活随笔
收集整理的这篇文章主要介绍了
R学习_multitaper包解析1:子函数centre,dpss
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
前言
之前讲了MTM(多锥形窗谱估计)的相关原理,现在来分析一下它的R语言的实现,这个实现是提出人的学生写的,和matlab的实现进行对照分析,加深理解,提高大家对这门技术的掌握程度。
想要复习的可以参考一下之前的文件:
mtm原理:现代谱估计:多窗口谱
想要复习一下如何实现的可以参考:
MTM:matlab实现1MTM:matlab实现1
MTM:matlab实现2参数解析MTM参数解析
MTM:matlab实现3谱功率计算MTM谱功率计算
MTM:matlab实现4主函数解析MTM 主函数
目录
- 前言
- 目录
- centre函数
- DPSS函数
centre函数
该函数负责对输入的时间序列进行处理,使其满足零均值条件
######################################################################### ## ## centre ## ## Takes a time series and converts to zero-mean using one of three ## methods: Slepian projection, arithmetic mean, or trimmed mean. ## ######################################################################### r里面的赋值采用<-格式 输入参数 时间序列x nw生成几阶dpss序列 k使用的窗口数 deltat 采样间隔 trim截尾平均时丢掉的点数 centre <- function(x, nw=NULL, k=NULL, deltaT=NULL, trim=0) { 判断x是否有非数值na.fail(x)初始化结果res <- NULL如果没有输入dpss参数的话,则默认为截尾平均if(is.null(nw) && is.null(k) ) {res <- x - mean(x, trim=trim)如果有dpss参数,则使用slepian投影,截尾数舍弃} else {if(trim != 0) {warning(paste("Ignoring trim =", trim))}如果采用dpss方法,且相关参数不符合条件,则停止函数stopifnot(nw >= 0.5, k >= 1, nw <= 500, k <= 1.5+2*nw)如果dpss阶数和长度之比不合适,停止运算if (nw/length(x) > 0.5) { stop("half-bandwidth parameter (w) is greater than 1/2")}如果,deltat没有值且x是时间序列,则获得它的采样间隔,否则,默认为1if(is.null(deltaT)) {if(is.ts(x)) {deltaT <- deltat(ts)} else {warning("deltaT not specified; using deltaT=1.")deltaT <- 1.0}}获得时间序列x的长度nn <- length(x)获得生成的DPSS序列结果,输入参数为n,k,nw,返回特征值dpssRes <- dpss(n, k=k, nw=nw,returnEigenvalues=TRUE)dw值等于返回结果中的特征值*采样间隔的单位根dw <- dpssRes$v*sqrt(deltaT)ev值等于返回结果中的特征加窗矩阵,每一列对应第k个。ev <- dpssRes$eigenswz是特征向量的列值和swz <- apply(dw, 2, sum)## zero swz where theoretically zero; odd tapers如果k》2则swz偶数位的值是0if(k >=2) {swz[seq(2,k,2)] <- 0.0}ssqswz是幅频率功率之和。ssqswz <- sum(swz^2)如果不是复值x,对x采取meave函数进行处理if(!is.complex(x)) {res <- .mweave(x, dw, swz,n, k, ssqswz, deltaT)res <- x - res$cntr} else {res.r <- .mweave(Re(x), dw, swz,n, k, ssqswz, deltaT)res.i <- .mweave(Im(x), dw, swz,n, k, ssqswz, deltaT)res <- x - complex(real=res.r$cntr, imaginary=res.i$cntr)}}return(res) }DPSS函数
负责生成给定的k个正交的离散扁球序列,即用来加权的窗
使用对角法生成。
参照论文和谱分析教材那本书,会讲如何得出给定的值
总结
以上是生活随笔为你收集整理的R学习_multitaper包解析1:子函数centre,dpss的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: JAVA做一个五星评论打分字体,java
- 下一篇: ar android app,Rakug