MATLAB: déballer fonction
Je suis dans une discussion avec quelqu'un de Mathworks re: le unwrap
fonction qui a un "bug" pour sauter tolérances autres que π, et aimerais obtenir des autres points de vue:
Description
Q = unwrap(P)
corrige le radian angles de phase dans un vecteur de P par l'ajout de multiples de ±2π quand absolue sauts entre deux éléments de P est supérieure ou égale à la valeur par défaut de sauter la tolérance de π radians. Si P est une matrice, déballer fonctionne columnwise. Si P est un tableau multidimensionnel, déballer fonctionne sur la première nonsingleton dimension.
Q = unwrap(P,tol)
utilise un saut de tolérance tol au lieu de la valeur par défaut, π.
Il y a deux interprétations possibles de la documentation:
-
Q = unwrap(P,tol)
corrige le radian angles de phase dans un vecteur de P par l'ajout de multiples de ±2π quand absolue sauts entre deux éléments de P est supérieure ou égale à tol radians. Si P est une matrice, déballer fonctionne columnwise. Si P est un tableau multidimensionnel, déballer fonctionne sur la première nonsingleton dimension.Exemple:
>> x = mod(0:20:200,100); unwrap(x, 50) ans = 0 20.0000 40.0000 60.0000 80.0000 81.6814 101.6814 121.6814 141.6814 161.6814 163.3628
-
Q = unwrap(P,tol)
corrige les éléments dans un vecteur de P par l'ajout de multiples de ±2*tol quand absolue sauts entre deux éléments de P est supérieure ou égale à tol. Si P est une matrice, déballer fonctionne columnwise. Si P est un tableau multidimensionnel, déballer fonctionne sur la première nonsingleton dimension.Exemple:
>> x = mod(0:20:200,100); unwrap(x, 50) ans = 0 20 40 60 80 100 120 140 160 180 200
Le comportement réel de unwrap()
dans MATLAB (au moins jusqu'à R2010a) est #1. Mon interprétation de unwrap()
est que c'est censé être le numéro 2, et donc il y a un bug dans le comportement. Si unwrap()
le comportement correspondait #2, puis enlevez pourrait être utilisé comme un inverse pour la mod pour variant lentement entrées, c'est à dire unwrap(mod(x,T),T/2) = x
pour les vecteurs x, où les éléments successifs varient de moins de tol=T/2.
Noter que cette 2ème interprétation est plus général que les angles, et peut déballer quoi que ce soit avec un wraparound période T. (que ce soit un défaut de T=2π pour radians, 360 degrés, 256 pour les 8-bits, 65536 pour les 16-bits des nombres, etc.)
Donc ma question est:
Sont là utilisations possibles pour le problème n ° 1? Une interprétation qui fait plus de sens?
OriginalL'auteur Jason S | 2010-07-07
Vous devez vous connecter pour publier un commentaire.
Interprétation n ° 1 est la façon dont j'ai lu la documentation et je pense que cela a du sens. Je ne pouvais imaginer de l'utiliser pour la reconstruction de la distance à partir d'une roue de l'encodeur. Pour ralentir la vitesse de la tolérance n'a pas d'importance, mais pour les grandes vitesses (assez haut pour violer le théorème de l'échantillonnage, c'est à dire que vous avez moins de deux échantillons par la rotation de la roue), la tolérance vous aide à obtenir le droit de reconstruction si vous connaissez le sens.
Une autre raison #1 a plus de sens, c'est probablement que l'ordinaire déballer peut être étendu facilement à un générique et, par conséquent, il n'y a pas besoin direct pour la période à un paramètre.
Ou tout simplement faire votre propre fonction:
OriginalL'auteur groovingandi
Behavor #1 logique, car l'entrée est supposé être radians, pas degrés. L'ajustement ajoute pi/2 si vous êtes au-dessus de sauter de la tolérance, c'est très bien.
Ce serait bien si déballer avait une fonction qui lui a permis de travailler sur tout type de série, et non pas simplement sur les angles en radian.
Le saut de la tolérance n'est pas suffisant pour savoir si vous avez une série en radian, ou de degré, ou de toute autre nature, donc il faudrait une entrée supplémentaire.
Je suppose que vous pourriez avoir deux façons pour l'utilisation de la fonction travaux. Soit c'est le propre des radians (comme il est dit dans la documentation), et vous pouvez choisir votre saut tolérance librement. Ou vous fixer saut de la tolérance à l'1/2 enveloppante, et que vous utilisez cette entrée pour tout type de plage.
J'avais vote pour le second, mais c'est juste mon point de vue sur elle. J'ai peut-finir d'écrire ma propre fonction (il est assez trivial) et ne dépend pas de Mathworks plus correctement fonctionnement unwrap() de la mise en œuvre.
OriginalL'auteur Jonas
Je l'avais toujours supposé que le second comportement est le réel, mais jamais testé. Une lecture littérale du fichier d'aide n'indiquent comportement #1. Mais ce n'est pas ce que l'on voudrait faire. Comme simple exemple, envisager de faire un déballage en degrés
évidemment, vous voulez y = 0:30:720, mais au lieu de cela, vous obtenez ...
ce qui est un tort (y ne correspond plus à le même angle que x, qui est le point de déballer)
Quelqu'un peut-il donner un exemple, lorsque vous souhaitez un comportement #1 (le comportement actuel?)
OriginalL'auteur Marc
Il fonctionne en radians, mais pas en degrés.
OriginalL'auteur Konogan