хорошо; Есть несколько способов сделать это ...
Например,
: если вы хотите использовать шкалу в дБ, для каждой воображаемой выборки вычислите
ymag = (x.real ^ 2 + x.imag ^ 2)
вам нужно пройти только половину массива, потому что вам нужны положительные частоты; вторая половина будет просто повторением первой с реальными данными, поданными в БПФ.
поиск в результирующих значениях минимальных и максимальных значений и их сохранение. если ваше минимальное значение равно нулю, выберите какое-то очень маленькое значение, которое будет вашим минимальным. (0.000001 или что-то). затем установите минимальное значение дБ в виде mindB = 10 * log10 (минимум).
Теперь первое возвращенное значение (sample [0]) будет вашим смещением постоянного тока, которое вы, вероятно, захотите установить равным нулю.
затем для каждого образца вычислите: ydB = 10 * log10 (ymag / максимум).
это должно дать вам массив, который представляет дБ от максимума каждого бина семпла. Вы можете масштабировать это к тому, что вам нужно; если область вашего графика изменяется от y = 5 до y = 200, вы можете использовать что-то вроде:
yscaled = ((ydB / -mindB) * (200 - 5) + 200)
я бы также гарантировал, что масштабированное значение помещается в границы в случае ошибки округления FP.
yscaled = min (max (yscaled, 5), 200)
Прошло много времени с тех пор, как я это сделал, поэтому я прошу прощения, если есть какие-либо математические ошибки. :)