quoi de mieux: le sous-échantillonnage?

13

Je veux comparer deux signaux ou courbes. une courbe échantillonnée à 30 Hz un échantillonneur de courbes à 2000 Hz

Malheureusement, ils ont des taux d'échantillonnage différents. Le premier est échantillonné à 30 Hz, le second à 2000 Hz. Matlab a la fonction «rééchantillonner» et je pensais que cela faciliterait la comparaison.

Ma question est: est-il plus sage de sous-échantillonner la deuxième courbe ou de suréchantillonner la première?

Edit: j'ai fait ce qu'on m'a dit. Dans l'image de gauche sont les courbes d'origine. Les courbes de droite sont rééchantillonnées. En haut à droite est suréchantillonné, en bas à droite est souséchantillonné.

Je sais que les courbes sont de longueur différente, une fois rééchantillonnées. Cependant, le deuxième signal sera rogné à la longueur du premier signal. Comparaison

NelsonOrange
la source
1
J'ai voté pour votre question. Que pensez-vous est plus sage.
si la très haute précision n'a pas d'importance (dans ce cas, je pense que ce n'est pas le cas), vous pouvez sous-échantillonner, surtout si cela accélère le processus et que vous appréciez votre temps au travail
user1306322
@Stanley Pawlukiewicz, clairement, je perds tous les petits pics par sous-échantillonnage. Le suréchantillonnage pourrait donc être la voie à suivre. Là encore, je n'ai pas besoin des petits pics. J'ai même pensé à lisser le deuxième signal. Donc, dans mon cas, cela n'a peut-être pas vraiment d'importance si j'échantillonne vers le haut ou vers le bas.
NelsonOrange
Plus de commentaires et de réponses nécessaires?
Laurent Duval

Réponses:

18

En bref:

  • Suréchantillonnage : ne perd / ne doit pas perdre d'informations (si cela est fait à bon escient), alors plus sûr ,
  • Sous - échantillonnage : peut perdre des informations (si cela n'est pas fait à bon escient), mais plus efficace en termes de calcul .

Donc, si vous comparez des données à des taux différents, et dans une phase d'évaluation lorsque l'on essaie de définir comment la comparaison doit être effectuée (quelles fonctionnalités sont comparées, avec quelle métrique, avec quels éléments externes, comme la précision, l'efficacité, la robustesse, etc.), un une première approche très basique serait de suréchantillonner les deux signaux par un facteur entier pour concilier leur échantillonnage . Ici, c'est tout à fait OK, 6000 Hz pourrait fonctionner pour les deux.

Les raisons pourraient être, pour la pratique DSP:

  • avec le suréchantillonnage entier, vous n'êtes pas obligé d'utiliser des techniques de filtrage délicates, et une simple interpolation linéaire est facile. N'oubliez pas cependant que le suréchantillonnage ajoute des informations.
  • avec des signaux ayant la même échelle, vous pouvez extraire des entités et les comparer: bruit, variabilité, pentes, dérivées, etc. Vous pouvez appliquer la correction d'échelle / décalage correcte (elles n'ont pas la même amplitude), utiliser linéaire ou non transformations linéaires (Fourier, etc.) pour vérifier s'il existe des similitudes dans différents domaines
  • à ce stade, vous devriez être en mesure de qualifier et de quantifier les fonctionnalités / métriques nécessaires pour construire votre algorithme. Et vous pouvez estimer ce que vous pouvez perdre des deux données. Par exemple, vous pouvez créer votre algorithme et voir comment il est robuste pour signaler le sous-échantillonnage et jusqu'où vous pouvez aller. Ici, votre algorithme commence à être plus efficace.

Une fois que vous y avez consacré du temps, vous êtes plus prêt à recommencer à zéro et à décider si vous devez sous-échantillonner ou non, avec quelle méthode, etc. pour atteindre à la fois la sécurité et l'efficacité .

Pour fournir des alternatives, si vous décidez de comparer des données sur le domaine de Fourier, vous pouvez facilement diffuser deux signaux de longueur et de taux d'échantillonnage différents sur le même nombre de coefficients de Fourier, facilitant ainsi une comparaison dans le domaine fréquentiel.

Laurent Duval
la source
14
Le sous-échantillonnage perdra presque toujours des informations, même si cela n'est pas fait de manière imprudente. Cependant, perdre des informations pourrait être une
bonne
@leftaroundabout Dans quels cas extrêmes le sous-échantillonnage ne peut-il pas perdre des informations?
Willem
2
@leftaroundabout Je ne suis pas d'accord. La perte d'informations est toujours pire que la conservation. La seule chose sage est de savoir quelles informations jeter pour une meilleure représentation du signal, pas la perte d'informations elle-même.
AlexTP
5
@Willem: Dans un cas extrêmement évident, un signal DC peut être sous-échantillonné en un seul échantillon. En général, tout signal sans composante au-dessus de la (nouvelle) limite de Nyquist peut être sous-échantillonné en toute sécurité.
MSalters
1
On peut faire valoir qu'aucune information n'est perdue d'un signal DC à un signal à 1 échantillon, car vous pouvez reconvertir en un signal identique à celui d'origine à partir de 1 échantillon. On peut faire valoir que des informations sont perdues parce que si vous donnez le signal de l'échantillon 1 à une personne sans plus d'informations et demandez "Est-ce que cela représente un signal DC?" la réponse sera "Je ne sais pas, pas assez d'informations avec un seul échantillon".
SE enfreint les droits d'auteur
7

Si vous utilisez une fonction comme plot (x, y), la façon la plus simple de les afficher sur le même graphique consiste simplement à ne pas rééchantillonner aucune d'entre elles, mais simplement à remplir chaque vecteur x avec les valeurs appropriées pour chaque signal, de sorte que les deux apparaissent où vous voulez sur l'écran.

Vous pouvez également configurer le tracé pour avoir deux axes x différents (un pour chaque courbe) avec des étiquettes et des légendes différentes si vous le souhaitez.

Maintenant, à propos du rééchantillonnage. Je vais utiliser Fs pour la fréquence d'échantillonnage.

Un signal échantillonné ne peut pas contenir de composantes de fréquence supérieures à Fs / 2. Il est illimité.

De plus, un signal qui ne contient que des composantes de fréquence jusqu'à une fréquence F peut être représenté avec précision à une fréquence d'échantillonnage de 2F.

Notez que cette représentation "précise" est mathématique et non visuelle. Pour une bonne représentation visuelle, avoir 5 à 10 échantillons par période (donc aucune composante de fréquence notable au-dessus de Fs / 10 environ) aide vraiment le cerveau à relier les points. Voir cette figure: même signal, la courbe inférieure a un taux d'échantillonnage plus faible, il n'y a pas de perte d'information car la fréquence est inférieure à Fs / 2 mais elle ressemble toujours à de la merde.

entrez la description de l'image ici

C'est exactement le même signal. Si vous suréchantillonnez (reconstruisez) celui du bas avec un filtre sinc, vous obtiendrez celui du haut.

Décimation (sous-échantillonnage) repliera toutes les composantes de fréquence plus haut que le nouveau Fs / 2 dans le signal. C'est pourquoi nous mettons généralement un filtre passe-bas raide avant le décimateur. Par exemple, pour sous-échantillonner de Fs = 2000 Hz à Fs = 30 Hz, nous appliquerions d'abord un passe-bas d'ordre élevé avec une coupure un peu inférieure à 15 Hz et ensuite décimer.

Cependant, ce filtre introduira des problèmes de réponse transitoire, il aura un décalage de phase à certaines fréquences, et il peut changer l'aspect visuel de votre signal, ce que vous ne voulez pas faire si l'idée est de les comparer visuellement. La règle ci-dessus s'applique, ne sous-échantillonnez pas trop, gardez toujours Fs 5-10 fois la fréquence d'intérêt la plus élevée si vous voulez que la forme du signal signifie quelque chose. C'est pourquoi une portée de 200 MHz doit échantillonner à 1-2 Gsps.

Ma question est: est-il plus sage de sous-échantillonner la deuxième courbe ou de suréchantillonner la première?

Comme indiqué ci-dessus, le plus sage est de ne pas du tout jouer avec les données et de simplement les présenter chacune avec leur propre axe x sur le même graphique.

La conversion du taux d'échantillonnage serait nécessaire dans certains cas. Par exemple, pour réduire le nombre de points, réduire l'utilisation de la mémoire, la rendre plus rapide ... ou pour que les deux signaux utilisent les mêmes coordonnées "x" pour effectuer des calculs sur eux.

Dans ce cas, vous pouvez également utiliser un F intermédiaire, sous-échantillonner le signal avec des F élevés et suréchantillonner celui avec des F faibles. Ou simplement sous-échantillonner celui avec des F élevés.

Faites attention aux critères de Nyquist, et ne choisissez pas une fréquence d'échantillonnage trop faible ou vous perdrez la fidélité de la forme d'onde sur le signal Fs élevé, vous obtiendrez des changements de phase en raison du filtre passe-bas, etc. Ou si vous connaissez le contenu haute fréquence est négligeable, vous pouvez faire un choix éclairé. je

Si vous utilisez une interpolation linéaire pour faire correspondre les coordonnées "x", n'oubliez pas qu'il a également besoin d'un Fs assez élevé. L'interpolation fonctionnerait sur le signal du haut dans l'intrigue ci-dessus, elle ne fonctionnerait pas sur celui du bas. Idem si vous êtes intéressé par min, max et autres.

Et ... notez que le suréchantillonnage / suréchantillonnage perturbera également la réponse transitoire, au moins visuellement. Par exemple, si vous suréchantillonnez une étape, vous obtiendrez beaucoup de sonneries en raison de la réponse impulsionnelle du filtre sinc. C'est parce que vous obtenez un signal à bande limitée, et une belle étape avec des coins carrés a en fait une bande passante infinie.

Je vais prendre une onde carrée comme exemple. Pensez au signal échantillonné d'origine: 0 0 0 1 1 1 0 0 0 1 1 1 ... Votre cerveau voit une onde carrée.

Mais la réalité est que vous devez représenter chaque échantillon comme un point, et il n'y a rien entre les points. C'est tout l'intérêt de l'échantillonnage. Il n'y a rien entre les échantillons. Donc, quand cette onde carrée a été suréchantillonnée en utilisant une interpolation sincère ... ça a l'air drôle.

entrez la description de l'image ici

Il s'agit simplement de la représentation visuelle d'une onde carrée à bande limitée. Les tremblements existent un peu ... ou peut-être pas. Il n'y a aucun moyen de savoir s'ils étaient là dans le signal d'origine ou non. Dans ce cas, la solution aurait été d'acquérir l'onde carrée d'origine avec un taux d'échantillonnage plus élevé pour obtenir une meilleure résolution sur le bord, idéalement, vous voulez plusieurs échantillons sur votre bord pour qu'il ne ressemble plus à une bande passante infinie. Ensuite, lors du suréchantillonnage d'un tel signal, le résultat n'aura pas d'artefacts visuels.

En tous cas. Comme vous pouvez le voir ... il suffit de jouer avec les axes x. C'est beaucoup plus simple.

peufeu
la source
4

Le sous-échantillonnage perd des informations. Le suréchantillonnage est sans perte lorsque le facteur est un entier (vous vous souvenez également du facteur), mais certaines informations sont perdues lorsque le facteur n'est pas un entier. Le suréchantillonnage pourrait théoriquement perdre plus d'informations que le sous-échantillonnage, pour des facteurs de rééchantillonnage très spécifiques.

Lequel devriez-vous utiliser? Cela dépend du niveau de certitude dont vous avez besoin.

Si vous n'avez pas besoin de certitude mathématique et souhaitez simplement une heuristique, le sous- échantillonnage est plus rapide et le suréchantillonnage est plus précis .

Si vous avez besoin de limiter la précision de votre calcul: c'est possible mais je ne peux pas vous aider.

Willem
la source
+1, car vous avez réussi à regrouper quelques informations importantes dans une réponse très concise.
dsp_user
3

Cela dépend de ce que vous entendez par «comparer» et «plus sage». La chose sage, ce qui n'est pas difficile dans Matlab, est de faire les deux choses et de décider par vous-même.

En fait, si vous modifiez votre question avec les résultats des deux approches, je voterais pour votre question et plus de gens la trouveraient intéressante, et aideraient probablement à trouver "comparer"


la source
1

Je voudrais signaler un problème qui survient lors d'un suréchantillonnage qui pourrait être crucial dans cette opération. Lorsqu'un signal est suréchantillonné et que les points d'extrémité de données sont loin de valeurs nulles, alors l' effet de front se produit. Dans les expériences pratiques, cet effet indésirable devrait être éliminé. Je partage avec cette communauté un court essai avec des images et du code que j'ai écrit à ce sujet qui pourrait aider à comprendre.

https://medium.com/@davidpinyol91/edge-effects-when-resampling-a-signal-on-matlab-how-to-solve-it-cc6458ab1306

Dacapi
la source