Wie kann ich die folgende Zeigerinitialisierung von Swift 2 in Swift 3 konvertieren?Zeiger von Swift 2 in Swift konvertieren 3
var values: [Double]
...
var valuesAsComplex : UnsafeMutablePointer<DSPDoubleComplex>?
values.withUnsafeBufferPointer { (resultPointer: UnsafeBufferPointer<Double>) -> Void in
valuesAsComplex = UnsafeMutablePointer<DSPDoubleComplex>(resultPointer.baseAddress)
}
Update: Vielen Dank für alle Antworten. Den Zeiger permanent neu binden, wie @Aderstedt vorschlägt funktioniert, aber das Ergebnis nicht zurückgibt. Irgendwelche Ideen?
// Create result
var result = [Double](repeating: 0.0, count: N/2)
var resultAsComplex : UnsafeMutablePointer<DSPDoubleComplex>?
result.withUnsafeMutableBytes {
resultAsComplex = $0.baseAddress?.bindMemory(to: DSPDoubleComplex.self, capacity: result.count)
}
// Do complex->real inverse FFT.
vDSP_fft_zripD(fftSetup!, &tempSplitComplex, 1, LOG_N, FFTDirection(FFT_INVERSE));
// This leaves result in packed format. Here we unpack it into a real vector.
vDSP_ztocD(&tempSplitComplex, 1, resultAsComplex!, 2, N2);
// Neither the forward nor inverse FFT does any scaling. Here we compensate for that.
var scale : Double = 0.5/Double(N);
vDSP_vsmulD(&result, 1, &scale, &result, 1, vDSP_Length(N));
return result
Können Sie ein * eigenständiges * Beispiel zur Demonstration des Problems bereitstellen? Mit Eingabe, Ausgabe und erwarteter Ausgabe? –
Danke @ martin-r !!! Ich möchte einen Herzfrequenzsensor mit der iOS-Kamera erstellen. Ich lese Bilder von der hinteren Kamera mit 30 fps und speichere den durchschnittlichen Farbton aus dem Bild in einem Array. Um Rauschen zu entfernen, möchte ich einen Bandpassfilter mit FFT und dem Accelerate-Framework erstellen. Ich teilte meinen Code in github https://github.com/codifilo/camera-heart-rate/blob/master/CameraHeartRate/FFT.swift#L119 – codifilo
Was genau funktioniert nicht? - Bitte beachten Sie, dass Fragen zur Fehlersuche ("Warum funktioniert dieser Code nicht?") Das gewünschte Verhalten, ein spezifisches Problem oder einen Fehler und den kürzesten Code enthalten müssen, um ihn ** in der Frage selbst zu reproduzieren. ** Fragen ohne Eine klare Problemstellung ist für andere Leser nicht sinnvoll. Siehe auch: Erstellen eines [mcve]. –