2

私はmatlabグラフを持っています。軌跡のようなもの。グラフにノイズを追加したい。正規分布ノイズを入れてみました。ランドを使用。例えば

x1=x+a*rand(size(x));

y についても同様です。

結果を以下に添付します。これは私が望むものではありません。これにより、散布図または完全にノイズの多いプロットが得られます。下図のとおりです。最初の行は私がしたもので、3 番目の行は私が望むものです。

ここに画像の説明を入力

異なるグラフ列は、異なる標準偏差 (a の値) を表します。

Q. 3 番目のタイプ (行) のプロットを取得するにはどうすればよいですか?

PS 最初の行は、plot(...,".",markersize,1); を使用した場合です。単純なベクトル プロットの 2 行目。

4

1 に答える 1

4

問題は、ノイズに特定の特性を持たせたいということです。曲線に沿って多くのサンプルがあり、それらを「接続」したままにしたいとします。かなり滑らかな結果が必要で、曲線を閉じたままにしたい。したがって、順番に:ランダムウォークノイズはポイントを接続したままにします。ローパス フィルター処理されたノイズは、曲線を滑らかに保ちます。そして、ノイズ エンドポイントを (スムーズに) ゼロに修正して、閉じた結果を確保します。以下は、16 種類のノイズ (4x4) を生成し、全体的なスケールとフィルター処理の全体量を変化させるコードです。データの「サンプル レート」と形状の全体的なスケールに基づいて、これらの選択の両方を調整する必要があります。

% Generate sample data
[x,y] = pol2cart(0:0.01:2*pi, 1);

% Pick a set of 4 noise scale, and noise filter values
scales = [.01 .05 .1 .5];
filterstrength = [.1 .5 .9 .98];

% Plot a 4x4 grid, picking a different type of noise for each one
for i=1:4
    for j=1:4
        scale = scales(i);
        f = filterstrength(j);

        % Generate noise for x and y, by filtering a std 1 gaussian random
        % walk
        nx = filter(scale*(1-f), [1 -f], cumsum(randn(size(x))));
        ny = filter(scale*(1-f), [1 -f], cumsum(randn(size(y))));

        % We want a closed polygon, so "detrend" the result so that
        % the last point is the same as the first point
        nx = nx - linspace(0,1,length(nx)).*(nx(end)-nx(1));
        ny = ny - linspace(0,1,length(ny)).*(ny(end)-ny(1));

        subplot(4,4,4*(i-1)+j);

        % Add the noise
        plot(x+nx,y+ny);
    end
end

その他の変更可能な点: 変形のスタイルに影響を与えるフィルター シェイプにはほぼ無限の選択肢があります。

于 2013-07-25T14:02:24.750 に答える