私はあなたの助けが必要です。私のオーディオファイルにFFTを使用したいと思っています。私はより小さなバッファ配列で私のオーディオファイルをカットし、すべてのサブバッファで自分のFFTを使用したい。スウィフトFFTチャンクオーディオファイルの振幅を
なぜですか?なぜなら私のfréquenceがいかに特殊性を持っているかを(プロットデータで)知り、見る必要があるからです。私は知りたい、どのようにノイズが私のオーディオファイルから始まる。
これは私のFFTコードです。私は間違って何をしているのかわかりません。あなたの助け
のコードの編集
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秒の部分を作成するために、レートサンプルの倍数のあとに曲を分解するように勧められました。ですから、私が望むものに近い特定のカーブを見つけたら、私が私のオーディオで探しているノイズは、私が考えているかもしれません。だから分解の回数は私が前に落ちる前から時間を与えるでしょう。私のタイマーが始まるべき場所。 –