0

私は 2 つの信号を持っています。そのうちの 1 つは 500 Hz のサンプリング レートを持ち、もう 1 つは (ほぼ、正確ではありませんが) 115 Hz のサンプリング レートを持っています。500 Hz 信号のイベントを検出するには、115 Hz 信号をアップサンプリングする必要がありますが、データにドリフトがあるようです。これをより明確にするために、500 Hz 信号と 115 Hz でも簡単に検出できるイベントがありますが、500 Hz 信号の実際のイベントに対する (115 Hz の) マーカーの位置は、アップサンプリング後、信号全体で変化します。私のコードは次のようになります。

counter = 1;

for i = 1:length(time)
    position = round(time(i)*fs);
    if position ~= 0 && position <= size(data,1)
        convertedData(i,:) = data(position,:);
    elseif position > size(data,1)
        convertedData(i,:) = data(size(data,1),:);
    else
        convertedData(i,:) = data(1,:);        
    end
end

注: マーカーが 500 Hz 信号のイベントに対して常に同じ位置に配置されている限り、正確にいつマーカーが配置されるかは問題ではないため、ポイントを補間する必要はありません。上記のコードで、'time' は 500 Hz 信号と同じ要素数 (0 から信号の終わりまで) の配列、'fs' はマーカー信号のサンプリング周波数 (115 Hz 付近)、 'data' はマーカー信号です。

ご協力ありがとうございました!

4

1 に答える 1

2

MATLAB を使用する際の一般的な問題の 1 つは、数学、工学、DSP などで通常使用されるより自然な 0 ベースのインデックスではなく、すべてのベクトル、行列などで 1 ベースのインデックスが使用されることです。position次から変更する必要があります。

    position = round(time(i)*fs);

に:

    position = 1 + round(time(i)*fs);

時間と (1 ベースの) サンプル番号の間の正しい対応を取得します。

于 2013-07-23T12:51:20.043 に答える