Wie extrapoliere ich ein 1D-Signal?


25

Ich habe ein Signal von einiger Länge, sagen wir 1000 Samples. Ich möchte dieses Signal auf 5000 Samples erweitern, die mit der gleichen Rate wie das Original abgetastet wurden (dh ich möchte vorhersagen, wie das Signal aussehen würde, wenn ich es für einen längeren Zeitraum weiter abtasten würde). Das Signal setzt sich aus mehreren Sinuskomponenten zusammen.

Die Methode, die mir zuerst einfiel, war, die gesamte FFT zu nehmen und zu erweitern, aber dies hinterlässt eine sehr starke Diskontinuität bei Frame 1001. Ich habe auch in Betracht gezogen, nur den Teil des Spektrums in der Nähe der Peaks zu verwenden, und dies scheint zu sein verbessern Sie das Signal ein wenig, es scheint mir nicht, dass die Phase garantiert korrekt ist. Was ist die beste Methode, um dieses Signal zu verlängern?

Hier ist ein MATLAB-Code, der eine idealisierte Methode für das zeigt, was ich will. Natürlich werde ich vorher nicht wissen, dass es genau 3 sinusförmige Komponenten gibt, noch deren genaue Phase und Frequenz. Ich möchte sicherstellen, dass die Funktion kontinuierlich ist, dass es keinen Sprung gibt, wenn wir zu Punkt 501 gehen.

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);

Grundsätzlich möchte ich bei der grünen Linie die blaue Linie finden. Bildbeschreibung hier eingeben


3
Gehört dies zum Kacheln eines Bildes, zu einer Himmelserweiterung oder zu etwas anderem? Mit anderen Worten, gibt es andere Qualitätsmaßstäbe für die Erweiterung, außer dass sie an den Rändern "glatt" ist?
Datageist

3
Ihre Frage ist nicht klar. Was meinst du mit "verlängern"? Versuchen Sie, Kopien Ihres Signals zu duplizieren und zu verketten (Kacheln), oder möchten Sie es um das Fünffache erhöhen, oder möchten Sie es fünfmal länger aufnehmen? Ist Ihr Signal periodisch? Ich denke, eine konkretere und klarere Frage ist notwendig und ein minimales Beispiel dessen, was Sie erreichen wollen, wird definitiv helfen.
Lorem Ipsum

1
Bedeutet Erweiterung Interpolation? Frage ist nicht sehr klar.
Sriram

Ich hätte nie gedacht, dass es so viele Dinge bedeuten könnte ... Ich werde versuchen, es klarer zu machen. Grundsätzlich möchte ich, dass ein 1-D-Signal mit der gleichen Rate abgetastet wird, aber für einen längeren Zeitraum.
PearsonArtPhoto

1
@endolith: Verbessert das die Dinge?
PearsonArtPhoto

Antworten:


16

Je nach Ausgangsmaterial sieht die in der folgenden Veröffentlichung beschriebene DCT-basierte spektrale Interpolationsmethode vielversprechend aus:

lk, HG, Güler S. "Signaltransformation und Interpolation basierend auf modifizierter DCT-Synthese" , Digital Signal Processing, Artikel in der Presse, 2011.

Hier ist eine der Abbildungen aus dem Papier, die ein Beispiel für die Interpolation zeigt:

Bildbeschreibung hier eingeben

Die Anwendung der Technik auf die Wiederherstellung verlorener Segmente ( z. B. 4.2. Synthese verlorener Tonhöhenperioden ) ist wahrscheinlich für die Extrapolation am relevantesten. Mit anderen Worten, greifen Sie nach einem Teil des vorhandenen Quellmaterials, tun Sie so, als gäbe es ein verlorenes Segment zwischen der Kante und dem von Ihnen ausgewählten beliebigen Segment, und "rekonstruieren" Sie dann den "fehlenden" Teil (und verwerfen Sie möglicherweise den am Ende verwendeten Teil). Es scheint, dass eine noch einfachere Anwendung der Technik zum nahtlosen Durchschleifen des Quellmaterials funktionieren würde ( z. B. 3.1. Interpolation der spektralen Amplitude ).


1
Leider ist die Verbindung tot. Ich konnte nur diesen kostenpflichtigen Download finden .
Knedlsepp

@knedlsepp Dieser Link scheint das Papier zu geben, ohne hinter einer Paywall zu stehen.
Peter K.

