DSP: обработка звука: squart или log для использования fft?

Контекст:

Я открываю обширную область DSP. Да, я новичок.

Моя цель :

Примените fft к звуковому массиву, предоставленному аудиолабом, чтобы получить разные частоты сигнала.

Вопрос:

Один вопрос: я просто не могу понять, что делать с массивом numpy, который содержит аудиоданные, благодаря аудиолабу. :

import numpy as np from scikits.audiolab import Sndfile f = Sndfile('first.ogg', 'r') # Sndfile instances can be queried for the audio file meta-data fs = f.samplerate nc = f.channels enc = f.encoding print(fs,nc,enc) # Reading is straightfoward data = f.read_frames(10) print(data) print(np.fft.fft(data)) 

Теперь у меня есть мои данные.

Показания

Я прочитал эти две интересные статьи здесь:

Анализ аудио с использованием Fast Fourier Transform (принятый анонс замечателен)

а также

http://www.onlamp.com/pub/a/python/2001/01/31/numerically.html?page=2

Теперь есть две техники: по-видимому, предлагается квадрат (первая ссылка), тогда как другая – журнал, особенно: 10ln10 (абс (1,10 ** – 20 + значение))

Какой из них лучше ?

SUM UP:

Я хотел бы получить анализ Fourier моего массива, но любой из этих двух ответов, по-видимому, только подчеркивает сигнал, а не изолирует компоненты.

Возможно, я ошибаюсь, я все еще ноб.

Что мне тогда делать?

Благодаря,

ОБНОВИТЬ:

Я задаю этот вопрос: DSP – получить амплитуду всех частот, связанных с этим.

Ваш вопрос кажется довольно запутанным, но вы, очевидно, пробовали что-то, что здорово. Позвольте мне сделать шаг назад и предложить вам общий маршрут:

  • Начните с разбивки аудио на куски какого-то размера, скажем, N.
  • Выполните БПФ на каждом фрагменте N выборок.
  • THEN беспокоится о том, чтобы отображать данные как RMS (квадратный подход) или дБ (подход на основе ln).

Действительно, вы можете думать об этих значениях как коэффициенты масштабирования для отображения.

Если вам нужна помощь с самой FFT, мой пост в блоге с обнаружением высоты тона с помощью FFT может помочь: http://blog.bjornroche.com/2012/07/frequency-detection-using-fft-aka-pitch.html

Добавляем к ответу @Bjorn Roche.

Вот простой код для построения спектра частот, используя шкалу дБ. Он использует matplotlib для построения графика.

 import numpy as np import pylab # for a real signal def plotfftspectrum(signal, dt): # where dt is the sample rate n = signal.size spectrum = np.abs(np.fft.fft(signal)) spectrum = 20*np.log(spectrum/spectrum.max()) # dB scale frequencies = np.fft.fftfreq(n, dt) pylab.plot(frequencies[:n//2], spectrum[:n//2]) # plot n//2 due real function symmetry pylab.show() 

Вы можете использовать его, прочитав хотя бы некоторые образцы ваших данных, например, 1024.

 data = f.read_frames(1024) plotfftspectrum(data, 1./f.samplerate) 

Где я считаю, что частота дискретизации в частоте.