(A−s)x+sy= (A−s)(s)

Envelope

• 选取常见的10种岩石类型15种岩石样品的光谱数据，对其进行均值、重采样、平滑、水汽吸收波段拟值等预处理，以消除岩石光谱噪声，然后通过包络线消除法，获得了岩石光谱特征参数，发现云母板岩（风化面）吸收特征最为...
• 三次样条插值法来求信号包络线，源码提供，此种方法求包络线较为传统也较为准确
• 本文档详细介绍采用ENVI处理光谱数据包络线或者连续统去除的步骤，图文并茂，详细，简单易懂。
• eemd中求极值的方法，或求上下包络线的方法
• 针对经验模态分解(empirical mode decomposition,EMD)过程中存在的包络线拟合问题,提出了一种精确消除欠冲现象的改进算法.该算法首先确定利用三次样条插值(cubic spline interpolation,CSI)进行包络线拟合时所产生的...
• 用matlab绘制包络线，亲测可用放心下载
• MATLAB源程序代码分享：MATLAB实现三次样条插值法求信号的包络线
• 在深入研究和分析EMD算法的基础上,提出了一种基于波形匹配的端点效应处理方案,通过计算波形匹配度, 在平均包络线内部寻找与其端部变化趋势最为接近的子波,并用这段子波代替平均包络线的边缘部分, 使处理后的平均...
• 包络线技术指标由两条移动平均线构成，一条上移，一条下移。选择包络线位移的最佳相关系数是由市场的波动性决定的：市场变化率越高，偏移就越强烈。
• 包络谱求解，希尔伯特变换求包络谱，用于寻找故障频率和边带
• 使用ATR的趋势包络线指标计算了价格的变化，在计算之前加上对价格的平滑处理。
• % 返回输入序列x的上下包络线，作为其解析信号的大小。 % % x的解析信号是利用希尔伯特实现的离散傅里叶变换得到的。 % % 这个函数首先移除x的均值，然后在计算包络线之后再把它加回来。 % % 如果x是一个矩阵，那么...
函数：
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 返回输入序列x的上下包络线，作为其解析信号的大小。              %
% x的解析信号是利用希尔伯特实现的离散傅里叶变换得到的。           %
% 这个函数首先移除x的均值，然后在计算包络线之后再把它加回来。      %
% 如果x是一个矩阵，那么包络线对x的每一列都是独立的。             %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[yupper,ylower] = envelope(x)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 返回用解析信号的大小确定的x的包络线。                        %
% 解析信号通过使用长度为fl的Hilbert FIR滤波器对x进行滤波来计算。 %
% 如果只指定两个参数，则使用此语法。                           %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[yupper,ylower] = envelope(x,fl,'analytic')

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 返回x的上、下均方根包络。包络是使用长度wl样本的滑动窗口确定的。  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[yupper,ylower] = envelope(x,wl,'rms')

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 返回x的上峰和下峰包络线。                                  %
% 包络线由至少np个样本分离的局部最大值上的样条插值确定。         %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[yupper,ylower] = envelope(x,np,'peak')

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 在没有输出参数的情况下，绘制信号及其上下包络线。               %
% 该语法接受以前语法中的任何输入参数。                         %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
envelope(___)

例1： [up,lo] = envelope(q)
% 信号生成
t = 0:1/2000:2-1/2000;
plot(t,q)

% 包络线绘制
[up,lo] = envelope(q);
hold on
plot(t,up,t,lo,'linewidth',1.5)
legend('q','up','lo')
hold off

例2： [up,lo] = envelope(q,100,'analytic');
% 信号生成
t = 0:1/1000:3;
q1 = sin(2*pi*7*t).*exp(-t/2);
q2 = chirp(t,30,2,5).*exp(-(2*t-3).^2)+2;
q = [q1;q2]';
plot(t,q)

% 包络线绘制
[up,lo] = envelope(q,100,'analytic');
hold on
plot(t,up,'-',t,lo,'--')
hold off


例3：不同参数的包络线区别
% 信号生成
t = 0.5:-1/100:-2.49;
z = airy(t*10).*exp(-t.^2);
plot(z)

% 无参数
figure
envelope(z)

% 参数：analytic,使用50-tap Hilbert filter计算信号的包络线
figure
envelope(z,50,'analytic')

% 参数：rms，使用40个样本的移动窗口来计算信号的RMS包络
figure
envelope(z,40,'rms')

% 参数：peak，确定峰包络，在被至少10个样本分隔的局部极大值上使用非结点条件的样条插值。
figure
envelope(z,10,'peak')


