• 三次样条插值法来求信号包络线，源码提供，此种方法求包络线较为传统也较为准确
• % 返回输入序列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
展开全文
• ## 信号包络

千次阅读 2015-08-10 09:21:47
将一段时间长度的高频信号的峰值点连线，就可以得到上方（正的）一条线和下方（负的）一条线，这两条线就叫包络线包络线就是反映高频信号幅度变化的曲线。对于等幅高频信号，这两条包络线就是平行线，。  当用...
将一段时间长度的高频信号的峰值点连线，就可以得到上方（正的）一条线和下方（负的）一条线，这两条线就叫包络线。包络线就是反映高频信号幅度变化的曲线。对于等幅高频信号，这两条包络线就是平行线，。

当用一个低频信号对一个高频信号进行幅度调制（即调幅）时，低频信号就成了高频信号的包络线。这样的信号称为调幅信号。
从调幅信号中将低频信号解调出来的过程，就叫做包络检波。也就是说，包络检波是幅度检波。
包格检波常用的方法是采用二极管进行单向过滤后再进行低通滤波。没有二极管而直接进行低通滤波的话，会使正、负包络线抵消，从而检不出低频信号。

除了包络检波，还有频偏（调频）检波，相移（或相位）检波等等

展开全文
• import mathimport numpy as npfrom numpy import array, sign, zerosfrom scipy.interpolate import interp1dimport scipy.signal#输入信号序列即可(list)def envelope_extraction(signal):s = signal.astype(float...

import math
import numpy as np
from numpy import array, sign, zeros
from scipy.interpolate import interp1d
import scipy.signal
#输入信号序列即可(list)
def envelope_extraction(signal):
s = signal.astype(float )
q_u = np.zeros(s.shape)
q_l = np.zeros(s.shape)
#在插值值前加上第一个值。这将强制模型对上包络和下包络模型使用相同的起点。
#Prepend the first value of (s) to the interpolating values. This forces the model to use the same starting point for both the upper and lower envelope models.
u_x = [0,] #上包络的x序列
u_y = [s[0],] #上包络的y序列
l_x = [0,] #下包络的x序列
l_y = [s[0],] #下包络的y序列
# 检测波峰和波谷，并分别标记它们在u_x,u_y,l_x,l_中的位置。
#Detect peaks and troughs and mark their location in u_x,u_y,l_x,l_y respectively.
for k in range(1,len(s)-1):
if (sign(s[k]-s[k-1])==1) and (sign(s[k]-s[k+1])==1):
u_x.append(k)
u_y.append(s[k])
if (sign(s[k]-s[k-1])==-1) and ((sign(s[k]-s[k+1]))==-1):
l_x.append(k)
l_y.append(s[k])
u_x.append(len(s)-1) #上包络与原始数据切点x
u_y.append(s[-1]) #对应的值
l_x.append(len(s)-1) #下包络与原始数据切点x
l_y.append(s[-1]) #对应的值
#u_x,l_y是不连续的，以下代码把包络转为和输入数据相同大小的数组[便于后续处理，如滤波]
upper_envelope_y = np.zeros(len(signal))
lower_envelope_y = np.zeros(len(signal))
upper_envelope_y[0] = u_y[0]#边界值处理
upper_envelope_y[-1] = u_y[-1]
lower_envelope_y[0] = l_y[0]#边界值处理
lower_envelope_y[-1] = l_y[-1]
#上包络
last_idx,next_idx = 0, 0
k, b = general_equation(u_x[0], u_y[0], u_x[1], u_y[1]) #初始的k,b
for e in range(1, len(upper_envelope_y)-1):
if e not in u_x:
v = k * e + b
upper_envelope_y[e] = v
else:
idx = u_x.index(e)
upper_envelope_y[e] = u_y[idx]
last_idx = u_x.index(e)
next_idx = u_x.index(e) + 1
#求连续两个点之间的直线方程
k, b = general_equation(u_x[last_idx], u_y[last_idx], u_x[next_idx], u_y[next_idx])
#下包络
last_idx,next_idx = 0, 0
k, b = general_equation(l_x[0], l_y[0], l_x[1], l_y[1]) #初始的k,b
for e in range(1, len(lower_envelope_y)-1):
if e not in l_x:
v = k * e + b
lower_envelope_y[e] = v
else:
idx = l_x.index(e)
lower_envelope_y[e] = l_y[idx]
last_idx = l_x.index(e)
next_idx = l_x.index(e) + 1
#求连续两个切点之间的直线方程
k, b = general_equation(l_x[last_idx], l_y[last_idx], l_x[next_idx], l_y[next_idx])
#也可以使用三次样条进行拟合
#u_p = interp1d(u_x,u_y, kind = 'cubic',bounds_error = False, fill_value=0.0)
#l_p = interp1d(l_x,l_y, kind = 'cubic',bounds_error = False, fill_value=0.0)
#for k in range(0,len(s)):
# q_u[k] = u_p(k)
# q_l[k] = l_p(k)
return upper_envelope_y, lower_envelope_y
def general_equation(first_x,first_y,second_x,second_y):
# 斜截式 y = kx + b
A = second_y-first_y
B = first_x-second_x
C = second_x * first_y - first_x * second_y
k = -1 * A / B
b = -1 * C / B
return k, b

