Python实现两信号相位差计算

利用FFT计算相位差

假设用两个麦克风同时录制一段音频,得到两个单声道的ogg文件

import numpy as np
import soundfile as sf

audio1, _ = sf.read('030_1.ogg')
audio2, _ = sf.read('030_2.ogg')
# 对音频进行傅里叶变换
fft1 = np.fft.fft(audio1)
fft2 = np.fft.fft(audio2)
# 计算幅度谱和相位谱
amp1 = np.abs(fft1)
amp2 = np.abs(fft2)
phase1 = np.angle(fft1)
phase2 = np.angle(fft2)
# 找到幅度谱中的最大值索引
index1 = np.argmax(amp1)
index2 = np.argmax(amp2)
# 计算相位差(角度)
phase_diff = (phase2[index2] - phase1[index1]) * 180 / np.pi
print("相位差: ", phase_diff)

已知频率和声速,可以使用公式:相位差(弧度)= 2π * (频率 / 速度) * 距离

将得到的相位差转化为距离

frequency = 44100  # 频率(采样率)
speed_of_sound = 340  # 声速(米/秒)
# 将相位差转换为弧度
phase_diff_rad = np.deg2rad(phase_diff)
# 计算距离
distance = (phase_diff_rad * speed_of_sound) / (2 * np.pi * frequency)
print("距离: ", distance, "米")

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值