도와주세요. FFT를 내 오디오 파일에 사용하고 싶습니다. 더 작은 버퍼 배열에서 내 오디오 파일을 자르고 모든 하위 버퍼와 함께 FFT를 사용하고 싶습니다.신속한 FFT 청크 오디오 파일을 통해 진폭을
왜 ?? 필자의 fréquence가 어떻게 특수성을 가지는지 알 필요가 있기 때문입니다. 나는 오디오 파일에서 잡음이 시작되는 방법을 알고 싶다.
이것이 내 FFT 코드입니다. 나는 무엇을 잘못하고 있는지 모른다. 당신의 도움이
편집 CODE
func FFT (buffer: AVAudioPCMBuffer){
let frameCount = buffer.frameCapacity
let log2n = UInt(round(log2(Double(frameCount))))
print (" log2n \(log2n)");
let bufferSizePOT = Int(1 << log2n)
print (" bufferSizePot \(bufferSizePOT)");
let inputCount = bufferSizePOT/2
let fftSetup = vDSP_create_fftsetup(log2n, Int32(kFFTRadix2))
var realp = [Float](repeating: 0, count: inputCount)
var imagp = [Float](repeating: 0, count: inputCount)
var output = DSPSplitComplex(realp: &realp, imagp: &imagp)
let windowSize = bufferSizePOT
var transferBuffer = [Float](repeating: 0, count: windowSize)
var window = [Float](repeating: 0, count: windowSize)
vDSP_hann_window(&window, vDSP_Length(windowSize), Int32(vDSP_HANN_NORM))
vDSP_vmul((buffer.floatChannelData?.pointee)!, 1, window,
1, &transferBuffer, 1, vDSP_Length(windowSize))
let temp = UnsafePointer<Float>(transferBuffer)
temp.withMemoryRebound(to: DSPComplex.self, capacity: transferBuffer.count) { (typeConvertedTransferBuffer) -> Void in
vDSP_ctoz(typeConvertedTransferBuffer, 2, &output, 1, vDSP_Length(inputCount))
}
// Do the fast Fourier forward transform, packed input to packed output
vDSP_fft_zrip(fftSetup!, &output, 1, log2n, FFTDirection(FFT_FORWARD))
//---------------------------------------------------
var magnitudes = [Float](repeating: 0.0, count: inputCount)
vDSP_zvmags(&output, 1, &magnitudes, 1, vDSP_Length(inputCount))
var normalizedMagnitudes = [Float](repeating: 0.0, count: inputCount)
vDSP_vsmul(sqrt(x: magnitudes), 1, [2.0/Float(inputCount)],
&normalizedMagnitudes, 1, vDSP_Length(inputCount))
for f in 0..<normalizedMagnitudes.count
{
print("\(f), \(normalizedMagnitudes[f])")
}
vDSP_destroy_fftsetup(fftSetup)
}
문제점/질문은 무엇입니까? –
이 코드를 사용할 때 FFT가 잘못된 값을 반환합니다. 신호 처리 능력이 뛰어난 사람과 논의함으로써 FFT를 적용 할 x 초의 조각을 만들기 위해 속도 샘플의 배수에 따라 노래를 분해하라는 권고를 받았습니다. 따라서 내가 원하는 곡선을 찾거나 원하는 곡선에 가까운 곡선을 찾으면 오디오에서 찾고있는 잡음을 고려해야합니다. 그래서 분해의 횟수는 떨어지기 전에 처음부터 시간을 줄 것입니다. 내 타이머가 시작되어야하는 곳. –