データが正弦曲線であることがわかっている場合 (多数の複雑な指数関数として表すことができます)、Pisarkenko の調和分解を使用できます。http://en.wikipedia.org/wiki/Pisarenko_harmonic_decomposition
ただし、より多くのデータ ポイントにアクセスできる場合、私のアプローチでは引き続き DFT を使用します。
アップデート:
私はあなたのデータに Pisarenko の高調波分解 (PHD) を使用しました。信号が非常に短い (それぞれ 86 データポイントしかない) 場合でも、PHD アルゴリズムは、より多くのデータを利用できる場合、間違いなく可能性を秘めています。以下に含まれるのは、24 個の信号のうちの 2 つ (データの列 11 と 13) で、青色で示されています。赤色の正弦曲線は、PHD から推定された振幅/周波数値に対応しています。(位相シフトは不明であることに注意してください)

MATLAB (pisar.m) を使用して PHD を実行しました: http://www.mathworks.com/matlabcentral/fileexchange/74
% assume data is one single sine curve (in noise)
SIN_NUM = 1;
for DATA_COLUMN = 1:24
% obtain amplitude (A), and frequency (f = w/2*pi) estimate
[A f]=pisar(data(:,DATA_COLUMN),SIN_NUM);
% recreated signal from A, f estimate
t = 0:length(data(:,DATA_COLUMN))-1;
y = A*cos(2*pi*f*t);
% plot original/recreated signal
figure; plot(data(:,DATA_COLUMN)); hold on; plot(y,'r')
title({'data column ',num2str(DATA_COLUMN)});
disp(A)
disp(f)
end
その結果、
1.9727 % amp. for column 11
0.1323 % freq. for column 11
2.3231 % amp. for column 13
0.1641 % freq. for column 13
博士号の証明:
また、振幅と周波数の値を知っている別のテストを行い、ノイズを追加して、PHD がノイズの多い信号から適切に値を推定できるかどうかを確認しました。信号は、周波数がそれぞれ 50 Hz、120 Hz、振幅がそれぞれ 0.7、1.0 の 2 つの追加された正弦曲線で構成されていました。下の図では、赤の曲線がオリジナルで、青がノイズを追加したものです。(図はトリミングされています)

Fs = 1000; % Sampling frequency
T = 1/Fs; % Sample time
L = 1000; % Length of signal
t = (0:L-1)*T; % Time vector
% Sum of a 50 Hz sinusoid and a 120 Hz sinusoid
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
y = x + 0.4*randn(size(t)); % Sinusoids plus noise
figure;
plot(Fs*t(1:100),y(1:100)); hold on; plot(Fs*t(1:100),x(1:100),'r')
title('Signal Corrupted with Zero-Mean Random Noise (Blue), Original (Red)')
[A, f] = pisar(y',2);
disp(A)
disp(f/Fs)
PHD は、amp/freq 値を次のように推定しました。
0.7493 % amp wave 1 (actual 0.7)
0.9257 % amp wave 2 (actual 1.0)
58.5 % freq wave 1 (actual 50)
123.8 % freq wave 2 (actual 120)
かなりのノイズがあり、信号が構成されている波の数だけを知っているのは悪くありません.
@アレックスに返信:
ええ、それは素晴らしいアルゴリズムです。私は DSP の研究中にこれに出会い、非常にうまく機能すると思いましたが、ピサレンコの Harm.Dec. は任意の信号を N > 0 の正弦波としてモデル化し、N は最初から指定され、その値を使用してノイズを無視します。したがって、定義上、データがどのように正弦波で構成されているかを大まかに知っている場合にのみ役立ちます。N の値の手がかりがなく、1000 の異なる値に対してアルゴリズムを実行する必要がある場合は、別のアプローチが間違いなく推奨されます。とはいえ、N 個の振幅値と周波数値が返されるため、その後の評価は簡単です。
多重信号分類 (MUSIC) は、ピサレンコが中断したところから続く別のアルゴリズムです。http://en.wikipedia.org/wiki/Multiple_signal_classification