例4：不同采样点的影响

参考文献：
https://www.mathworks.com/help/signal/ref/envelope.html
展开全文
• 已升级指标: 现在它拥有新的价格类型和不同的显示类型。
• 趋势包络线 - 抛物线加权 MA
• #资源达人分享计划#
• matlab程序，画曲线及其包络线，有图形标题，坐标轴说明以及指定位置图形说明
• 广义函数可以绘制任何给定数据的包络线。 此外，演示 m 文件显示了如何使用它。
• 动态包络线是制定动态限界的主要依据，准确得到动态包络线是车辆设计过程中的一项重要内容，也是安全行车的重要保障。针对当前车辆动态包络线的获取主要通过计算手段这一情况，设计了高速列车动态包络线测量系统。...
• 本程序为使用matlab编写的EMD的实现程序，并且在程序中对提取包络线的三次样条函数进行了改进，利用本程序可以提高EMD的使用精度。本人多次使用本程序或在本程序的基础上改进新算法，并发表学术论文。
• 通过Matlab仿真,分别用常规RLS和改进RLS追踪电压闪变的包络线和初相角,用改进RLS追踪单频、多频闪变及其加噪后的包络线幅值,并对包络线进行了快速傅里叶变换分析。结果证实该方法提高了准确性。
• Matlab绘制包络线可以通过hilbert或者envelope实现，先说hilbert Hilbert变换 Hilbert变换可用于形成解析信号。解析信号在通信领域中很有用，尤其是在带通信号处理中。工具箱函数hilbert计算实数输入序列x的...
Matlab绘制包络线可以通过hilbert或者envelope实现，先说hilbert

Hilbert 变换
Hilbert 变换可用于形成解析信号。解析信号在通信领域中很有用，尤其是在带通信号处理中。工具箱函数 hilbert 计算实数输入序列 x 的 Hilbert 变换，并返回相同长度的复数结果，即 y = hilbert(x)，其中 y 的实部是原始实数数据，虚部是实际 Hilbert 变换。在涉及到连续时间解析信号时，y 有时被称为解析信号。离散时间解析信号的关键属性是它的 Z 变换在单位圆的下半部分为 0。解析信号的许多应用都与此属性相关；例如，用解析信号避免带通采样操作的混叠效应。解析信号的幅值是原始信号的复包络。

%% 基本参数A = 1; % 激励信号幅值N = 15; % cycle数，即激励信号波峰数fck = 100; % 激励中心频率 kHzfc = 100e3; % 激励信号中心频率，HzT0 = 1e-4; % 导波传播时间T = 4.0*T0; % 激励持续时长dt = 1/(20*fc)/2; % 时间步长，在最大步长基础上除以2t = [0:dt:T]'; % 时间序列V = A*[heaviside(t)-heaviside(t-N/fc)].*(1-cos(2*pi*fc*t/N)).*sin(2*pi*fc*t);h = hilbert(V); % Hilbert变换figureplot(t,V)

%% 包络绘制figureplot(t,V)hold onplot(t,abs(h),'--','linewidth',1.5)hold onplot(t,-1*abs(h),'-.','linewidth',1.5)grid on

envelope
envelope返回输入序列x的上下包络线，作为其解析信号的大小。x的解析信号是利用希尔伯特实现的离散傅里叶变换得到的。这个函数首先移除x的均值，然后在计算包络线之后再把它加回来。如果x是一个矩阵，那么包络线对x的每一列都是独立的。
​​​​​​​
% 信号生成t = 0:1/2000:2-1/2000;q = chirp(t-2,4,1/2,6,'quadratic',100,'convex').*exp(-4*(t-1).^2);plot(t,q)

% 包络线绘制[up,lo] = envelope(q);figureplot(t,q)hold onplot(t,up,t,lo,'linewidth',1.5)legend('signal','上包络线','下包络线')hold off


展开全文
• 计算当前点与右边所有点连线的斜率，取斜率最大的连线的端点作为包络线的下一个端点，同时更新当前点为该端点，重复，直到最后一个点。 计算当前点与左边所有点连线的斜率取斜率最小的连线的端点作为包络线的下一个...


目录
算法描述运行结果MATLAB代码

