Comment extrapoler un signal 1D?

25

J'ai un signal d'une certaine longueur, disons 1000 échantillons. Je voudrais étendre ce signal à 5000 échantillons, échantillonnés au même rythme que l'original (c'est-à-dire que je veux prédire ce que serait le signal si je continuais à l'échantillonner pendant une plus longue période). Le signal est composé de plusieurs composants sinusoïdaux additionnés.

La méthode qui m'est venue en premier était de prendre la FFT entière et de l'étendre, mais cela laisse une très forte discontinuité à l'image 1001. J'ai également envisagé de n'utiliser que la partie du spectre près des pics, et bien que cela semble améliorer quelque peu le signal, il ne me semble pas que la phase soit garantie correcte. Quelle est la meilleure méthode pour étendre ce signal?

Voici du code MATLAB montrant une méthode idéalisée de ce que je veux. Bien sûr, je ne saurai pas à l'avance qu'il y a exactement 3 composantes sinusoïdales, ni leur phase et fréquence exactes. Je veux m'assurer que la fonction est continue, qu'il n'y a pas de saut lorsque nous passons au point 501,

vals = 1:50;
signal = 100+5*sin(vals/3.7+.3)+3*sin(vals/1.3+.1)+2*sin(vals/34.7+.7); % This is the measured signal
% Note, the real signal will have noise and not be known exactly.
output_vals = 1:200;
output_signal = 100+5*sin(output_vals/3.7+.3)+3*sin(output_vals/1.3+.1)+2*sin(output_vals/34.7+.7); % This is the output signal

figure;
plot(output_signal);
hold all;
plot(signal);

Fondamentalement, étant donné la ligne verte, je veux trouver la ligne bleue. entrez la description de l'image ici

PearsonArtPhoto
la source
3
Est-ce dans le contexte de la mosaïque d'une image, de faire quelque chose comme une extension du ciel ou autre chose? En d'autres termes, existe-t-il d'autres mesures de qualité pour l'extension en plus d'être "lisse" sur les bords?
datageist
3
Votre question n'est pas claire. Qu'entendez-vous par «prolonger»? Essayez-vous de dupliquer et de caténaliser des copies de votre signal (mosaïque) ou voulez-vous le suréchantillonner par 5x ou voulez-vous l'enregistrer pendant 5x plus longtemps? Votre signal est-il périodique? Je pense qu'une question plus concrète et bien définie est nécessaire et un exemple minimal de ce que vous essayez de réaliser vous aidera certainement.
Lorem Ipsum,
1
est-ce que l'extension signifie une interpolation? la question n'est pas très claire.
Sriram
Je n'ai jamais réalisé que cela pouvait signifier tant de choses ... J'essaierai de le rendre plus clair, en gros, je veux avoir un signal 1-D échantillonné au même rythme, mais pour une plus longue période de temps.
PearsonArtPhoto
1
@endolith: Est-ce que cela améliore les choses?
PearsonArtPhoto du

Réponses:

16

Selon le matériau source, la méthode d'interpolation spectrale basée sur DCT décrite dans l'article suivant semble prometteuse:

lk, HG, Güler S. "Transformation et interpolation du signal basées sur la synthèse DCT modifiée" , Digital Signal Processing, Article sous presse, 2011.

Voici l'une des figures de l'article montrant un exemple d'interpolation:

entrez la description de l'image ici

