在原始音频信号中查找录制的子信号

2024-10-03 04:34:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个源音频信号和其他6个部分的信号,短得多的原始,记录了一些麦克风。我需要找出这些子信号是从主音频的什么地方录下来的

我尝试将参考信号(长信号)与每个子信号关联起来,并找到最大互相关。六分之五有效

curFol = os.getcwd()
audioNames = [name for name in os.listdir(curFol) if name.endswith('wav')]

audioSignals, audioFs = [], []
for name in audioNames:
    sig, fs = sf.read(name)
    audioSignals.append(sig)
    audioFs.append(fs)

sigSizes = [s.shape[0] for s in audioSignals]
refSignal = audioSignals[np.argmax(sigSizes)]
fs = np.unique(audioFs)
muRef = np.mean(refSignal)
sigmaRef = np.sqrt(np.mean(refSignal ** 2) - muRef ** 2)
muSigs = [np.mean(sig) for sig in audioSignals[1 : ]]
sigmaSigs = [np.sqrt(np.mean(sig ** 2) - muRef ** 2) for sig in audioSignals[1 : ]]

timeCorr = []
refSig = (refSignal - muRef) / sigmaRef
for (i, sig) in enumerate(audioSignals[1 : ]):
    currSig = (sig - muSigs[i]) / sigmaSigs[i]
    sigCorr = signal.correlate(refSig, currSig, mode = 'full', method = 'fft')
    timeCorr.append(np.argmax(sigCorr) - sig.shape[0] + 1)

其中一个子信号在错误的位置具有最大的相关性。我需要更好更可靠的方法来解决这个问题


Tags: nameinfor信号np音频meanfs