Как я могу конвертировать аудио (. WAV) в спутниковое изображение

Мне нужно создать софт для записи звука (от NOAA Satellite с RTL-SDR). Проблема не в том, чтобы захватить звук, а в том, как я преобразовал звук или волны в изображение. Я читаю много вещей, быстрое преобразование Фурье, преобразование Гильберта и т. Д., Но я не знаю как.

Если бы вы могли дать мне идею, это было бы фантастически. Спасибо!

1 ответ

За последний год я писал код, который делает FFT-звонки, и собрал 15 страниц заметок, поэтому тема обширна, но я могу свести ее

Откройте ваш WAV-файл... проанализируйте 44-байтовый заголовок и обратите внимание на заданные атрибуты глубины в битах и ​​порядка байтов... затем прочитайте всю полезную нагрузку, которая является всем после этого заголовка... поймите понятие битовой глубины, а также порядка байтов... обычно WAV-файл имеет битовую глубину 16 бит, поэтому каждая точка на кривой звука будет храниться в двух байтах... обычно WAV-файл имеет порядковый номер, а не порядковый номер... зная, что это означает, что вы берете следующие два байта затем сдвиньте бит на один байт влево (если есть порядок байтов), затем вставьте бит ИЛИ этой пары байтов в целое число, затем преобразуйте значение типа int, которое обычно изменяется от 0 до (2^16 - 1), в его эквивалент с плавающей запятой, так что ваша кривая аудио указывает теперь изменяется от -1 до +1 ... сделать это преобразование для каждого набора байтов, который соответствует каждой выборке вашего буфера полезной нагрузки

Если у вас есть звуковая кривая WAV в качестве буфера с плавающей точкой, которая называется необработанным звуком или звуком PCM, тогда выполните вызов API FFT... у всех языков есть такие библиотеки... вывод вызова FFT будет представлять собой набор комплексных чисел... обратите внимание на понятие предела Найквиста... это будет влиять на то, как вы используете вывод вашего вызова FFT

Теперь у вас есть набор комплексных чисел... индекс от 0 до N этого набора соответствует частотным бинам... размер буфера PCM будет определять, насколько гранулированы ваши частотные бины... ищите это уравнение... как правило, большее количество выборок в буфере PCM, которые вы отправляете вызову API-интерфейса FFT, обеспечит более высокую степень детализации в выходных частотных бинах... по сути, это означает, что при переходе по этой совокупности комплексных чисел каждый индекс будет увеличивать частоту, назначенную этому индексу

Чтобы визуализировать это, просто введите это в двухмерный график, где ось X - это частота, а ось Y - это величина... рассчитайте эту величину для каждого комплексного числа, используя

curr_mag = 2.0 * math.Sqrt(curr_real*curr_real+curr_imag*curr_imag) / number_of_samples

Для простоты мы рассмотрим информацию о сдвиге фаз, доступную вам в буфере комплексных чисел.

Это лишь царапает поверхность того, что вам нужно освоить, чтобы правильно отобразить WAV-файл в двухмерном графике его представления в частотной области... Есть библиотеки, которые выполняют части или все это, однако теперь вы можете оценить некоторую магию, когда резина отправляется в путь

Отличное объяснение компромиссов между разрешающей способностью по частоте и количеством аудиосэмплов, подаваемых в ваш вызов к FFT API. https://electronics.stackexchange.com/questions/12407/what-is-the-relation-between-fft-length-and-frequency-resolution

Сделайте себе одолжение и зайдите на https://www.sonicvisualiser.org/ которая является одной из многих аудио рабочих станций, которая может выполнять то, что я описал выше. Просто нажмите меню "Файл" -> "Открыть" -> выберите локальный WAV-файл -> "Слой" -> "Добавить спектрограмму"... и оно будет визуально представлять преобразование Фурье входного аудиофайла как таковое.

Другие вопросы по тегам