Savitzky Golayフィルターを使用して、離散的にサンプリングされた1D信号の(サンプル間の)極大値を見つけるにはどうすればよいですか?
私は地震信号y(i)を持っています: ここで私は1つの最大値を見つけました:i = 152.54、y = 222.29手動で、それを赤でプロットしました。 すべての最大値を自動的に検索したい。 Savitzky Golay Filter(SGF)を使用して、信号とその導関数の両方の平滑化された推定値を見つけることができ、SGFの利点の1つは、他のフィルターよりも優れた最小値と最大値を維持できることです。これは私の使用に最適に聞こえます。 SGF係数を生成するMatlabスクリプトを見つけました。 これを使用して、導関数の4次のSGF係数を見つけました。小さなMatlabスクリプトをコーディングしました 微分係数の4次SGF係数で信号をたたみ込むことにより、信号の微分係数を求めます 導関数が符号を変更するサンプルのペア(i、i + 1)を見つける iとi + 1の間の線形補間によって導関数のゼロクロッシングを見つけます 脚本: function [maxX,maxY] = findLocalMax(y) % Kernel for 4th order Savitzky-Golay filter for finding derivative: d4 = [0.0724 -0.1195 -0.1625 -0.1061 0 0.1061 0.1625 0.1195 -0.0724]; dy = conv(y,d4,'same'); % derivative …