Je veux comparer deux signaux ou courbes.
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.
resampling
NelsonOrange
la source
la source
Réponses:
En bref:
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:
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.
la source
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.
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.
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.
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.
la source
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.
la source
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
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
la source