K210实现麦克风阵列声源定位技术解析

import sensor

import image

import lcd

import time

import KPU as kpu

from fpioa_manager import *

from Maix import GPIO

# 设置麦克风阵列

fm.register(board_info.MIC_ARRAY_DATA, fm.fpioa.I2S0_IN_D0, force=True)

fm.register(board_info.MIC_ARRAY_WS, fm.fpioa.I2S0_WS, force=True)

fm.register(board_info.MIC_ARRAY_BCK, fm.fpioa.I2S0_SCLK, force=True)

# 初始化LCD

lcd.init()

lcd.rotation(2)

# 初始化麦克风阵列

mic_dev = I2S(I2S.DEVICE_0)

# 设置麦克风阵列参数

sample_rate = 32000

record_time = 5000

samples_per_record = sample_rate * record_time // 1000

mic_dev.sample_rate(sample_rate)

# 初始化KPU

lcd.draw_string(100, 100, "Initializing KPU…")

sensor.reset()

sensor.set_pixformat(sensor.RGB565)

sensor.set_framesize(sensor.QVGA)

sensor.set_vflip(1)

sensor.run(1)

sensor.skip_frames(30)

lcd.draw_string(100, 100, "Loading Model…")

task = kpu.load(0x300000)

# 循环读取麦克风数据并进行声源定位

while True:

    try:

        lcd.draw_string(100, 150, "Recording…")

        mic_dev.rec(samples_per_record)

        lcd.draw_string(100, 150, "Processing…")

        pcm_data = mic_dev.record_read(samples_per_record)

        pcm_data = bytes([int(i / 256) for i in pcm_data])

        a = kpu.forward(task, pcm_data)

        output = kpu.get_output(task, 0)

        max_index = output.index(max(output))

        lcd.draw_string(100, 200, "Sound from direction: %d" % max_index)

    except Exception as e:

        print(e)

        lcd.draw_string(100, 200, "Error occurred!")

        continue

# 释放资源

mic_dev.deinit()

kpu.deinit(task)

物联沃分享整理
物联沃-IOTWORD物联网 » K210实现麦克风阵列声源定位技术解析

发表评论