Nhận âm lượng của bản nhạc với RMS


15

Tôi đang cố gắng tính toán độ to của bản nhạc mà tôi đã lưu trong bộ đệm. Bộ đệm chứa dữ liệu PCM của tín hiệu và tôi muốn nhận được mức độ lớn của nó bằng cách sử dụng Root Mean Squared. Tôi giả sử tôi có thể làm điều này trong miền thời gian thay vì phải chuyển sang miền tần số. Mã giả để làm điều này là gì?

Tôi có thể chỉ cần lấy mẫu trong một giây (âm thanh [0] - âm thanh [44099], âm thanh [44099] - âm thanh [88199] vv ..) và tính RMS của các giá trị đó? Vì vậy, ví dụ, tôi sẽ làm điều này:

RMS= =âm thanh[0]2+âm thanh[1]2+âm thanh[2]2.....âm thanh[44099]244100

cho mỗi giây?


1
Có một dấu ngoặc bị thiếu trong biểu thức ở trên - Tôi muốn tự thêm nó nhưng các chỉnh sửa cần có ít nhất 6 ký tự rõ ràng ...
Paul R

3
@PaulR - Bạn có thể thêm một <!-- html comment -->để khắc phục hạn chế ký tự trong trường hợp hiếm hoi rằng một bài viết hoàn hảo khác có một lỗi nhỏ nhưng rất quan trọng. Nhu cầu này rất hiếm khi xảy ra: thường phải thực hiện hơn 6 ký tự cải tiến. Ví dụ: khi thiếu dấu ngoặc, thường sử dụng \sqrt{}\frac{}{}cấu trúc trong TeX thường tốt hơn .
Kevin Vermeer

1
@Kevin: cảm ơn vì tiền boa - Tôi sẽ sử dụng đề xuất nhận xét HTML của bạn trong tương lai.
Paul R

@PaulR - Điều này đã được thảo luận trước đây: Hạn chế là có chủ ý, được thiết kế để ngăn chặn các chỉnh sửa không hoàn chỉnh hoặc vô nghĩa (xem phần bảo vệ ở đây ), nhưng có đối thủ của nó (xem thảo luận tại đây ).
Kevin Vermeer

4
Lưu ý rằng RMS một mình không cho bạn biết tiếng ồn. Tần số cực thấp hoặc âm thanh cao có âm lượng thấp hơn 3 kHz của cùng một giá trị RMS. Bộ lọc trọng số A sẽ cho bạn ước tính chính xác hơn. gist.github.com/148112
endolith

Câu trả lời:


12

Một điều nữa là giá trị RMS không tương quan tốt với độ ồn cảm nhận được. Bạn có thể muốn xem xét việc gọi nó là mức hoặc âm lượng thay thế. Có một thứ gọi là đường viền âm lượng bằng nhau, định lượng mức độ nhạy cảm của tai với một mức độ đặc biệt so với tần số khác, xem bài viết Wikipedia . Những đường cong phụ thuộc vào cấp độ. Chẳng hạn, tai rất nhạy với âm 1kHz so với âm 100Hz, như trong hình này (trục ngang là tần số tính bằng Hz):

đường viền âm lượng bằng nhau

Một trong những điều đơn giản tương đối bạn có thể làm là lọc dữ liệu PCM của bạn với đường cong âm lượng lớn bằng nhau. Hoặc bạn có thể áp dụng trọng số A tiêu chuẩn, xem bài viết Bộ lọc trọng số Wikipedia . Sau đó, bạn có thể tính giá trị RMS của đầu ra của bộ lọc có trọng số âm lượng bằng nhau.


Tôi không rõ làm thế nào để đi từ mã quesitoner này. Ví dụ của câu hỏi là tổng hợp các bình phương của các mẫu âm thanh. Câu trả lời là nói về việc áp dụng bộ lọc cho các tần số để có vẻ như "lọc dữ liệu PCM của bạn với đường cong âm lượng lớn bằng nhau" là không đủ. Trước tiên bạn phải có giá trị cho từng tần số, sau đó bạn có thể tìm ra cách áp dụng đường cong phải không? Nhưng đó là một bước tiến lớn.
gman

@gman Ý tưởng là xử lý trước âm thanh bằng bộ lọc và sau đó sử dụng kết quả như trong câu hỏi (tính toán RMS). Tôi không chắc chắn 100% ý của bạn là gì. Bạn không chắc chắn làm thế nào để lọc hoặc có lẽ là thiết kế bộ lọc?
niaren
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.