猪百岁 发表于 2021-3-28 10:14:49

【新手基础教程】传统算法之音频处理

本帖最后由 猪百岁 于 2021-3-28 10:14 编辑

## FFT 信号处理

FFT 即快速傅里叶变换(Fast Fourier Transform),将时域信号转化为频域信号,应用范围非常广,例如消除音频图像噪声。

### 1. 使用方法

k210 带有硬件 FFT 模块,支持 64 点、 128 点、 256 点以及 512 点的 FFT。

-   导入 FFT 模块

```
import FFT

```

-   输入时域数据(例如音频数据)并进行 FFT 运算

```
res = FFT.run(data, points, shift)

```

相关 API 解释请参考(https://cn.maixpy.sipeed.com/zh/api_reference/Maix/fft.html)

### 2. 例程

采集声音并进行 FFT 运算,将运算后的数据在屏幕上显示为柱状图:(https://github.com/sipeed/MaixPy_scripts/blob/master/hardware/demo_fft_spectrum.py)

效果:

(https://www.bilibili.com/video/BV1wb41187X8?from=search&seid=9574029909950554976)

## FFT 瀑布图(雨图)

FFT 瀑布图即为数据随时间变化的频率分布图,下面将介绍如何使用 MaixPy 绘制瀑布图。

### 1. 绘制方法

-   准备时域信号(例如音频数据)

```
rx = I2S(I2S.DEVICE_0)
rx.channel_config(rx.CHANNEL_0, rx.RECEIVER, align_mode = I2S.STANDARD_MODE)
rx.set_sample_rate(sample_rate)
audio = rx.record(sample_points)

```

-   进行FFT运算(将数据进行 FFT 运算并获取其频率分布情况)

```
fft_points = 512
fft_res = FFT.run(audio.to_bytes(),fft_points)
fft_amp = FFT.amplitude(fft_res)

```

-   绘制在 image (由于 FFT 结果的对称性,只需要绘制其中一部分即可)

```
hist_x_num = 128
img = image.Image(size=(128,128))
for i in range(hist_x_num):
      img = fft_amp

```

_详细API参考(https://cn.maixpy.sipeed.com/zh/api_reference/Maix/i2s.html),(https://cn.maixpy.sipeed.com/zh/api_reference/Maix/fft.html)_

### 2. 例程

> 以下例程在固件v0.5.1 MaixDock 测试通过

实时采集音频数据并绘制为 FFT 瀑布图

(https://github.com/sipeed/MaixPy_scripts/blob/master/hardware/demo_fft_waterfall.py)

效果:

![](https://cn.maixpy.sipeed.com/assets/course/fft_waterfall.gif)
页: [1]
查看完整版本: 【新手基础教程】传统算法之音频处理