Tôi cần phải tìm tần số của mẫu, được lưu trữ (trong vb) dưới dạng một mảng byte. Mẫu là sóng sin, tần số đã biết, vì vậy tôi có thể kiểm tra), nhưng các con số hơi lạ và toán học của tôi yếu. Phạm vi đầy đủ các giá trị 0-255. 99% số nằm trong khoảng từ 235 đến 245, nhưng có một số ngoại lệ xuống 0 và 1 và lên tới 255 trong 1% còn lại. Làm cách nào để bình thường hóa điều này để loại bỏ các ngoại lệ, (tính khoảng thời gian 235-245 vì nó có thể thay đổi với các mẫu khác nhau), và làm thế nào để tính toán số không giao cắt để nhận tần số? Xin lỗi nếu mô tả này là rác!Phân tích toán học của một mẫu âm thanh (như một mảng số)
Trả lời
Các FFT có lẽ là câu trả lời tốt nhất, nhưng nếu bạn thực sự muốn làm điều đó bằng phương pháp của bạn, hãy thử này:
Để bình thường, trước tiên hãy một biểu đồ để đếm có bao nhiêu occurrances của mỗi giá trị từ 0 đến 255 . Sau đó ném ra X phần trăm các giá trị từ mỗi đầu với cái gì đó như:
for (i=lower=0;i< N*(X/100); lower++)
i+=count[lower];
//repeat in other direction for upper
Bây giờ bình thường hóa với
A[i] = 255*(A[i]-lower)/(upper-lower)-128
vứt bỏ kết quả bên ngoài phạm vi -128..127.
Bây giờ bạn có thể đếm số lần giao cắt bằng không. Để chắc chắn rằng bạn không bị lừa bởi tiếng ồn, bạn có thể muốn theo dõi độ dốc trên một vài điểm cuối cùng, và chỉ đếm số lần vượt qua khi độ dốc trung bình đang đi đúng hướng.
Sử dụng biến đổi Fourier, nó nhiều hơn tiếng ồn không nhạy cảm hơn đếm zero cửa
Edit: @WaveyDavey
Tôi tìm thấy một F # thư viện để làm một FFT: From here
Khi nó quay ra, triển khai miễn phí tốt nhất mà tôi đã tìm thấy cho người dùng F # cho đến nay vẫn là thư viện FFTW tuyệt vời . Trang web của họ có biên dịch sẵn Windows DLL. Tôi đã viết các ràng buộc tối thiểu cho phép truy cập an toàn chủ đề tới F2W vào FFTW từ F #, với cả giao diện người dùng và giao diện đơn giản. Hiệu suất tuyệt vời, 32-bit Windows XP Pro chỉ lên tới 35% chậm hơn 64 bit so với Linux.
Bây giờ tôi chắc chắn rằng bạn có thể gọi F # lib từ VB.net, C# vv, mà phải ở trong tài liệu của họ
Bất kỳ con trỏ nào cho noob để thực hiện DFT/FFT trong VB từ mảng byte? –
Nếu tài liệu không rõ ràng, tôi chỉ cần đặt câu hỏi được gắn thẻ .net, "cách gọi F # lib từ VB?" – Purfideas
Các phương pháp tiêu chuẩn để tấn công vấn đề này là phải xem xét một khối dữ liệu, hy vọng ít nhất hai lần tần số thực tế (lấy thêm dữ liệu không phải là xấu, vì vậy nó tốt để đánh giá quá cao một chút), sau đó lấy FFT và đoán rằng tần số tương ứng với số lớn nhất trong phổ FFT kết quả.
Nhân tiện, các vấn đề tương tự đã được hỏi ở đây trước đây - bạn cũng có thể tìm kiếm các câu trả lời đó.
Tôi googled cho "fft cơ bản". Visual Basic FFT Câu hỏi của bạn hét lên FFT, nhưng hãy cẩn thận, bằng cách sử dụng FFT mà không hiểu một chút về DSP có thể dẫn đến kết quả mà bạn không hiểu hoặc không biết chúng đến từ đâu.
Nếu tôi hiểu rõ từ mô tả của bạn, những gì bạn có là tín hiệu kết hợp giữa sin và hằng số cộng với một số trục trặc ngẫu nhiên. Nói, giống như
x[n] = A*sin(f*n + phi) + B + N[n]
trong đó N [n] là nhiễu "trục trặc" bạn muốn loại bỏ.
Nếu trục trặc dài một mẫu, bạn có thể loại bỏ chúng bằng bộ lọc trung bình phải lớn hơn chiều dài trục trặc. Trên cả hai mặt của trục trặc. Độ ổn định của chiều dài 1, có nghĩa là bạn sẽ có đủ với một trung bình của 3 mẫu chiều dài.
y[n] = median3(x[n])
Các trung bình được tính toán như vậy: Lấy mẫu x bạn muốn lọc (x [n-1], x [n], x [n + 1]), sắp xếp chúng, và đầu ra của bạn là cái ở giữa.
Hiện tại, tín hiệu nhiễu sẽ biến mất, loại bỏ tín hiệu không đổi. Tôi hiểu bộ đệm có độ dài giới hạn và đã biết, vì vậy bạn có thể tính toán trung bình của toàn bộ bộ đệm. Trừ nó đi.
Bây giờ bạn có tín hiệu xoang đơn. Bây giờ bạn có thể tính toán tần số cơ bản bằng cách đếm số lần giao cắt không. Đếm số lượng mẫu trên 0 trong đó mẫu cũ dưới 0. Thời gian là tổng số mẫu của bộ đệm của bạn chia cho điều này, và tần số là oposite (1/x) của giai đoạn.
Mặc dù tôi sẽ đi với đa số và nói rằng nó có vẻ như những gì bạn muốn là một giải pháp fft (thuật toán fft là khá nhanh), nếu fft không phải là câu trả lời cho bất cứ lý do bạn có thể muốn thử lắp một đường cong sin cho dữ liệu bằng cách sử dụng chương trình phù hợp và đọc tần số được trang bị.
Sử dụng Fityk, bạn có thể tải dữ liệu và phù hợp với a*sin(b*x-c)
trong đó 2*pi/b
sẽ cung cấp cho bạn tần suất sau khi lắp.
Fityk có thể được sử dụng từ một gui, từ dòng lệnh để tạo tập lệnh và có API C++ để có thể được đưa vào chương trình của bạn trực tiếp.
lấy Bộ phân tích tần số tại http://www.relisoft.com/Freeware/index.htm và chạy nó và xem mã.
- 1. Phân tích âm thanh iPhone
- 2. Trình phân tích phổ tần số âm thanh JavaScript
- 3. Phân tích âm thanh bằng Fast Fourier Transform
- 4. Cho một dòng âm thanh, tìm thấy khi một đóng sầm cửa (tính toán mức độ áp lực âm thanh?)
- 5. Chạy một ngôn ngữ tổng hợp/phân tích âm thanh trên một thiết bị nhúng
- 6. Phân tích âm thanh Birdsong - tìm thấy hai clip phù hợp với nhau như thế nào
- 7. Phân tích âm thanh thời gian thực trong Linux
- 8. In một mảng số nguyên như số thập lục phân
- 9. Tạo một máy trạm âm thanh kỹ thuật số
- 10. Phát hiện tần số từ một tệp âm thanh
- 11. Truy cập một mảng có số âm!
- 12. Phân tích một mảng Ruby để JSON
- 13. phân tích chuỗi chứa một mảng
- 14. Authorize.net Tích hợp thanh toán
- 15. Phát âm thanh và âm thanh thuật toán
- 16. Phân tích tín hiệu Android + một số bộ lọc
- 17. Thư viện trình phân tích cú pháp toán học Javascript
- 18. Cần thư viện phân tích âm thanh để tạo phản hồi thời gian thực từ tệp âm thanh?
- 19. (La) Phân tích cú pháp toán học cho C/C++
- 20. Nhận mảng byte âm thanh với API âm thanh HTML5?
- 21. Tích hợp thanh toán PayPal
- 22. Thời gian chạy của các hàm toán học toán học
- 23. Xáo trộn phân tích thuật toán
- 24. Kadane Thuật toán số âm
- 25. Phân tích cú pháp một mảng JSON thành một NSDictionary
- 26. Đi qua một lớp học như một tham số của một thủ tục trong Delphi XE
- 27. Phân tích phương trình toán học cơ bản cho phần mềm giáo dục của trẻ em?
- 28. Vị trí Woocommerce của mẫu thanh toán
- 29. Thiết kế thông minh của trình phân tích cú pháp toán học?
- 30. Thuật toán tạo âm thanh thủ tục?
không phải rác. tốt câu hỏi thực sự. – Purfideas
Bạn có thể muốn thay đổi tiêu đề thành "một mảng số" –