Sanger - DNA - Sequenzierung erzeugt eine Chromatogramm Spur , die mit einer Reihe von Programmen sichtbar gemacht werden kann, einschließlich FinchTV oder ChromasLite. Die Rohdaten bestehen aus Koordinaten für jede der vier DNA-Basen (A, C, G und T). Diagramme werden jedoch als geglättete Peaks angezeigt, wie im vorherigen Bild gezeigt. In vielen Programmen kann die x- und y-Achse des Diagramms vergrößert oder verkleinert werden, um die Form des Diagramms zu ändern. Welche mathematische Methode wird verwendet, um solche glatten Kurven aus einer (kleinen) Anzahl von Rohdatenpunkten zu zeichnen?
image-processing
discrete-signals
interpolation
SabreWolfy
quelle
quelle
Antworten:
Implementierung
Angenommen, Sie haben bereits eine Strichzeichnungsroutine, müssen Sie diese nur durch eine Art Interpolation ergänzen. Die Kurven werden erstellt, indem genügend interpolierte kurze Linien gezeichnet werden, damit das Ergebnis glatt aussieht. Ein guter Ausgangspunkt wäre die Verwendung einer vorhandenen Interpolationsroutine, wie sie hier von Paul Bourke angegeben wurde .
Ich werde dies anhand der von ihm bereitgestellten kubischen Routinen veranschaulichen, da dies einige der einfachsten sind, die immer noch vernünftige Ergebnisse liefern. Hier ist der erste (übersetzt in Python) als Referenz:
Jede Routine verfügt über einen Parameter,
mu
der den Bruchteil des Index darstellt, den Sie interpolieren möchten. Abhängig von der Routine sind die anderen Parameter eine Anzahl von Stichproben, die den betreffenden Index umgeben. Im kubischen Fall benötigen Sie vier Proben. Zum Beispiel, wenn Sie Ihre Dateny[n]
, und Sie wollen den Wert an10.3
,mu
wäre.3
, und man würde passieren iny[9]
,y[10]
,y[11]
, undy[12]
.Anstatt dann eine einzelne Linie mit Endpunkten zu zeichnen, sagen wir:( 10 ,y10) → ( 11 ,y11) Mit den interpolierten Werten (z. B. würden Sie eine Reihe kürzerer Werte zeichnen. ). Offensichtlich müssten diese Punkte auf die und Dimensionen des zu rendernden Bildes skaliert werden.( 10 ,y10) → ( 10.1 , kubisch ( .1 ,y9,y10,y11,y12) ) … x y
Theorie
Da die Seite / Routine, auf die ich verwiesen habe, keine Quellen zitiert, lohnt es sich zu erklären, woher diese kubischen Routinen stammen (und wie sie funktionieren). Sowohl der oben reproduzierte als auch der sehr ähnliche Catmull-Rom-Spline, den er direkt darunter erwähnt, sind zwei spezielle Fälle für die Verwendung des folgenden kubischen Faltungskerns:
Die oben aufgeführte Routine entspricht einem Wert von , und der Catmull-Rom-Spline entspricht . Ich werde nicht zu detailliert darauf eingehen, wie die allgemeine Form des Kernels abgeleitet wird, aber es beinhaltet verschiedene Einschränkungen, wie beispielsweise sicherzustellen, dass eins bei Null und null bei allen anderen ganzen Zahlen ist.α = - 1 α = - 1 / 2 ψ ( x )
So sieht es aus:
Die beiden Auswahlmöglichkeiten für den Wert von sich aus Versuchen, verschiedene Aspekte der sinc-Funktion , dem idealen Rekonstruktionskern, abzugleichen. Wenn Sie stimmt die Ableitung von mit der Ableitung der sinc-Funktion bei überein , und wenn Sie sie gleich machen, erhalten Sie stattdessen die beste niederfrequente Näherung. In jedem Fall hat ein Wert von viel bessere Eigenschaften, daher ist er wahrscheinlich der beste Wert für die Praxis. Eine viel ausführlichere Diskussion finden Sie im folgenden Artikel ab Seite 328:α α = - 1 ψ x = 1 - 1 / 2 α = - 1 / 2
Einblick
Wenn man sich diesen Kernel nur in Bezug auf die tatsächliche Implementierung des Interpolationscodes ansieht, ist möglicherweise nicht klar, wie die beiden zusammenhängen. Grundsätzlich kann der Interpolationsprozess so betrachtet werden, dass verschobene Kopien des Kernels addiert werden, die durch die Stichproben der Daten wie folgt skaliert werden:
Wenn Sie eine Implementierung des Kernels haben, können Sie diese direkt wie folgt für die Interpolation verwenden:
Es ist jedoch viel weniger rechnerisch effizient, dies auf diese Weise zu tun. Betrachten Sie als Brücke vom direkten Kernel-Ansatz zum optimierten oben, dass mit ein wenig algebraischer Manipulation die erste Implementierung in der folgenden Form erfolgen kann:
In dieser Formulierung können dieα = - 1
c0...c3
Werte als die Koeffizienten eines FIR-Filters betrachtet werden, das auf die Abtastwerte angewendet wird. Jetzt ist es viel einfacher zu sehen, wie die Routine vom Kernel abgeleitet wird. Betrachten Sie den Kernel mit wie folgt:Bewerten Sie diesen Kernel nun symbolisch bei verschiedenen verschobenen Offsets, wobei Sie berücksichtigen, dassμ
mu
( ) von bis reicht :0
1
Beachten Sie, dass aufgrund des Absolutwerts für in der Kerneldefinition auf "gespiegelt" wird . Jetzt haben wir die genauen Polynome, die in der "FIR-Version" der Interpolationsroutine verwendet werden. Die Bewertung dieser Polynome kann dann durch Standardtechniken (z. B. Horners Methode ) effizienter gestaltet werden . Ähnliche Dinge können mit anderen Kerneln durchgeführt werden, und es gibt auch andere Möglichkeiten, effiziente Implementierungen zu erstellen (vgl. Homepage für digitales Audio-Resampling ).μ - 1 , μ - 2 1 - μ , 2 - μ x
quelle