0

編集:次のコードに基づいてプロットを作成したいと思います:

function one(varargin)
    thresh = 200;
    setenv GNUTERM 'x11';
    x = [0.05:0.05:10];
    x = transpose(x);
    y = rand(200, 1); 
    y(y <= 0.9) = 0.9;
    plot(x, y); 
    xlabel('time');
    ylabel('values above thresh');
end

... 問題は、ただのびくびくしたいということです。ある値から次の値へとスムーズに波打つ (ベジエ曲線のように) のを見るとよいでしょう。これは可能ですか?これに外部ライブラリが必要かどうかはわかりませんが、必要に応じてその方法で進んでいきます。結果の (滑らかな) プロットを任意のデータ解像度でエクスポートすると便利です。

4

1 に答える 1

1

私がこれを正しく読んでいれば、この情報をダウンサンプリングしたいだけです。これは、オクターブでの非常に簡単で効率的なタスクです。

元のデータセットとして xi,yi を指定すると、およそ 10 倍のダウンサンプリングを実行したいとします。

新しい x ベクトル xp を生成します (xi が単調増加すると仮定します)。

xp = linspace(xi(1),xi(end),round(length(xi)/10)); 

次に、スプ​​ライン法で補間を使用します。

yp = interp1(xi,yi,xp,'spline');

ただし、これは補間されたデータを平滑化するだけです。

私はあなたの質問の一部を実際にフォローしていませんでした.重要な部分をどのように定義していますか?

別の方法として、たとえば Savitsky-Golay フィルターを使用して、ダウンサンプリングする前にデータをフィルター処理することもできます。ここで面白いのは、いくつかのパラメーターを使用できることです。デフォルトの場合:

yp = sgolayfilt (yi);

このフィルターは、次数 p および長さ n の平滑化多項式を使用してデータを処理します。p と n を指定した場合は、何が最適かを試すことができます。

yp = sgolayfilt (yi, p, n);
于 2013-01-20T22:12:52.783 に答える