算法描述
1.找到所有极大值点。 2.找到极值点中最大的。 3.以该最大点为起点，向两边找， 计算当前点与右边所有点连线的斜率，取斜率最大的连线的端点作为包络线的下一个端点，同时更新当前点为该端点，重复，直到最后一个点。 计算当前点与左边所有点连线的斜率取斜率最小的连线的端点作为包络线的下一个端点，同时更新当前点为该端点，重复此过程，直到第一个点。 4.直到所有极大值点都加入包络线为止 5.得到包络线后用原曲线除以包络线得到包络线去除后的曲线。
运行结果
可见包络线提取和包络线去除的效果较好。
MATLAB代码
在main.m中调用Envelope函数生成包络线。
main.m
%Copyright (C) China University of Geoscience
%20181003670 Fu Zhixiang
%
%% 创建并绘制光谱曲线
data=[6,10,18,13,10,11,30,40,39,39,38,38,...
39.5,39,38,39,35,30,25,18,23,20,25,30,31,...
32,28,25,20,15,20,12,13,15,16,20,18,15,12,10,8,5,2,0,0]./100;
x=0.4:0.05:2.6;
plot(x,data);
hold on;

%% 创建包络线
[result_x,result_y]=Envelope(x,data);%调用自定义的提取包络线函数
%plot(result_x,result_y,'-+');
title('包络线');

%% 包络线插值
y=interp1(result_x,result_y,x,'pchip');
plot(x,y);

%原数据除以包络线
y1=data./y;
plot(x,y1);

Envelope.m
function [ output_x,output_y ] = Envelope( input_x,input_y )
%包络线提取
%Copyright (C) China University of Geoscience
%064181 FuZhixiang

%%%%%%%%%%%%%%%%%%%%%%%%%%%

%找极大值索引
LocMaxInd=find(diff(sign(diff(input_y)))<0)+1;%极大值在input_x中的索引
LocMax=input_y(LocMaxInd);%存放所有极大值
len=length(LocMax);
input_len=length(input_x);

%找极大值中的最大值在LocMax中的索引
[~,MaxInd]=max(LocMax);
output_x=LocMaxInd(MaxInd);%该数组记录包络线端点在input中的索引
output_y=LocMax(MaxInd);%该数组记录选取构成包络线的极大值

%计算最大值右边的包络线
if(MaxInd~=len)
i=MaxInd;
while(i~=len)
k_arr=zeros(1,len-i);%k_arr的个数等于当前点右边极大值点的个数

%依次计算当前点右边所有点与当前点的连线，并存入k_arr
for j=(i+1):len
k_arr(j-i)=(LocMax(j)-LocMax(i))/(LocMaxInd(j)-LocMaxInd(i));
end

%更新i
[~,ind]=max(k_arr);
i=ind+i;

%将选出的端点加入结果
output_x=[output_x,LocMaxInd(i)];
output_y=[output_y,LocMax(i)];
end
end

%将末端的非极值点加入包络线
for j=(LocMaxInd(i)+1):input_len
output_x=[output_x,j];
output_y=[output_y,input_y(j)];
end

%计算最大值左边的包络线
if(MaxInd~=1)
i=MaxInd;
while(i~=1)
k_arr=zeros(1,i-1);%

%依次计算当前点右边所有点与当前点的连线，并存入k_arr
for j=1:(i-1)
k_arr(j)=(LocMax(j)-LocMax(i))/(LocMaxInd(j)-LocMaxInd(i));
end
[~,i]=min(k_arr);%更新i

%将选出的端点加入结果
output_x=[LocMaxInd(i),output_x];
output_y=[LocMax(i),output_y];
end
end

%将起始的非极值点加入包络线
for j=(LocMaxInd(i)-1):-1:1
output_x=[j,output_x];
output_y=[input_y(j),output_y];
end

output_x=input_x(output_x);
end

展开全文
• 使用openlayers + turf 实现包络线 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"&...
使用openlayers + turf 实现包络线

<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>openlayer 绘制包络线</title>
<script src="https://openlayers.org/en/v4.6.5/build/ol.js"></script>
<script src='https://npmcdn.com/@turf/turf/turf.min.js'></script>
<body>
<div id="map" class="map"></div>
<script>
let circleArr = [
{
id: 1,
coord: [17860900.96109145, 4419420.118625434],
},
{
id: 2,
coord: [17273864.583861295, 4634711.182242914],
},
{
id: 3,
coord: [18320746.12325507, 3901576.749523422],
},
{
id: 4,
coord: [17503787.164943103, 3723166.847745486],
},
{
id: 5,
coord: [14661233.521323085, 4955565.417784547],
},
{
id: 6,
coord: [14588401.874788066, 4339918.1468517305],
},
{
id: 7,
coord: [11515696.933331512, 4348961.1613133885],
}
]

