Как найти разницу между двумя быстрыми преобразованиями Фурье (fft) в виде presantage (%) в C# или в VB.NET
how to find difference between two Fast Fourier transform (fft) as presantage(%)
в c# или в vb.net
Что я уже пробовал:
find difference between two Fast Fourier transform (fft)
it is an array of single so i want compare two result of two .wav sound and know the different between it in %
Patrice T
найти математика
Ralf Meier
И... что ты пробовал ...?
Каков результат вашего БПФ ? Массив одиночных ? Кривая (которая представлена массивом единичных) ?
Если вы хотите получить помощь, вы должны быть гораздо более конкретными ... !!!
giant18
массив единичный, поэтому я хочу сравнить два результата из двух .wav звук и знать разницу между ним в %
Ralf Meier
Вы пытались вычесть содержимое из обоих элементов массива и построить новый массив, который содержит только разницу ?
Это может быть первым шагом к получению алгоритма ...
giant18
да я пробовал но не нашел хорошего результата
Ralf Meier
Хорошо ... тогда вам следует улучшить этот вопрос с помощью вашего кода, который показывает, что вы пробовали и как вы это сделали, и, возможно, мы вместе найдем решение для вас ...
giant18
сравнение 2 аудиофайлов приводит к БПФ в c# или в vb.net у меня есть результат fft для каждого аудио в двойном массиве я хочу знать из результата fft процент сходства или различий между двумя аудио
Dim fft1new As Double() = FftAlgorithm.Вычислить(GetSamplesForMonoWav("C:\Users\e1.wav", h2)) Dim fft2new As Double() = FftAlgorithm.Вычислить(GetSamplesForMonoWav("C:\Users\e2.wav", h2))
Ralf Meier
ОК... это код, который показывает, как вы получаете БПФ-данные в свою систему.
Каждый из этих элементов массива теперь должен представлять частоту и ее количество внутри аудиосигнала.
Теперь вы должны построить 3-й массив с размером наибольшего исходного массива, который содержит отличия от обоих исходных массивов.
Это различие может быть построено с помощью цикла.
Если оба исходных массива имеют один и тот же FFT-результат, то ваш результирующий массив должен иметь в основном содержимое "0". В этом случае у вас есть хорошая партия. В других случаях вы должны найти свой собственный рейтинг.
Я бы посоветовал вам попробовать ...
giant18
я пробую этот код, но он плохо работает
Дим Формулы-1 двойной = ничего
Для каждого f как Double в fft1new
f1 += f
Следующий
Dim f2 как Double = Nothing
Для каждого f как Double в fft2new
f2 += f
Следующий
Тусклый f5 как двойной
Dim f4 As Double = (((f2 - f1) / f2) * 100).Метод toString("#0.0")
Если f1 = f2, то
f5 = 0
Еще
Если f1 > f2, то
f5 = ((f1 / f2)).Метод toString("#0.00")
Еще
f5 = ((f2 / f1)).Метод toString("#0.00")
Конец, Если
Конец, Если
MsgBox(f5)
Ralf Meier
Это не имеет ничего общего с описанием, которое я вам предложил ...
Так... если ваш код "не работает хорошо" - почему бы вам не попробовать мой sugesstion ?
giant18
я не понимаю можете ли вы привести мне пример
Ralf Meier
Я имею в виду его как этот :
Dim FFTResult(1) As Double
Частная Суб FFT_Test()
Dim maxArray = Math.Max(FFT1new.Граф, FFT2new.Граф) - 1
ReDim FFTResult(maxArray)
Дим, В1, В2, А двойной
For i As Integer = 0 To maxArray
w1 = 0
Если я < FFT1new.Посчитайте тогда w1 = FFT1new(i)
w2 = 0
Если я < FFT2new.Посчитайте тогда w2 = FFT2new(i)
FFTResult(i) = Math.Abs(w1 - w2)
Следующий
Конец Подводной Лодки
Теперь вы должны отобразить FFTResult-массив в диаграмму, чтобы увидеть, что у вас есть.
После этого (возможно) вы могли бы решить, как идти дальше.
giant18
я пытаюсь это сделать но это не дает мне то что я хочу спасибо за помощь
Ralf Meier
Как я уже описывал ранее :
- Я не знаю, как выглядит содержимое ваших массивов данных.
- так что я не знаю, как может выглядеть возможный результат.
- поэтому я не могу решить, какие критерии должны быть заполнены для "совпадения" или "не совпадения"
Но если ты сделаешь это так, как описал я, то сможешь ...