Я предлагаю вам отойти от своего кода и способности первого мастера выполнить вызов fft и разобраться в результате, возвращаемом этим вызовом ... либо читать по кривой греха известного freq, либо просто написать функцию для заполнениямассив с кривой с плавающей запятой (это ваш сигнал во временной области) ... затем передайте этот массив в вызов fft, который, как правило, вернет вам новый массив комплексных чисел ... каждый элемент этого нового массива, которыйтеперь в частотной области представлено одно значение частоты ... частотный интервал ... величина этой частоты может быть вычислена с использованием
nyquist_limit_index := int(number_of_samples / 2)
curr_freq := 0.0
incr_freq := flow_data_spec.sample_rate / number_of_samples
for index, curr_complex := range complex_fft {
if index <= nyquist_limit_index {
curr_real = real(curr_complex) // pluck out real portion of imaginary number
curr_imag = imag(curr_complex) // ditto for im
curr_mag = 2.0 * math.Sqrt(curr_real*curr_real+curr_imag*curr_imag) / number_of_samples
curr_theta = math.Atan2(curr_imag, curr_real) // phase shift of this freq
curr_dftt := discrete_fft { // populate a struct of current array element
real: 2.0 * curr_real,
imaginary: 2.0 * curr_imag,
magnitude: curr_mag,
theta: curr_theta,
}
// optionally stow curr_dftt for later
}
curr_freq += incr_freq
}
, где number_of_samples - это просто длина вашего массива временной области, в который вы подаливызов fft
Приведенный выше код показывает вам, как выполнять итерацию по массиву частотной области комплексных чисел, возвращенных вам из более раннего вызова fft ... выше псевдокод, а не python, но ваш процесс может быть очень похож
Чтобы определить частоту (curr_freq) с thСамая большая амплитуда, просто следите за тем, какая из curr_freq имела максимальную амплитуду в вышеупомянутом цикле ... В нашей игрушечной настройке вы можете хорошо знать частоту входной синусоидальной кривой вашего источника, так что такая же частота должна выскочить как curr_freq с наибольшей величиной выше... после того, как вы это заработаете и его концепции погрузятся в жизнь, примените то, что вы узнали, к своей задаче - удачи
Анализ Фурье и его различные заклинания чрезвычайно эффективны и могут открыть множество дверей.Это тема, требующая обдумывания, но если мы позволим себе просто соединить некоторые вызовы API, чтобы что-то заработало, мы упустили нечто очень волшебное