短时傅里叶变换(Short Time Fourier Transform)原理及 Pyt...

一、短时傅里叶变换原理

短时傅里叶变换(Short Time Fourier Transform,STFT)是傅里叶变换的一种变形,它把信号分成若干段,每段做傅里叶变换,然后把这些变换拼接起来,构成一个时频图,反映信号在不同时间下不同频率的分布情况。

在时域表达的信号为$f(t)$,它的傅里叶变换为$F(\omega)$,那么,对于一段时间$t_0$到$t_0 + T$内的信号$f(t)$,它的STFT可以表示为:

$$

STFT_{f}(t, \omega)=\int_{-\infty}^{\infty} f(\tau)w(\tau-t)e^{-j \omega \tau} d \tau

$$

其中,$w(\tau)$为窗函数。解释一下上式的意义:首先,对于每个$t$,我们都会把$f(t)$分割为一段长度为$T$的信号$f_{T}(t)=f(t)w(t)$,其中$w(t)$为窗函数;然后对于每段信号$f_{T}(t)$,做一次快速傅里叶变换(FFT),得到它的频域形态$F_{T}(\omega)$;最后,把所有的$F_{T}(\omega)$拼接起来,就得到了整个信号的时频图$STFT_{f}(t, \omega)$。

短时傅里叶变换的好处是它在不同时间窗口内处理了不同频率段的信号,使得我们可以通过时频图直观地观察音频信号随时间变化的频谱特征。

二、Python实现

Python有很多库可以实现STFT,其中最著名的要数librosa了,它是一款专门用于音频信号分析的库,可以读取、处理和分析音频文件。

下面我们以一段wav格式的音频文件为例进行STFT的实现。

首先,我们需要用librosa库读取音频文件,读取之后得到的是一个numpy数组,以及采样率。

``` python

import librosa

# 读取音频文件

y, sr = librosa.load('audio.wav', sr=22050)

```

其中,sr=22050表示指定采样率为22050Hz。

我们可以使用matplotlib库绘制音频信号的波形图,来直观地观察音频信号的形态。

``` python

import matplotlib.pyplot as plt

# 绘制音频信号的波形图

plt.figure(figsize=(14, 5))

librosa.display.waveplot(y, sr=sr)

plt.title('Time domain waveform')

plt.xlabel('Time (s)')

plt.ylabel('Amplitude')

plt.show()

```

绘制出的波形图如下所示:

![image](https://github.com/Light-City/Images/blob/main/stft_1.png)

接下来,我们使用librosa库实现STFT,得到音频信号的时频图。

``` python

# 计算STFT,参数n_fft表示傅里叶变换点数,即FFT的长度;参数hop_length表示窗函数每次向右滑动多少个采样点

spectrogram = librosa.stft(y, n_fft=2048, hop_length=512, win_length=2048, window='hann')

# 将复数表示的幅度谱转化为常规表示的谱

spectrogram = np.abs(spectrogram)

# 绘制时频图

plt.figure(figsize=(14, 5))

librosa.display.specshow(librosa.amplitude_to_db(spectrogram, ref=np.max), sr=sr, hop_length=512, x_axis='time', y_axis='log')

plt.colorbar(format='%+2.0f dB')

plt.title('Spectrogram (dB)')

plt.tight_layout()

plt.show()

```

在绘制时频图时,我们使用了`librosa.amplitude_to_db`函数,将幅度谱转化为分贝(dB)表示,方便观察。

最终得到的时频图如下所示:

![image](https://github.com/Light-City/Images/blob/main/stft_2.png)

可以看到,在时间轴上,信号被分成了多个时间段,在频率轴上则展现了信号在不同频段上的能量分布情况,而颜色的深浅则表示能量的大小,可以更加直观地观察到音频信号的频谱特征。

三、案例说明

本文的例子中使用的音频文件是一段钢琴曲,我们可以通过观察它的时频图,看到钢琴演奏中每个音符的频率分布情况,进而分析不同乐器的音色、语音的音调等问题。

另外,STFT还有很多应用,比如压缩音频、音乐合成等,都需要对音频信号进行时频分析。而且,由于深度学习中卷积神经网络的局部感知机制与短时傅里叶变换的思想有些类似,因此短时傅里叶变换在音频信号处理和深度学习领域都有很大的应用潜力。

壹涵网络我们是一家专注于网站建设、企业营销、网站关键词排名、AI内容生成、新媒体营销和短视频营销等业务的公司。我们拥有一支优秀的团队,专门致力于为客户提供优质的服务。

我们致力于为客户提供一站式的互联网营销服务,帮助客户在激烈的市场竞争中获得更大的优势和发展机会!

点赞(107) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部