展开全文
• 利用labview实现提取信号包络的例子。
• 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函数 ，觉得好的下来。如何对这个信号取包络，网上大多是hilbert取包络的方法，下面是一部分代码，后面如何取一个平滑的包络线
• 行业分类-电信-利用对信号包络线处理测量流体流量的系统及方法.rar
• 用matlab绘制包络线，亲测可用放心下载
• 行业分类-电信-一种导波信号包络线的绘制方法.rar
• 今天小编就为大家分享一篇Python 基于FIR实现Hilbert滤波器求信号包络详解，具有很好的参考价值，希望对大家有所帮助。一起跟随小编过来看看吧
• clear all; clc; close all; fs=400; % 采样频率 N=400; % 数据长度 n=0:1:N-1; dt=1/fs; t=n*dt; % 时间序列 A=0.5; % 相位调制幅值 x=(1+... % 包络线 figure; plot(x);hold on ;plot(a); hold on; plot((-1)*a,'b')
• 利用极大值、极小值提取包络，比较希尔伯特变换和数学形态法提取的优缺点，极大值极小值提取的方法提取的包络比较平滑，
• matlab三次样条插值求数据包络线，可以直接跑
• MATLAB源程序代码分享：MATLAB实现三次样条插值法求信号包络线
• LabVIEW是一种程序开发环境，由美国国家仪器（NI）公司研制开发，类似于C和BASIC开发环境，但是LabVIEW与其他计算机语言的显著区别是：其他计算机语言都是采用基于文本的语言产生代码，而LabVIEW使用的是图形化编辑...
• 之前分享过matlab如何绘制包络线（传送门：Matlab绘制信号包络线），今天分享一下python如何实现 包络线基于scipy库，利用scipy.signal.hilbert 用法： scipy.signal.hilbert（x，N=None，axis=-1） 使用...
• 链接：https://pan.baidu.com/s/1TFWEIpbR9yYbMyui7vFfmA 提取码：46iw
• 包络线公式08/04/2015本文...包络线指标用于创建买卖信号。可以指定公式用于计算包络线的百分比。公式详细信息语法Chart.DataManipulator.FinancialFormula(FinancialFormula.Envelopes,"Period,Shift","Price","Upp...
• ## MATLAB信号包络的提取

万次阅读 多人点赞 2020-10-16 15:52:46
一、使用希尔伯特变换计算信号包络 1.函数调用 y=hilbert（x） 2.范例 clear all; clc; close all; n=-5000:20:5000; % 样点设置 % 程序第一部分:直接做做希尔伯特变换 N=length(n); % 信号样点数 nt=0:N-1; % ...
• 18、 19、信道引起的失真 （1）码间串扰：传输特性不理想或多径引起 （2）频率偏移：主要由多普勒效应引起 多普勒效应会引起信号频谱展宽、中心频率偏移 （3）信号衰落：多径或信号自身变化引起 衰弱：信号包络因...
• Hilbert变换从公式上看，是信号与1/(pi*t)的卷积。 此外，可以从“线性系统”，“调幅-调频”等角度思考，具体参考如下链接！ --------------------------------------Hilbert变换理解-------------------------...
• 摘要本文介绍了用于包络跟踪(ET，envelope tracking)应用的线性辅助混合电源转换器(linear assisted hybrid converter)中的高带宽和高压摆率c1ass-AB放大器的设计。在传输LTE信号时，ET已经变得普遍用于提高便携式...
• 该程序用matlab语言根据计算绘制了信号包络
• 希尔伯特变换获得信号时域的包络线；用fft变换获得包络谱%如何获得包络线？%信号经希尔伯特变换不能直接得到包络，设信号x的希尔伯特变换为y，则平方和%x.^2+y.^2(或者再开根号，直接取平方和的效果为好)才是信号x的...
• 假设信号 %%%%连续信号 t=0:0.001:20; y=(1-0.7*cos(t)).*(cos(10*pi*t)+sin(9*pi*t)); plot(t,y); hold on 希尔伯特变换绘制包络 %%%%希尔伯特变换绘制包络 z1=abs(hilbert(y)); z2=-abs(hilbert(y)); plot(t,z1,t...
• clearclcformat longl1=2400 ;l2=2000;l3= 2000; D=2; Vsaw=3488; w=(Vsaw/(4*D))*pi*2;frq=433;ww=(433)*pi*2;a=2; N=5; ws=10610; B=zeros(5,ws); C=zeros(1,ws);ref=0.0344;absorb=0.992...

...