本文主要是介绍K210机器听觉—FFT 信号处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
K210机器听觉—FFT 信号处理
- 使用设备
- ZTFR开发板
- 快速傅里叶变换
- 使用方法
- 构造函数
- 使用方法
- 示例代码
使用设备
ZTFR开发板
快速傅里叶变换
FFT 即快速傅里叶变换(Fast Fourier Transform),将时域信号转化为频域信号,应用范围非常广,例如消除音频图像噪声。
快速傅里叶变换:百度百科
使用方法
k210 带有硬件 FFT 模块,支持 64 点、 128 点、 256 点以及 512 点的 FFT。
#导入 FFT 模块
import FFT
#输入时域数据(例如音频数据)并进行 FFT 运算
res = FFT.run(data, points, shift)
构造函数
import FFT
FFT1 = FFT.run(data, points, shift)'''FFT 运算模块;【data】输入的时域数据,bytearray 类型; 【points】FFT 运算点数,仅支持 64,128,256 和 512 点;【shift】偏移,默认为 0。返回值 FFT_res: 返回计算后的频域数据,以 list 类型呈现,该列表有 points个元组,每个元组有 2 个元素,第一个元素为实部,第二个为虚部.'''
使用方法
res = FFT.freq(points, sample_rate)'''频率计算; 【points】计算点数; 【sample_rate】采样率;返回值 res : 返回一个列表,该列表存放的进行运算后后所有频率点的频率值;'''
amp = FFT.amplitude(FFT_res)'''计算各个频率点的幅值;返回值 amp: 返回一个列表,该列表存放了各个频率点的幅值'''
示例代码
采集声音并进行FFT运算,将运算后的数据在屏幕上显示为柱状图
from Maix import GPIO, I2S, FFT
import image, lcd, math
from fpioa_manager import fm#FFT参数配置
sample_rate = 38640 #采样率
sample_points = 1024 #音频采样点数
fft_points = 512 #FFT运算点数
hist_x_num = 50 #条形柱数量
x_shift = 0 #频率#lcd初始化
lcd.init()#麦克风初始化
fm.register(20,fm.fpioa.I2S0_IN_D0, force=True)
fm.register(19,fm.fpioa.I2S0_WS, force=True)
fm.register(18,fm.fpioa.I2S0_SCLK, force=True)rx = I2S(I2S.DEVICE_0)
rx.channel_config(rx.CHANNEL_0, rx.RECEIVER, align_mode = I2S.STANDARD_MODE)
rx.set_sample_rate(sample_rate)#设置LCD条形柱显示宽度
if hist_x_num > 320:hist_x_num = 320
hist_width = int(320 / hist_x_num) #changeable#新建一张图片
img = image.Image()while True:audio = rx.record(sample_points) #采集音频fft_res = FFT.run(audio.to_bytes(),fft_points) #FFT运算fft_amp = FFT.amplitude(fft_res) #计算频谱幅值img = img.clear()x_shift = 0#计算幅值,最大为240(LCD高为240像素)for i in range(hist_x_num):if fft_amp[i] > 240:hist_height = 240else:hist_height = fft_amp[i]#计算要显示的图像,矩形实心显示。img = img.draw_rectangle((x_shift,240-hist_height,hist_width,hist_height),[255,255,255],2,True)x_shift = x_shift + hist_widthlcd.display(img) #LCD显示fft_amp.clear() #幅度值清0
效果
这篇关于K210机器听觉—FFT 信号处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!