这段代码实现了一个计算信号的时频图的函数。具体实现过程如下:

首先,根据输入文件获取采样频率和原始信号数据。

接着,根据'汉明窗'函数对信号进行加窗处理,以减小频谱泄露的影响。

然后,按照时间窗口进行时移,计算每个时间窗口内的信号频谱,并将其存储在一个二维数组中。

最后,对每个频谱数据取对数并返回该二维数组作为时频图。

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
Python代码实现信号的时频图计算

原文地址: https://www.cveoy.top/t/topic/nBpD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录