Question

Contexte

I possède une matrice comprenant une séquence de vecteurs de colonnes. Chaque vecteur colonne contient une série d'angles définis en degrés dans la gamme -180 à 180. Je souhaite ajouter du bruit blanc gaussien à chaque angle dans la séquence à tester un système par rapport à sa robustesse contre le bruit.

Étant donné que certains angles ne changent pas beaucoup et d'autres changent de manière significative sur la séquence, je veux ajouter du bruit à un niveau qui est proportionnelle à la quantité d'activité / changement. Par conséquent, j'ai choisi à partir d'un échantillon gaussien de moyenne nulle à l'amplitude définie par rapport à l'écart type des angles individuels (sous forme de rapport).

Code Mon Matlab pour le faire est donné ci-dessous:

function Y2 = addnoise2angles(Y1, ratio)

%# Random numbers sampled from Gaussian
N = randn(size(Y1));

%# Noise level is defined per angle as a ratio of their respective standard deviations
sigma = std(Y1, 0, 2);
N = N.*repmat(sigma, 1, size(N, 2));
N = N*ratio;

%# Apply noise to angles
Y2 = Y1+N;
Y2 = wrapTo180(Y2);

end

Questions

Est-ce la bonne approche pour tester la robustesse au bruit?

Si oui, quelle gamme de rapports serait raisonnable pour tester?

Dans le cas contraire, ce qui est faux à ce sujet, et quelle est la bonne approche?

Était-ce utile?

La solution

Si je comprends bien, chaque ligne est la mesure du même angle, et chaque colonne est une mesure unique de tous les angles. Qu'est-ce que vous voulez faire est d'ajouter un peu de bruit à l'ensemble des mesures, pour ensuite vérifier l'effet sur un processus ultérieur. Comment vous devrait ajouter le bruit dépend entièrement de ce genre de question que vous voulez répondre. Si vous pensez que chaque colonne ressemble à une mesure de tous les angles, votre idée d'estimer le bruit dans chaque mesure d'angle indépendamment, puis en ajoutant un bruit blanc supplémentaire, vous permettra de dire quelque chose sur la façon dont les effets du bruit par l'angle d'un processus ultérieur. En ce sens, je pense que vos travaux de mesure.

Une chose que je voudrais souligner est que la mesure de l'écart-type des angles autour d'un cercle est pas la même que la mesure d'échantillons sur la ligne réelle. Par exemple, si vous avez une mesure Whos valeur est de 180 + randn (0,1), c.-à-droite à la frontière entre +180 et -180, votre mesure de l'écart std va être beaucoup plus grande que 0,1 degré, depuis la plupart des échantillons sont très proches de +180 ou -180. Un moyen très facile de résoudre ce problème est d'estimer l'écart std deux fois, avec différents points d'emballage, et prendre l'estimation minimum. Par exemple.

sigma1 = std(Y1, 0, 2);
sigma2 = std(wrapTo180(Y1+90),0,2);
sigma = min(sigma1,sigma2);

Des estimations plus complexes pour la variance autour d'un anneau exist, par exemple à la recherche regardant la différence d'angle médian entre toutes les paires d'estimation dans un échantillon. Cette complexité supplémentaire pourrait ne pas être nécessaire pour votre application.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top