信号包络提取的方法

        此示例说明如何提取信号的包络。创建双边带幅值调制信号。载波频率为 1 kHz。调制频率为 50 Hz。调制深度为 100%。采样率为 10 kHz。

t = 0:1e-4:0.1;
x = (1+cos(2*pi*50*t)).*cos(2*pi*1000*t);

plot(t,x)
xlim([0 0.04])

        如图所示:

        使用 hilbert 函数提取包络。包络是由 hilbert 计算的解析信号的幅值。绘制包络和原始信号。将 plot 函数的名称-值对组参数存储在元胞数组中,供以后使用。分析信号的幅值捕获信号的缓慢变化特性,而相位包含高频信息。

y = hilbert(x);
env = abs(y);
plot_param = {'Color', [0.6 0.1 0.2],'Linewidth',2}; 

plot(t,x)
hold on
plot(t,[-1;1]*env,plot_param{:})
hold off
xlim([0 0.04])
title('Hilbert Envelope')

        如图所示:

        还可以使用 envelope 函数直接生成信号包络并修改其计算方式。例如,可以调整用于求得分析包络的 Hilbert 滤波器的长度。使用太小的滤波器长度会导致包络失真。 

fl1 = 12;
[up1,lo1] = envelope(x,fl1,'analytic');
fl2 = 30;
[up2,lo2] = envelope(x,fl2,'analytic');
param_small = {'Color',[0.9 0.4 0.1],'Linewidth',2};
param_large = {'Color',[0 0.4 0],'Linewidth',2};

plot(t,x)
hold on
p1 = plot(t,up1,param_small{:});
plot(t,lo1,param_small{:});
p2 = plot(t,up2,param_large{:});
plot(t,lo2,param_large{:});
hold off

legend([p1 p2],'fl = 12','fl = 30')
xlim([0 0.04])
title('Analytic Envelope')

        如图所示:

        可以使用滑动窗生成移动 RMS 包络。使用太小的窗长度会导致包络失真。使用太大的窗长度则会平滑掉包络。

wl1 = 3;
[up1,lo1] = envelope(x,wl1,'rms');
wl2 = 5;
[up2,lo2] = envelope(x,wl2,'rms');
wl3 = 300;
[up3,lo3] = envelope(x,wl3,'rms');

plot(t,x)
hold on
p1 = plot(t,up1,param_small{:});
plot(t,lo1,param_small{:});
p2 = plot(t,up2,plot_param{:});
plot(t,lo2,plot_param{:});
p3 = plot(t,up3,param_large{:});
plot(t,lo3,param_large{:})
hold off

legend([p1 p2 p3],'wl = 3','wl = 5','wl = 300')
xlim([0 0.04])
title('RMS Envelope')

        如图所示:

        可以通过对相隔可变数量采样点的局部最大值进行样条插值来生成峰值包络。样本太分散会平滑包络。 

np1 = 5;
[up1,lo1] = envelope(x,np1,'peak');
np2 = 50;
[up2,lo2] = envelope(x,np2,'peak');

plot(t,x)
hold on
p1 = plot(t,up1,param_small{:});
plot(t,lo1,param_small{:})
p2 = plot(t,up2,param_large{:});
plot(t,lo2,param_large{:})
hold off

legend([p1 p2],'np = 5','np = 50')
xlim([0 0.04])
title('Peak Envelope')

        如图所示:

        增大峰值分隔参数可以降低噪声引起的伪峰效应。向信号引入随机噪声。先使用包含 5 个样本的区间了解噪声对峰值包络的影响,然后用包含 25 个样本的区间重新生成峰值包络。 

rng default
q = x + randn(size(x))/10;
np1 = 5;
[up1,lo1] = envelope(q,np1,'peak');
np2 = 25;
[up2,lo2] = envelope(q,np2,'peak');

plot(t,q)
hold on
p1 = plot(t,up1,param_small{:});
plot(t,lo1,param_small{:})
p2 = plot(t,up2,param_large{:});
plot(t,lo2,param_large{:})
hold off

legend([p1 p2],'np = 5','np = 25')
xlim([0 0.04])
title('Peak Envelope')

        如图所示:

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Matlab包络提取算法是一种用于提取信号包络特征的算法。其主要思想是从信号提取出慢变化的包络部分,而滤除高频部分,以便更好地分析信号的整体趋势和周期性。下面我将详细介绍Matlab包络提取算法的基本原理和实现步骤。 Matlab包络提取算法的基本原理是通过对信号进行一系列的信号处理步骤来提取信号包络特征。其中最常用的方法之一是采用Hilbert变换。Hilbert变换是一种能够提取信号包络的常用方法,其本质是通过将原始信号与一个90°相位差的虚数信号相乘,实现对信号频谱的平移。通过对得到的信号进行低通滤波,就可以提取信号包络。 实现Matlab包络提取算法的步骤如下: 1. 将待处理的信号读入Matlab环境,并进行必要的预处理,例如去除噪声、归一化等。 2. 对信号进行Hilbert变换,得到复信号。 3. 取复信号的模值,得到信号包络曲线。 4. 对包络曲线进行低通滤波,滤除高频噪声。 5. 可选步骤:对滤波后的包络曲线进行平滑处理,以消除突变或震荡。 通过以上步骤,我们就可以得到信号包络曲线,从而更好地分析信号的整体特征和周期性变化。Matlab提供了丰富的信号处理工具和函数,可以方便地实现这些步骤。 总之,Matlab包络提取算法是一种常用的信号处理方法,通过Hilbert变换和低通滤波等步骤,可以有效地提取信号包络特征,为信号分析和处理提供更准确的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值