簡體   English   中英

Python 音頻文件RMS幅度直方圖

[英]Python histogram of RMS amplitude of audio file

我想制作一個直方圖,將音頻文件的RMS 幅度分檔。 目標是在文件的整個持續時間內顯示每個幅度級別的信號量。 是否有 Python package 和 function 用於此? 如果不是,如何編碼?

我還想設置計算分析的頻率范圍,例如在 1 到 6 kHz 之間。

我有以下粗略的開始,雖然我還不明白它代表什么,而且它當然不使用 RMS:

import numpy as np
import matplotlib.pyplot as plt
   
Fs, data = wavfile.read('file') 
print('data =',data)
print('number of samples in data =',len(data))

subset = data[0:44100] 
subset = abs(subset)
print('number of samples in subset =',len(subset))

plt.hist(subset, bins='auto')  
plt.show()

據我所知,在 numpy 中沒有專門的numpy用於 RMS,但你可以這樣做

RMS = np.sqrt(np.mean(x**2))

問題是,您要針對哪些數據(針對哪些x )計算 RMS。 例如,您可以為每個樣本應用 RMS,而不是假設您的 wav 文件中只有一個通道:

length = data.shape[0] / Fs
print(f"length = {length}s")

RMS = lambda x: np.sqrt(np.mean(x**2))

sample = np.arange(int(length))
RMS_of_sample = np.zeros(sample.shape)
for ns in sample:
    # here you can apply the frequency window for the sample 
    RMS_of_sample[ns] = RMS(data[ns*Fs:(ns+1)*Fs])

plt.hist(RMS_of_sample, label="Left channel")
plt.show()

在這里你也可以應用一些信號 windows 這段代碼給你這樣的東西

在此處輸入圖像描述

對於輸入信號:

在此處輸入圖像描述


關於全/部分頻率范圍的評論中的問題的補充

如果要分析某個頻域中的完整信號,例如,可以對頻率范圍[filter_freq_min, filter_freq_max]應用簡單濾波器(矩形頻率窗口),如下所示:

from scipy.fft import fft, ifft, fftfreq

filter_freq_min = 1000 # Hz
filter_freq_max = 2000 # Hz

freq = fftfreq(len(data), 1 / Fs)
data_fft = fft(data)

condition = np.logical_or(abs(freq) <= filter_freq_min, abs(freq) >= filter_freq_max)
filtered_data_fft = np.copy(data_fft)
filtered_data_fft [condition] = 0
filtered_data = np.real(ifft(filtered_data_fft ))

# show fft for incoming signal (blue) and filtered signal (orange) 
plt.plot(freq, np.abs(data_fft),'.')
plt.plot(freq, np.abs(filtered_data_fft ),'.')
plt.xlim( [10, Fs/2] )
plt.xlabel( 'Frequency (Hz)' )
plt.show()

# check RMS for filtered and unfiltered signal
print(RMS(filtered_data),RMS(data))

在此處輸入圖像描述

這樣,您可以在所需的頻率范圍內循環。

要直接在 Python 中播放聲音,可以使用

import sounddevice as sd # For playing/recording audio
sd.play(data, Fs)
sd.play(filtered_data, Fs)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM