私は信号からfft関数の大きさをプロットする関数を持っています。MATLAB:データ反復からピークを見つける
繰り返しごとに、2000未満の2つのピークのx値を求めたいと思います。これは、関数findpeaks
を使用して比較的単純だと思っていましたが、正しい出力を得られませんでした。
私は出力に含まをプロットするつもりはないが、ちょうど説明のためにここにプロットです。ここに私のコードのビットが
:私だけ
(ピークの最初のセット)2000、以下のデータのピークを知るために一回の反復の例をしたいです。 Bは、解析が必要なデータのすべてのセグメントの開始インデックスを含むベクトルです。function [number] = fourir_(data,sampling_rate)
%Finds the approximate starting index of every peak segment
%B is a vector containing the indeces
[A,B] = findpeaks(double(abs(data) > 0.6), 'MinPeakDistance', 2500);
Fs = sampling_rate;
t = 0:1/Fs:0.25;
C = zeros(size(B),2)
for i = 1:numel(B)
new_data = data(B(i):(B(i)+200))
y = double(new_data)/max(abs(new_data));
n = length(y);
p = abs(fft(y));
f = (0:n-1)*(Fs/n);
end
例データ:https://www.dropbox.com/s/zxypn3axoqwo2g0/signal%20%281%29.mat?dl=0は
「正しい出力を与えられていない」という意味の情報をさらに表示できますか?あなたは何を得て、何を期待しましたか? 'findpeaks'は低レベルノイズからピークに達する可能性があります。これは、あなたのサンプルシグナルから、私が最初にフィルタしたいと思うでしょう。たとえば、 'f(x> 2000)= 0;'は2000以下のピークを取得し、 'f(f <10)= 0;'は主要なピークのみを取得します。それで 'findpeaks(f)'は必要に応じて動作するでしょうか?そうでない場合は、Bのためのダミーデータを投稿して、人々が手助けできるようにしてください。 –
@EdSmith私が知っている限り、 '' findpeaks''''はn * 1形式のデータしか取り込みません。この場合、データを変換して4桁のプロットを得ました。したがって、fの値だけから '' 'findpeaks'''''を取ると、私は明らかに私が望む値を得られません。これまでデータと全プログラムで質問を編集しました。次元数(反復回数)* 2の行列が必要です。列1では最初のピークが、列2では2番目のピークが必要です。 –
申し訳ありませんが、あなたの変数に基づいて 'p'を意味しました。有用なピークを得るための答えを追加しますが、私は完全に理解しているかどうかはわかりません。 –