以下是我的代碼
在執行時顯示出來的音訊值都為0
請問要如何修正以下的代碼讓裝置可以正常作動
I2C Scan: [17, 25, 32, 41, 56]
2
4096
audio_data: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0........]
rms: 0.0
db: None
from machine import Pin, I2S, I2C
import math
def calculate_decibel(audio_data):
print("audio_data: ", audio_data)
sum_squares = sum(sample ** 2 for sample in audio_data)
rms = math.sqrt(sum_squares / len(audio_data))
if rms == 0.0:
print("rms:", rms)
else:
reference_voltage = 3.3
db = 20 * math.log10(rms / reference_voltage)
return db
i2s = I2S(
0, # I2S 编号
sck=p0, # 时钟引脚 I2S_BLCK
ws=p38, # 字选择引脚
sd=p39, # 数据引脚
mode=I2S.RX, # 接收模式
bits=16, # 16位数据
format=I2S.MONO, # 单声道
rate=44100, # 采样率 16kHz 16000
ibuf=4096 # 缓冲区大小
)
i2c = I2C(0, scl=p48, sda=p47, freq=400000)
i2c.writeto(17, b'\x15\x10')
audio_buffer = bytearray(4096)
i2s.readinto(audio_buffer)
samples = [int.from_bytes(audio_buffer[i:i+2], 'little', True) for i in range(0, len(audio_buffer), 2)]
current_db = calculate_decibel(samples)
print("db:", current_db)