Décaler un signal par fraction d'un échantillon

9

J'ai un signal avec un temps d'échantillonnage de 0,5 micro seconde et je voudrais décaler ce signal d'une fraction du temps d'échantillonnage, disons de 3 nano secondes.

J'ai lu quelques ressources en ligne sur le filtrage des retards fractionnaires et sur l'utilisation de la FFT et de l'IFFT pour effectuer un tel retard. Quelqu'un peut-il m'indiquer une théorie à ce sujet ou me donner une idée sur la façon de le mettre en œuvre.

Pour le décalage régulier du signal pour les échantillons entiers, je l'ai mis en œuvre en décalant le signal du nombre d'échantillons requis et en ajoutant des zéros au début. Cette approche est-elle correcte?

smyslov
la source

Réponses:

13

Il existe un bon article de synthèse paru en 1996 dans le magazine IEEE Signal Processing: Splitting the unit delay: tools for fractional delay filter design . La bonne chose à ce sujet est qu'il existe également un ensemble de fichiers Matlab associés . Ces routines vous permettront de concevoir un tel système.

En ce qui concerne le décalage d'un nombre entier d'échantillons, ce que vous avez fait est évidemment correct.

Matt L.
la source
Je n'ai fait qu'effleurer le papier, donc je ne sais pas si c'est explicitement là, mais le retard fractionnaire est lié à la dérivée fractionnaire, qui généralise la dérivée n-ème à un ordre arbitraire.
soultrane
2

En plus de faire des solutions de type fft, vous pouvez également utiliser l'interpolation, le type spécifique d'interpolation approprié serait bien sûr basé sur vos besoins! L'interpolation linéaire a bien fonctionné pour moi dans le passé avec des effets de bride, mais votre kilométrage peut varier.

L'interpolation de Lagrange pourrait également valoir la peine de se pencher sur btw, si l'interpolation linéaire n'est pas assez bonne. http://blog.demofox.org/2015/07/08/lagrange-interpolation/

Alan Wolfe
la source
Hermite est peut-être meilleur que Lagrange, mais si vous avez accès à MATLAB (ou à un programme de conception de filtres FIR), vous pouvez concevoir vous-même un interpolateur "banque de filtres polyphasés" dans lequel vous avez des ensembles de coefficients pour une variété de différents, uniformément espacés, retards fractionnaires. choisissez les deux retards fractionnaires discrets les plus proches de votre retard fractionnaire donné et interpolez-les linéairement entre eux.
robert bristow-johnson
0

Cela peut être fait en utilisant la fonction 'delayseq' dans MATLAB. Cette fonction peut décaler le signal dans des échantillons fractionnaires. Vous pouvez soit écrire le nombre d'échantillons que vous souhaitez décaler, soit le délai souhaité. Mais la chose importante à noter est que le signal retardé a la même longueur que celui du signal d'origine, donc si vous ne voulez pas tronquer le signal, utilisez d'abord le remplissage zéro puis delayseq. https://in.mathworks.com/help/phased/ref/delayseq.html

Mitali Rathod
la source