Python代码实现信号的时频图计算
这段代码实现了一个计算信号的时频图的函数。具体实现过程如下:
首先,根据输入文件获取采样频率和原始信号数据。
接着,根据'汉明窗'函数对信号进行加窗处理,以减小频谱泄露的影响。
然后,按照时间窗口进行时移,计算每个时间窗口内的信号频谱,并将其存储在一个二维数组中。
最后,对每个频谱数据取对数并返回该二维数组作为时频图。
def compute_fbank(file):
x = np.linspace(0, 400 - 1, 400, dtype=np.int64)
w = 0.54 - 0.46 * np.cos(2 * np.pi * (x) / (400 - 1)) # 汉明窗
fs, wavsignal = wav.read(file)
# wav波形 加时间窗以及时移10ms
time_window = 25 # 单位ms
wav_arr = np.array(wavsignal)
range0_end = int(len(wavsignal) / fs * 1000 - time_window) // 10 + 1 # 计算循环终止的位置,也就是最终生成的窗数
data_input = np.zeros((range0_end, 200), dtype=np.float) # 用于存放最终的频率特征数据
data_line = np.zeros((1, 400), dtype=np.float)
for i in range(0, range0_end):
p_start = i * 160
p_end = p_start + 400
data_line = wav_arr[p_start:p_end]
data_line = data_line * w # 加窗
data_line = np.abs(fft(data_line))
data_input[i] = data_line[0:200] # 设置为400除以2的值(即200)是取一半数据,因为是对称的
data_input = np.log(data_input + 1)
# data_input = data_input[::]
return data_input
原文地址: https://www.cveoy.top/t/topic/nBpD 著作权归作者所有。请勿转载和采集!