var source =  new ol.source.OSM()
var drawSoruce = new ol .source.Vector()
var drawLayer = new ol.layer.Vector({
source: drawSoruce
})
var layer = new ol.layer.Tile({
source: source
})
var format = new ol.format.GeoJSON()

function initMap() {
var map = new ol.Map({
layers: [layer, drawLayer],
target: 'map',
view: new ol.View({
center: [12953135.948705314, 4854323.698611295],
zoom: 4,
projection: 'EPSG:3857',
})
})
}

// 初始化数据，并绘制包络线
// 全部的turf circle对象
let turfObjArr = []
dataArr.forEach((e) => {
let center =  ol.proj.transform(e.coord, "EPSG:3857", "EPSG:4326");
let turfFeature = turf.circle(center, e.radius, {steps: 100, units: 'kilometers'})
turfObjArr.push(turfFeature)
})

// 判断两个两个圆是否相交
let intersectCircle = []
let tempIntersect = []
let len = turfObjArr.length;
for(let i = 0; i < len; i++) {
for(let j = i + 1; j < len; j++) {
// 两个圆是否相交（相交返回true， 不想交返回false）
let overlap = turf.booleanOverlap(turfObjArr[i], turfObjArr[j])
// console.log(overlap)
if (overlap) {
tempIntersect.push({
number: [i, j],
arr: [turfObjArr[i], turfObjArr[j]]
})
if (intersectCircle && intersectCircle.length > 0) {
// intersectCircle.push([i, j])
intersectCircle.forEach((e) => {
if (e.indexOf(i) > -1 && e.indexOf(j) <= -1) {
e.push(j)
} else if (e.indexOf(j) > -1 && e.indexOf(i) <= -1) {
e.push(i)
} else if (e.indexOf(j) <= -1 && e.indexOf(i) <= -1) {
intersectCircle.push([i, j])
}
})
} else {
intersectCircle.push([i, j])
}
}
}
}

// 将数组扁平化处理
let modifyArr = intersectCircle.reduce(function (a, b) { return a.concat(b) })
console.log(modifyArr)
// 创建一个验证数组，查看那个数字没有在turfCircle里面
let verifyArr = []
for (let i = 0; i < circleArr.length; i++) {
verifyArr.push(i)
}

intersectCircle.push(getArrDifference(modifyArr,verifyArr))

intersectCircle.forEach((e) => {
if (e.length > 1) {
let elen = e.length
let number1 = e[0]
let number2 = e[1]
let tempUnion = turf.union(turfObjArr[number1], turfObjArr[number2])
for (let i = 2; i < elen; i = i + 1) {
let numE = e[i]
tempUnion = turf.union(tempUnion, turfObjArr[numE])
}
tempMark.getGeometry().transform("EPSG:4326","EPSG:3857")
} else {
let number = e[0]
tempFeature.getGeometry().transform("EPSG:4326","EPSG:3857")
}
})
}

// 获取两个数组中不同的元素
function getArrDifference(arr1, arr2) {
return arr1.concat(arr2).filter(function(v, i, arr) {
return arr.indexOf(v) === arr.lastIndexOf(v);
});
}
initMap()
</script>
</body>
</html>
注意：在写代码的时候注意投影坐标系的转换

展开全文
• 微观经济学中常会提到长期总（平均）成本曲线是短期总（平均）成本曲线的包络线，如下图所示： 如何直观理解？ 首先想，企业如何确定其长期成本曲线？首先看企业长期生产函数：Q=F(K,L)Q=F(K,L)Q=F(K,L)。在短期：Q...
• 包络线去除是光谱识别中一个重要的步骤，算法如下： （1）通过求导得到光谱曲线上所有极大值点，即“峰”值点，然后比较大小，得到极大值点中的最大值点； （2）以最大值点作为包络线的一个端点，计算该点与长波...
• %% 数据边界 clear all; close all;clc; % %% 数据 data = load ('ftp_75_gear.txt'); %导入工况数据 data=data(1:end,:); time=data(:,1);...%% 求出曲线的垂直距离为2的包络线 x=time; y=speed; r=2; r...
• 在labview中利用希尔伯特变换求包络线
• 信号 包络线 信号 MATLAB的 M 文件 验证过的很好用
• ## 绘制包络线

千次阅读 2019-10-03 07:11:24
x=0.:pi/8:4*pi; y=exp(-x/3).*sin(3*x); yb=exp(-x/3); plot(x,yb,'k-',x,-yb,'k-',x,y,'-ro','linewidth',2,'markeredgecolor','g','markerfacecolor','y','markersize',6) grid on ...

...