Đo thời gian trễ của tín hiệu âm thanh


9

Trước khi ai đó hét vào mặt tôi, tôi hoàn toàn nhận ra rằng câu hỏi này đã được hỏi rất nhiều lần. Tôi đảm bảo với bạn rằng tôi đã đọc qua các câu hỏi và câu trả lời hiện có nhưng tôi vẫn bối rối về một phần của vấn đề.

Tôi có một nguồn âm thanh phát nhạc (A) trong môi trường kín. Tôi có mic mà tôi đang sử dụng để ghi A. Tôi còn lại hai tệp wav có cùng đặc điểm và độ dài (số lượng mẫu).

Mục tiêu của tôi là tính thời gian để A đạt mic.

Tôi đang cố gắng thực hiện tính toán bằng cách sử dụng tương quan chéo (numpy):

# Delay estimation
corr = numpy.convolve(original_audio, recorded_audio, 'full')
delay = int(len(corr)/2) - numpy.argmax(corr)
distance = delay / sample_rate * 343 # sample_rate == 22050, m/s = speed of sound
print("Distance full: %.2f cm" % (distance * 100))

Tôi luôn đạt được các giá trị trong phạm vi 300.000 cm. Khoảng cách giữa loa và mic là khoảng 2 feet.

Đây là tất cả khá mới đối với tôi vì vậy tôi chắc chắn rằng tôi đang thiếu một cái gì đó rõ ràng.

Cảm ơn trước.


3
Bạn có chắc chắn không nên sử dụng numpy.correlatethay vì numpy.convolve? Để ước tính độ trễ, bạn muốn tương quan chéo các tín hiệu của mình, không kết hợp chúng. Bạn có thể sẽ kết thúc với một độ trễ lớn hơn nhiều bằng cách kết hợp.
Peter K.

PeterK có khả năng đúng. Lưu ý rằng bạn có thể thực hiện tương quan thông qua tích chập bằng cách đảo ngược thời gian và liên hợp một trong các đầu vào trước. Điều này có thể cho phép bạn sử dụng các thuật toán tích chập nhanh (như lưu chồng lấp) để tương quan.
Jason R

Câu trả lời:


8

Bạn có chắc chắn không nên sử dụng numpy.correlatethay vì numpy.convolve? Để ước tính độ trễ, bạn muốn tương quan chéo các tín hiệu của mình, không kết hợp chúng. Bạn có thể sẽ kết thúc với một độ trễ lớn hơn nhiều bằng cách kết hợp.

Thử một cái gì đó đơn giản:

x = [1, 0, 0, 0, 0 ];
y = [0, 0, 0, 0, 1 ];
conv = numpy.convolve(x,y); 
conv
array([0, 0, 0, 0, 1, 0, 0, 0, 0])
corr = numpy.correlate(x,y,"full");
corr
array([1, 0, 0, 0, 0, 0, 0, 0, 0])

3
Đây chính xác là những gì tôi đang tìm kiếm. Một ví dụ khác tôi đã thấy tích chập đã sử dụng và nó đã không xảy ra với tôi rằng tương quan trực tiếp sẽ là lựa chọn chính xác. Cảm ơn bạn.
CaymanEss
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.