信号数据的‘包络谱’提取 及Matlab实现代码

目录

1、使用 hilbert 函数提取包络。

 2、使用envelope函数直接生成信号包络并修改其计算方式。

        创建双边带幅值调制信号,以此信号作为讲解样本。载波频率为 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])

1、使用 hilbert 函数提取包络。

        包络是由 hilbert 计算的解析信号的幅值。绘制包络和原始信号。将 plot 函数的名称-值对组参数存储在元胞数组中,供以后使用。

分析信号的幅值捕获信号的缓慢变化特性,而相位包含高频信息。

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

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])

 2、使用envelope函数直接生成信号包络并修改其计算方式。

        可以调整用于求得分析包络的Hilbert滤波器的长度。需要注意的是,使用太小的滤波器长度会导致包络失真。

fl1=12;
%返回x信号的包络,上下幅值,只输入两个参数时可以用
[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],'f1=12','f2=30')
xlim([0 0.04])
title('Analytic Envelope')

 暂时先分享这两种常用的方法,后续抽空更新其他方法...

  • 10
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
包络熵(Envelope Spectrum Entropy,ESE)是一种用于信号分析的特征提取方法,常用于诊断机械故障等领域。以下是MATLAB代码实现: ```matlab function ESE = EnvelopeSpectrumEntropy(signal, Fs, fmin, fmax, N, M) % signal: 输入信号 % Fs: 采样频率 % fmin: 包络起始频率 % fmax: 包络终止频率 % N: FFT点数 % M: 重叠点数 % 包络熵计算步骤: % 1. 对信号进行分帧,每帧长度为N,重叠长度为M % 2. 对每一帧信号进行傅里叶变换 % 3. 计算包络,取出fmin ~ fmax范围内的幅值 % 4. 将包络幅值进行归一化处理 % 5. 计算包络熵 % 分帧 L = length(signal); frameNum = fix((L-N)/(N-M) + 1); frameSignal = zeros(frameNum, N); for i = 1:frameNum startIndex = (i-1)*(N-M) + 1; endIndex = startIndex + N - 1; frameSignal(i,:) = signal(startIndex:endIndex); end % 包络计算 ESE = zeros(frameNum, 1); for i = 1:frameNum frameFFT = fft(frameSignal(i,:)); frameFFT = frameFFT(1:N/2); frameFFT = abs(frameFFT) / N; f = Fs*(0:N/2-1)/N; index = find(f >= fmin & f <= fmax); envelopeSpectrum = frameFFT(index); envelopeSpectrum = envelopeSpectrum / max(envelopeSpectrum); % 归一化 ESE(i) = -sum(envelopeSpectrum.*log2(envelopeSpectrum)); % 包络熵计算 end end ``` 其中,`signal`是输入信号,`Fs`是采样频率,`fmin`和`fmax`是包络的起始频率和终止频率,`N`是FFT点数,`M`是重叠点数。函数返回结果为每帧信号包络熵。 使用示例: ```matlab load('bearing.mat'); % 载入示例信号 signal = bearing(1:10000); Fs = 12000; fmin = 100; fmax = 2000; N = 1024; M = 512; ESE = EnvelopeSpectrumEntropy(signal, Fs, fmin, fmax, N, M); ``` 其中,`bearing.mat`是一个轴承故障信号MATLAB数据文件,可以用来进行测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值