我的正弦信号被一些随机噪声扭曲。我想找出信号的下部包络线。我在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');
答案 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');