Les applications de la technique à la récupération des segments perdus ( par exemple 4.2. Synthèse des périodes de tangage perdues ) sont probablement les plus pertinentes pour l'extrapolation. En d'autres termes, prenez un morceau du matériau source existant, prétendez qu'il y a un segment perdu entre le bord et le segment arbitraire que vous avez sélectionné, puis "reconstruisez" la partie "manquante" (et peut-être jetez le morceau que vous avez utilisé à la fin). Il semble qu'une application encore plus simple de la technique fonctionnerait pour boucler le matériau source de manière transparente ( par exemple 3.1. Interpolation de l'amplitude spectrale ).

datageist
la source
1
Malheureusement, le lien est mort. Je n'ai pu trouver que ce téléchargement payant .
knedlsepp
@knedlsepp Ce lien semble donner le papier sans être derrière un mur payant.
Peter K.
18

Je pense que le codage prédictif linéaire (autrement connu sous le nom de moyenne mobile auto-régressive ) est ce que vous recherchez. Le LPC extrapole une série chronologique en ajustant d'abord un modèle linéaire à la série chronologique, dans laquelle chaque échantillon est supposé être une combinaison linéaire d'échantillons précédents. Après avoir ajusté ce modèle à la série temporelle existante, il peut être exécuté pour extrapoler d'autres valeurs tout en maintenant un spectre de puissance stationnaire (?).

Voici un petit exemple dans Matlab, utilisant la lpcfonction pour estimer les coefficients LPC.

N = 150;    % Order of LPC auto-regressive model
P = 500;    % Number of samples in the extrapolated time series
M = 150;    % Point at which to start predicting

t = 1:P;

x = 5*sin(t/3.7+.3)+3*sin(t/1.3+.1)+2*sin(t/34.7+.7); %This is the measured signal

a = lpc(x, N);

y = zeros(1, P);

% fill in the known part of the time series
y(1:M) = x(1:M);

% in reality, you would use `filter` instead of the for-loop
for ii=(M+1):P      
    y(ii) = -sum(a(2:end) .* y((ii-1):-1:(ii-N)));
end

plot(t, x, t, y);
l = line(M*[1 1], get(gca, 'ylim'));
set(l, 'color', [0,0,0]);
legend('actual signal', 'extrapolated signal', 'start of extrapolation');

Bien sûr, en code réel, vous utiliseriez filterpour implémenter l'extrapolation, en utilisant les coefficients LPC acomme filtre IIR et en préchargeant les valeurs de série temporelle connues dans l'état du filtre; quelque chose comme ça:

% Run the initial timeseries through the filter to get the filter state 
[~, zf] = filter(-[0 a(2:end)], 1, x(1:M));     

% Now use the filter as an IIR to extrapolate
y((M+1):P) = filter([0 0], -a, zeros(1, P-M), zf); 

Voici la sortie:

Exemple LPC

Il fait un travail raisonnable, bien que la prédiction s'éteigne avec le temps pour une raison quelconque.

Je ne connais pas vraiment les modèles AR et je serais également curieux d'en savoir plus.

-

EDIT: @china et @Emre ont raison, la méthode Burg semble fonctionner beaucoup mieux que LPC. Le simple fait de passer lpcà arburgdans le code ci-dessus donne les résultats suivants:

Extrapolation par la méthode de Burg

Le code est disponible ici: https://gist.github.com/2843661

nibot
la source
H(z)=b(z)/a(z)
@Emre Existe-t-il un moyen d'améliorer l'extrapolation?
nibot
Comme le dit @chinnu, le moyen le plus simple est d'alimenter la sortie dans l'entrée.
Emre
2
Très bien, vous m'avez fait lancer MATLAB: P Le problème peut être évité en utilisant un algorithme d'estimation AR différent; remplacez simplement a=lpc(x,N)par a=arburg(x,N). Pour une discussion (sèche) sur les algorithmes de RA, voir Pourquoi Yule-Walker ne devrait pas être utilisé pour la modélisation autorégressive
Emre
1
C'est évidemment un peu tard, mais il y a un problème avec votre configuration. Vous fournissez la série temporelle complète de x( Pmesures) à lpc(ou arburg) lors de l'estimation des coefficients du modèle. Pour l'extrapolation par la question d'origine, vous ne devriez vraiment baser cette estimation que sur les premières Mmesures. Fournir moins de points de temps entraîne une extrapolation inférieure, mais fonctionne toujours assez bien.
Chris C
6

L'extrapolation 1-D est assez simple en utilisant la méthode de BURG pour estimer les coefficients LP. Une fois les coefficients LP disponibles, on peut facilement calculer les échantillons de temps en appliquant un filtre. Les échantillons qui sont prédits avec Burg sont les prochains échantillons de temps de votre segment de temps d'entrée.

chinnu
la source
6

Si vous êtes complètement sûr qu'il n'y a que peu de composantes de fréquence dans le signal, vous pouvez essayer l' algorithme MUSIC pour découvrir quelles fréquences sont contenues dans votre signal et essayer de travailler à partir de là. Je ne suis pas tout à fait sûr que cela puisse fonctionner parfaitement.

De plus, comme vos données sont complètement déterministes, vous pouvez essayer de créer une sorte de prédicteur non linéaire, de les former à l'aide de votre ensemble de données existant et de le laisser extrapoler le reste.

En général, c'est un problème d'extrapolation, voulez-vous Google pour quelque chose comme l'extrapolation de Fourier du prix .

Phonon
la source
(Des années plus tard), un autre algorithme pour trouver quelques composantes de fréquence est l' inversion harmonique .
denis