18

Ich denke, Sie suchen nach linearer prädiktiver Codierung (auch bekannt als auto-regressiver gleitender Durchschnitt ). LPC extrapoliert eine Zeitreihe, indem zunächst ein lineares Modell an die Zeitreihe angepasst wird, wobei angenommen wird, dass jede Stichprobe eine lineare Kombination vorheriger Stichproben ist. Nachdem dieses Modell an die vorhandenen Zeitreihen angepasst wurde, kann es weitergeführt werden, um weitere Werte unter Beibehaltung eines stationären (?) Leistungsspektrums zu extrapolieren.

Hier ist ein kleines Beispiel in Matlab, das die lpcFunktion zum Schätzen der LPC-Koeffizienten verwendet.

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');

Natürlich würden Sie in realem Code filterdie Extrapolation implementieren, indem Sie die LPC-Koeffizienten aals IIR-Filter verwenden und die bekannten Zeitreihenwerte vorab in den Filterzustand laden. etwas wie das:

% 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); 

Hier ist die Ausgabe:

LPC-Beispiel

Es macht einen vernünftigen Job, obwohl die Vorhersage aus irgendeinem Grund mit der Zeit nachlässt.

Ich weiß eigentlich nicht viel über AR-Modelle und wäre auch neugierig, mehr zu erfahren.

-

EDIT: @china und @Emre sind richtig, die Burg-Methode scheint viel besser zu funktionieren als LPC. Wenn Sie einfach in den obigen Code wechseln lpc, erhalten Sie arburgdie folgenden Ergebnisse:

Extrapolation nach der Burg-Methode

Der Code ist hier verfügbar: https://gist.github.com/2843661


H(z)=b(z)/a(z)

@Emre Gibt es eine Möglichkeit, die Hochrechnung zu verbessern?
Nibot

Wie @chinnu sagt, besteht die einfache Möglichkeit darin, die Ausgabe in die Eingabe einzuspeisen.
Emre

2
Okay, Sie haben mich veranlasst, MATLAB zu starten: P Das Problem kann durch Verwendung eines anderen AR-Schätzungsalgorithmus vermieden werden. einfach ersetzen a=lpc(x,N)durch a=arburg(x,N). Eine (trockene) Diskussion über AR-Algorithmen finden Sie unter Warum sollte Yule-Walker nicht für autoregressive Modellierung verwendet werden?
Emre

1
Das ist natürlich etwas spät, aber es gibt ein Problem mit Ihrer Einrichtung. Sie geben die vollständige Zeitreihe von x( PMessungen) für lpc(oder arburg) an, wenn Sie Modellkoeffizienten schätzen. Für die Extrapolation nach der ursprünglichen Frage sollten Sie diese Schätzung eigentlich nur auf die ersten MMessungen stützen . Wenn Sie weniger Zeitpunkte angeben, führt dies zu einer minderwertigen Extrapolation, funktioniert aber immer noch recht gut.
Chris C

6

Die 1-D-Extrapolation ist mit der BURG-Methode zur Schätzung der LP-Koeffizienten recht einfach. Sobald LP-Koeffizienten verfügbar sind, kann man die Zeitabtastwerte durch Anwenden eines Filters leicht berechnen. Die Samples, die mit Burg's vorhergesagt werden, sind die nächsten Samples Ihres Eingabezeitsegments.


6

Wenn Sie sich völlig sicher sind, dass das Signal nur wenige Frequenzkomponenten enthält, können Sie den MUSIC- Algorithmus verwenden, um herauszufinden, welche Frequenzen in Ihrem Signal enthalten sind, und versuchen, von dort aus zu arbeiten. Ich bin mir nicht ganz sicher, ob dies perfekt funktioniert.

Da Ihre Daten vollständig deterministisch sind, können Sie außerdem versuchen, eine Art nichtlinearen Prädiktor zu erstellen, ihn anhand Ihres vorhandenen Datensatzes zu trainieren und den Rest extrapolieren lassen .

In der Regel ist dies eine Extrapolation Problem, haben Sie zu Google etwas wie wollen könnten Fourier Extrapolation des Preises .


(Jahre später) Ein weiterer Algorithmus zum Auffinden einiger Frequenzkomponenten ist die Harmonische Inversion .
Denis
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.