Я пишу приложение, которое использует постоянное Q-преобразование, используя swift.В поисках интернета я наткнулся на представителя GitHub, который реализует постоянное преобразование q с использованием ускоренной инфраструктуры Apple, но для C ++
я прочитал и перевел большую часть кода, однако застрял в одной важной части, касающейся указателей.
Оригинал показывает:
DSPSplitComplex kernel;
kernel.realp = new float[K * m_fftLength];
kernel.imagp = new float[K * m_fftLength];
bzero(kernel.realp, sizeof(float) * K * m_fftLength);
bzero(kernel.imagp, sizeof(float) * K * m_fftLength);
и в функции позже имеет:
DSPSplitComplex complexPointer;
complexPointer.realp = &kernel.realp[(k-1) * m_fftLength];
complexPointer.imagp = &kernel.imagp[(k-1) * m_fftLength];
Функция выполняет БПФ и возвращает результат complexPointer.
Я считаю, что идея в том, что «ядро» - это матрица, где каждая запись в realp или imagp представляет собой полный массив значений с плавающей точкой, возвращаемых функцией сложного указателя.Нет ошибок в Xcode.
Однако я не совсем понимаю, как преобразовать эту часть в Swift.Я сделал следующее:
var real1:[Float] = Array(repeating: 0.0, count: Int(K * m_fftLength))
var imag1:[Float] = Array(repeating: 0.0, count: Int(K * m_fftLength))
var kernel = DSPSplitComplex(realp: UnsafeMutablePointer(mutating:real1), imagp: UnsafeMutablePointer(mutating:imag1))
и
var complexPointer:DSPSplitComplex
complexPointer.realp = &kernel.realp[Int((k-1) * m_fftLength)]
complexPointer.imagp = &kernel.imagp[Int((k-1) * m_fftLength)]
, и я получаю ошибку «посторонний &».Так что не нравится указатель на ядро.без него ошибка «Невозможно присвоить значение типа« Float »типу« UnsafeMutablePointer »'
Так что я не понимаю, куда идти дальше, так как я не знаю много C ++