如何找到正弦信号的下包络?

时间:2017-08-04 16:24:51

标签: matlab signal-processing

我的正弦信号被一些随机噪声扭曲。我想找出信号的下部包络线。我在MATLAB中使用abs(Hilbert(y(t)))来找出一个信封,但它只给了我上限。有没有简单的方法来找到信号的下包络?

我还尝试使用MATLAB内置的envelope功能找出较低的信封,但它不起作用。

y(t)由四个信号组成 我要找出信号的上下信封。

y(t) = A1 sin(2πf1t) + A2 sin(2πf2t) + A3 sin(2πf3t) + A4 rand()

clc
clear all
A1 = 5;
A2 = 10;
A3 = 15;
A4 = 10;
f1 = 5*10^6;
f2 = 10*10^6;
f3 = 20*10^6;
t=1:1:100
y =A1*sin(2*pi*f1*t)+A2*sin(2*pi*f2*t)+A3*sin(2*pi*f3*t)+A4*rand(1,100);
plot(t,y);
%% for upper envelope and lower envelope
upper_envelope = abs(hilbert(y));
hold on
plot(t,upper_envelope,'-r');
lower_envelope = -abs(hilbert(y));
hold on
plot(t,lower_envelope,'-g');

1 个答案:

答案 0 :(得分:1)

我不确定你在寻找什么,但我会对它进行一次拍摄。如果您否定y,那么您最终会进入否定域,这会在使用abs时导致问题。为了避免这种情况,我们可以否定y然后添加一些常量以使其再次为正。我们将常数取为某个上界,在这种情况下是最大值的两倍。我们翻转并转换信号使其为正,然后计算翻转信号的上包络。接下来,我们反转平移并再次翻转以返回原始信号坐标。

plot(t,y);
%% for upper envelope and lower envelope
upper_envelope = abs(hilbert(y));
ub = max(upper_envelope)*2;
hold on
plot(t,upper_envelope,'-r');
lower_envelope = ub-abs(hilbert(ub-y));
hold on
plot(t,lower_envelope,'-g');