谱分析中的Ogive表达及其matlab实现
来源:互联网 发布:网络串口服务器 编辑:程序博客网 时间:2024/06/05 05:23
Ogive,即谱/谐谱的累积积分的表达,如果对谱/谐谱不理解的同学,请参考傅里叶变换等相关的内容
Ogive图常用于分析特定频率对某变量方差或协方差的贡献,早期用于气象方法的湍流谱分析中,用于观测不同频率的湍流谱对湍流通量的贡献及影响,从而选择合适的频率区间
具体公式如下:
上式是分析两个变量的协谱,其中w是变量1,x是变量2,Cowx是这两个变量的傅里叶变换后的协谱,具体实现方式也给出了,Ogive的典型形状如下图:
公式下第一张图是协谱图,第二张就是Ogive curve,大致是S型,横坐标从右到左为频率重高频到低频的积分,低频部分收敛,表示对这两个变量的协方差没有多少贡献了
这里需要注意的是,Ogvie分析之前,需要对数量进行去趋势处理,detrend(),这个函数即可
function [Ogive_norm,freq_domain,Ogive,Cosp] = OgiveFunV2( X,Y,Hz,taper )% Ogive analysis% input:% X-变量1% Y - 变量2% Hz - 频率% taper - 窗函数% edges at the boundaries removing the corresponding discontinuity in the% infinitely periodic extension of the segment (Kaimal and Kristensen, 1991)% taper - 'none';'hamming';'Bell'% output:% Ogive_norm: 标准化的Ogive,为啥要标准呢,当然是为了方便对比% freq_domain: frequency domain correspond to Ogive value% Ogive:no-normalized Ogive% Cosp:cospectral W'X'
%%variable should detrend delete meso-flow narginchk(3,4);nargoutchk(1,5);if nargin == 3 taper = 'none';endif size(X,2) ~= 1 X = X'; Y = Y';endL = length(X); % Evaluate number of data pointsswitch taper case 'none' % do nothing case 'hamming'
%对原始数据加窗,是为了降低谱泄漏现象,不理解谱泄漏的,请参考傅里叶变换相关的内容吧或问问百度,这里给了两个选择海明窗和贝尔窗 % ref Kristoffer Aslstad's master's thesis <Applying the Eddy Covariance Method Under Difficult Conditions> w_hamming = hamming(L,'periodic'); Xk_var = X.*w_hamming; %the result of traper will both damp the variance and introduce a %residual mean in the LDT time series %first remove any residual mean introduced Xk_var = Xk_var - mean(Xk_var); %second calculate compensation factor recover the variance of LDT %data Cf = sqrt(var(X)/var(Xk_var)); Xk_var = Xk_var.*Cf; Yk_var = Y.*w_hamming; Yk_var = Yk_var - mean(Yk_var); Cf = sqrt(var(Y)/var(Yk_var)); Yk_var = Yk_var.*Cf; X = Xk_var; Y = Yk_var; case 'bell' w_bell = tukeywin(L,0.25); Xb_var = X.*w_bell; Xb_var = Xb_var - mean(Xb_var); %second calculate compensation factor recover the variance of LDT %data Cf = sqrt(var(X)/var(Xb_var)); Xb_var = Xb_var.*Cf; Yb_var = Y.*w_bell; Yb_var = Yb_var - mean(Yb_var); Cf = sqrt(var(Y)/var(Yb_var)); Yb_var = Yb_var.*Cf; X = Xb_var; Y = Yb_var;end%plot for debugif mod(L(1),2)==0 f = Hz*linspace(0,1,L+1)'; f = f(1:end-1);else f = Hz*linspace(0,1,L)';enddf = f(2); % Frequency intervalfreq_domain = f(2:floor(L/2)+1); % Frequency up to Nyquist frequency
%一下两行是快速傅里叶变换y1 = fft(X)./L; % Discrete Fourier transformy2 = fft(Y)./L;hl = ones(L,1);%Cospectrum计算两个变量的协谱%sum(Co) is equal to cov(W,X,1)Co = real(conj(hl).*conj(y1).*y2);if mod(L,2)==1 Cosp = 2.*Co(2:floor(L/2)+1,:);else Cosp=nan(L/2,1); Cosp(1:L/2-1,:) = 2.*Co(2:L/2,:); Cosp(L/2,:) = Co(L/2+1,:);endfreq_domain=real(freq_domain); %raw natural frequencyCosp=real(Cosp); %raw natural spectraOgive = cumsum(Cosp);%normalized Ogive%use SAM这里的SAM等同与两个变量的协方差SAM = sign(max(Ogive) + min(Ogive))*max(abs(Ogive));Ogive_norm = Ogive ./ SAM;end
0 0
- 谱分析中的Ogive表达及其matlab实现
- 谱分析
- 压缩感知中的常见测量矩阵及其MATLAB实现代码
- VB中频谱分析仪的实现
- MATLAB-RSA加密算法及其MATLAB实现
- 恒虚警算法及其MATLAB实现
- kalman 滤波器及其MATLAB实现
- 数学及其英文表达
- 弹性系数系数在水文气象中的应用及其MATLAB实现
- MATLAB中的函数句柄及其应用
- fft谱分析中的栅栏效应和频谱泄露
- 学习笔记: CIC filter及其matlab实现
- 模拟退火算法举例及其matlab实现
- 动态星间链路分析及其STK/Matlab实现
- 卡尔曼滤波模型及其Matlab实现
- 最小二乘法直线拟合及其Matlab实现
- Radon变换及其Matlab代码实现
- BP神经网络原理及其matlab实现
- [Android]Ubuntu编译AOSP
- TensorFlow-4: tf.contrib.learn 快速入门
- Retrofit2.0 简单使用总结
- Mac上关于tomcat服务器的安装、配置、启动、部署web详细流程
- ArcGIS API for JavaScript 4.x中的3D部分(2)
- 谱分析中的Ogive表达及其matlab实现
- IntelliJ IDEA 导入 第三方jar包 报ClassNotFoundException
- 二叉查找树插入删除
- 转载:Git中Read.MD文件格式:Markdown语言详解
- JAVA之for循环执行顺序附Demo
- flink与Spark的对比分析[转]
- shell 求和的方法
- 严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderLis
- java常见的关键字