Попытка преобразовать PCM в частотную диаграмму, но результат выглядит очень странно около 0 - PullRequest
0 голосов
/ 26 ноября 2018

Я попытался преобразовать данные PCM из файла WAV и FFT в частотную диаграмму.Вот моя диаграмма.start from 0.00s 0,00 с 512 отсчетов сэмплов start from 3.15s 3,15 с 512 отсчетов сэмплов

Звуковой файл почти бесшумный и имеет некоторый стук, начинающийся с 3 с.

Я заметил около 0 значение очень высокое.Но как это может быть!Еще один странный момент: «значение равно 0, когда частота превышает примерно 16000».

Вот мой код:

import soundfile as sf
import numpy as np
import math
import matplotlib.pyplot as plt


_audio_path = 'source_normal.wav'


def plot_data(pcm_data, samplerate, current_time):
    x_axis = np.arange(0, len(pcm_data) - 1) / len(pcm_data) * samplerate
    complex_data = [x+0j for x in pcm_data]
    result = np.fft.fft(complex_data)
    length = len(pcm_data) // 2
    amplitudes = [math.sqrt(x.imag * x.imag + x.real * x.real) for x in result[:length]]
    plt.plot(x_axis[:length], amplitudes)
    plt.title('{}s sample count: {}'.format(current_time, len(pcm_data)))
    plt.xlabel('{}Hz'.format(samplerate))
    plt.show()


def baz():
    data, samplerate = sf.read(_audio_path, dtype='int16')
    window = 512
    total_number_of_data = len(data)
    current_index = 0 # 144000
    while current_index < total_number_of_data:
        d = data[current_index:current_index+window]
        current_time = current_index / samplerate
        print('current time: {}'.format(current_index / samplerate))
        plot_data(d, samplerate, current_time)
        current_index += window


if __name__ == '__main__':
    baz()

Я не знаком с DSP и никогда не пробовал раньше.Поэтому я думаю, что в моем коде есть какая-то ошибка, пожалуйста, помогите, спасибо.

вот мой звуковой файл звуковой файл

1 Ответ

0 голосов
/ 26 ноября 2018

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

Хвостовые нули - это достаточно малые амплитуды, чтобы они выглядели как нули.Проверьте их значения, чтобы обеспечить;)

...