簡體   English   中英

如何找到正弦信號的下包絡?

[英]How to find lower envelope of a sinusoidal signal?

我有一個正弦信號,它會由於一些隨機噪聲而失真。 我想找出信號的下包絡線。 我已經在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');

我不確定您要尋找的是什么,但是我會照做的。 如果您否定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');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM