np.fft.fft(audio_data) 转db
时间: 2023-08-04 12:26:34 浏览: 184
将 `np.fft.fft(audio_data)` 转换为 dB,可以使用以下代码:
```python
import numpy as np
def to_db(x):
# 计算幅度谱
mag = np.abs(x)
# 将幅度谱转换为分贝
db = 20 * np.log10(mag)
return db
```
然后,你可以使用这个函数将 `np.fft.fft(audio_data)` 转换为 dB:
```python
db = to_db(np.fft.fft(audio_data))
```
请注意,这将返回一个与输入数组大小相同的数组,包含每个频率的 dB 值。
相关问题
帮我看一下这段代码有什么问题def preprocess_X_Train(audio_path, sr=22050, n_fft=2048, hop_length=512, n_mels=128): # 设置文件夹路径 audio_path = r'G:\Master\Papers\Audio Source\train' # 获取文件夹中所有音频文件的路径 audio_files = [os.path.join(audio_path, f) for f in os.listdir(audio_path) if f.endswith('.wav')] # 遍历所有音频文件并处理 for file_path in audio_files: # 加载语音文件 y, sr = librosa.load(file_path) # 将音频转换为mel频谱图 S = librosa.feature.melspectrogram(y=y, sr=sr) # 将mel光谱图转换为对数mel光谱图 log_S = librosa.power_to_db(S, ref=np.max) # 归一化对数mel光谱图 norm_S = (log_S - np.mean(log_S)) / np.std(log_S) # 扩展尺寸以适应CNN输入形状 train_data = np.expand_dims(norm_S, axis=2) return train_data
这段代码是一个函数,名为preprocess_X_Train,它的作用是对音频文件进行预处理。它有四个参数:audio_path表示音频文件的路径,sr表示采样率,n_fft表示FFT窗口大小,hop_length表示帧移,n_mels表示梅尔滤波器的数量。目前无法确定是否有问题,需要查看函数内部的代码实现才能确定。
用python生成一边录音一边显示FFT动态画布的多线程程序
以下是一份简单的Python多线程程序,用于录音并动态显示FFT:
```python
import pyaudio
import numpy as np
import matplotlib.pyplot as plt
import threading
class AudioRecorder(threading.Thread):
def __init__(self):
super(AudioRecorder, self).__init__()
self.chunk = 1024
self.rate = 44100
self.p = pyaudio.PyAudio()
self.stream = self.p.open(format=pyaudio.paFloat32, channels=1, rate=self.rate, input=True, frames_per_buffer=self.chunk)
self.running = True
def run(self):
while self.running:
data = np.fromstring(self.stream.read(self.chunk), dtype=np.float32)
self.fft(data)
def fft(self, data):
fig, ax = plt.subplots()
ax.set_xlim([0, self.rate / 2])
ax.set_ylim([-50, 50])
ax.set_xlabel('Frequency (Hz)')
ax.set_ylabel('Amplitude (dB)')
ax.set_title('Real-time FFT')
ax.grid(True)
fft_data = np.fft.fft(data)
fft_data = np.abs(fft_data[:int(len(fft_data) / 2)])
fft_data = 20 * np.log10(fft_data / np.max(fft_data))
frequencies = np.linspace(0, self.rate / 2, len(fft_data))
ax.plot(frequencies, fft_data)
plt.show(block=False)
plt.pause(0.001)
plt.clf()
def stop(self):
self.running = False
self.stream.stop_stream()
self.stream.close()
self.p.terminate()
if __name__ == '__main__':
recorder = AudioRecorder()
recorder.start()
input('Press enter to stop recording...')
recorder.stop()
```
此程序使用PyAudio库录制音频,并在FFT动态画布中显示每个块的FFT。每个块的大小可以通过调整“chunk”变量来更改。在程序运行时,可以通过按Enter键来停止录音并关闭程序。
注意:此程序仅用于参考,并可能需要进行修改才能满足您的需求。
阅读全文