Retirer inconnue DC Offset à partir d'un non-périodique en temps discret du signal
Est-il un processus qui permet de déterminer /supprimer un inconnu DC offset à partir d'un non-périodique en temps discret du signal?
Le signal en question a une fréquence de 25Hz et a des harmoniques d'intérêt entre 0,25 et 3 Hz.
J'ai essayé d'utiliser des filtres passe-haut des résultats mitigés, j'ai d'abord utilisé un 10 de l'ordre guassian avec le Fc = 0Hz, cela fait un bon travail de la suppression du décalage, mais il sévèrement atténué l'AC aswell bien qu'il ne la quittent la forme d'un signal intact, ensuite, j'ai utilisé un 168e ordre equilripple avec une bande à 0Hz et de la bande passante à 0,25 Hz, le décalage de phase a été trop sévère et la forme d'un signal trop déformé la distorsion pourrait probablement être réduite si le passe-bande a été ramené à 0,1 Hz, mais ce serait juste augmenter encore plus le décalage de phase dont j'ai besoin pour garder au minimum.
Avant et après l'application x - LPF(x), tel que suggéré par Paul R
OriginalL'auteur volting | 2011-08-09
Vous devez vous connecter pour publier un commentaire.
Je recommande d'utiliser un filtre notch à la DC et à l'aide de
filtfilt
à faire zéro de phase.Le plus proche de la deuxième valeur de
a
arrive à -1 la plus étroite de votre cran sera.Utilisation
freqz(xcorr(b,b),xcorr(a,a))
pour vérifier la réponse en fréquence d'un filtre. Lexcorr
s sont Z-transformer homologues defiltfilt
. Essayez différentes valeurs dea(2)
pour voir comment wide/narrow votre cran obtient.filtfilt
ne donne pas de phase linéaire, mais la phase zéro, ce qui signifie que le retard introduit par le filtre est "compensée en arrière", de sorte que la sortie n'est pas en retard (par rapport à l'entrée). Phase linéaire, c'est autre chose.Je corrige la position des mains.
OriginalL'auteur Phonon
Un décalage DC signifie qu'une certaine valeur de la constante a été ajouté au signal (le nom provient de l'ajout d'un contrôleur de tension analogique signal AC). Si la composante de courant continu est vraiment constant (et ne change pas vraiment lentement), alors vous n'avez pas à concevoir certaines d'ordre élevé (et potentiellement instable) filtres passe-haut, vous pouvez simplement soustraire la moyenne de votre signal à partir du signal - qui est, bien sûr, un filtre passe-haut (la moyenne est un type d'un passe-bas, et de '1 moins la moyenne" est de haute apss) --- mais très simple.
Si, d'autre part, vous avez une raison de croire que la composante de courant continu n'est pas vraiment un DC, mais plutôt une prise secteur avec de très basse fréquence, alors vous feriez mieux de la moyenne des segments de signal et n'est pas le signal dans son ensemble, qui est le même que l'aide d'un filtre passe-bas avec de la réponse impulsionnelle qui est plus court que la longueur du signal. Dans ce cas, vous devez faire des hypothèses sur le "DC".
Si vous faites la moyenne sur le nombre de cycles du signal de basse fréquence, de sa contribution à la moyenne est de zéro, puisque les échantillons positifs et négatifs s'annulent, donc pas de distorsion doit avoir lieu. Pouvez-vous envoyer un signal comme un exemple? Elle permettrait de répondre à votre question.
En fonction du décalage des signaux de basse fréquence ampleur ne peut jamais être négatif et son en aucune façon périodique de sa contribution ne peut pas être zéro. Iv ajout d'un graphique à ma question, donc vous pouvez avoir une idée de la nature du signal.
Non, il ne dépend pas de la tension d'offset. Par exemple, si votre CA est [1,-1,1,-1] et le DC [5,5,5,5], le signal de somme est [6,4,6,4], la moyenne du signal est [5,5,5,5] et si vous soustrayez vous obtenez l'AC. Il détient depuis la moyenne est linéaire, donc la moyenne de la somme est la somme des moyennes --- le DC moyenne est juste le décalage, le CA moyen est de 0.
Le DC terme est exactement la moyenne de la trame de signal, pas environ. Si vous prenez la définition
Xk = 1/N * sum over n[Xn * exp(i*n*Wk)]
, et plug-in pourk=0
la fréquenceWk=0
, vous obtenez la moyenne.OriginalL'auteur Itamar Katz
Plutôt que de mettre en place un filtre passe-haut directement (qui peut être assez difficile pour les très basses fréquences - vous retrouver avec un grand nombre de coefficients et de divers problèmes de stabilité et d'ondulation dans la bande passante, etc), vous devriez plutôt envisager la mise en œuvre d'un filtre passe-bas qui vous donnera une estimation de la tension d'offset de la valeur, puis soustrayez cette filtré décalage à partir de votre signal, c'est à dire au lieu de:
ce faire:
Le filtre passe-bas peut probablement juste être un simple filtre avec un relativement petit nombre de termes. Le gros avantage de cette application c'est que votre fréquence plus élevée des composants ne devraient pas avoir d'artéfacts indésirables en raison de phase, l'ondulation, etc, étant donné tout ce que vous faites est un quasi stationnaire DC de la valeur à partir des échantillons.
Le seul désavantage est que si le décalage DC est grande vous pouvez avoir un temps assez long initiale de décantation de temps avant l'estimation de la tension d'offset est exacte (mais c'est aussi vrai pour n'importe quelle autre application comme un direct du filtre passe-haut bien sûr). Si vous avez des a priori connaissance de ce que la valeur de décalage est susceptible d'être (par exemple, si elle ne change pas beaucoup d'une exécution, et vous connaissez la valeur de l'exécution précédente), alors vous pouvez l'utiliser pour optimiser le temps de décantation, par l'initialisation de la LPF de l'état des variables à une valeur appropriée au lieu de 0.
Pouvez-vous tracer la sortie de la LPF en plus de l'entrée et du signal de sortie ? Il serait intéressant de voir quand et comment il est variable. Je pense toujours que l'idée de base est bonne mais le filtre droit peut bien être difficile, je serais enclin à essayer de concevoir à la main.
J'ai ajouté les parcelles. Comme vous pouvez le voir la LPF capte plus de signal de basse fréquence que je ne veux pas de filtre.
OK - le FILTRE passe-bas de toute évidence n'a pas le droit de réponse - si vous avez plus ou moins constante de la composante continue ensuite le FILTRE passe-bas de sortie devraient converger lentement à cette valeur et ensuite assez bien y rester.
OriginalL'auteur Paul R
Comme d'autres l'ont dit, pour supprimer un décalage DC, vous pouvez simplement soustraire la moyenne. Votre signal n'a pas besoin d'être périodique, mais il doit être assez long pour obtenir une bonne estimation de la composante DC.
Si vous voulez aller avec une approche de filtrage, vous pouvez éliminer la grave distorsion due à la phase de latence en utilisant
filtfilt
. Cette fonction filtres de votre timeseries une fois à l'avant de la direction, puis une fois dans le sens inverse, de sorte que les distorsions de phase annuler.OriginalL'auteur nibot
Vous pouvez concevoir un symétrique filtre FIR comme le filtre passe-bas que les estimations de la DC, puis soustraire la sortie de votre signal d'entrée. Ce filtre a groupe constant de retard.
OriginalL'auteur Jens