包絡線を求める関数はありますか?
24 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
MathWorks Support Team
il 25 Ott 2013
Modificato: MathWorks Support Team
il 23 Feb 2021
時間軸上の信号や、周波数軸上の信号線に対する包絡線を求めたいのですが、適切な方法があれば教えてください。
Risposta accettata
MathWorks Support Team
il 4 Ago 2020
Modificato: MathWorks Support Team
il 23 Feb 2021
包絡線を求める関数は Signal Processing Toolbox で R2015b より envelope関数として提供されています。
ご利用のバージョンが R2015a 以前の場合、または R2015b 以降で Signal Processing Toolbox をお持ちでない場合は、下記方法のご検討をお願いします。
方法.1: ローパスフィルタ
ディジタル通信で利用されるようなアップコンバートされたような信号に対し有効です。
プログラム例
Fs = 1000; % サンプリング周波数
t = 0:1/Fs:1; % 時間ベクトル
x = sin(2*pi*5*t) .* sin(2*pi*100*t); % 時間軸信号
F = fft(2*abs(x).^2);
f = Fs * [0:length(F)-1] / length(F);
F( f>10 & f< (Fs-10) ) = 0;
y = ifft(F);
plot(t,x,t,sqrt(y))
方法.2 : ヒルベルト変換
方法.1 同様に、ディジタル通信で利用されるようなアップコンバートされたような信号に対し有効です。
プログラム例
Fs = 1000; % サンプリング周波数
t = 0:1/Fs:1; % 時間ベクトル
x = sin(2*pi*5*t) .* sin(2*pi*100*t); % 時間軸信号
z = hilbert(x); % Hilbert 変換
plot(t,x,t,abs(z))
方法.3: findpeaks 関数を利用して周辺の値と比較して相対的に極大値となる信号点を検出する
Fs = 1000; % サンプリング周波数
t = 0:1/Fs:1; % 時間ベクトル
x = sin(2*pi*5*t) .* sin(2*pi*100*t); % 時間軸信号
[pks,ind] = findpeaks(x,'MINPEAKDISTANCE',3);
ind = [1 ind length(x)];
xi = 1 : length(x);
y = interp1(ind, x(ind), xi, 'cubic', 'extrap');
plot(t,x,t,y)
方法.4: 1サンプル前との差分を取得し、差分の符号が反転しているかどうかでピークと判定する
下記 MATLAB Central に方法3 を用いたサンプルプログラムが掲載されています。
0 Commenti
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Hilbert and Walsh-Hadamard Transforms in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!