Hilbert biến đổi để tính đường bao tín hiệu?


27

Tôi đã nghe nói rằng biến đổi Hilbert có thể được sử dụng để tính đường bao của tín hiệu. Cái này hoạt động ra sao? Và "phong bì Hilbert" này khác với phong bì người ta nhận được bằng cách chỉnh sửa tín hiệu như thế nào?

Tôi đặc biệt quan tâm đến việc tìm cách tính toán đường bao để sử dụng trong nén dải động (nghĩa là "giảm âm lượng" của các phần lớn của tín hiệu âm thanh).


Bạn có một số mã làm việc bây giờ? hoặc với Hilbert transsform hoặc phương pháp khác?
Basj

Câu trả lời:


18

Biến đổi Hilbert được sử dụng để tính toán tín hiệu "phân tích". Xem ví dụ http://en.wikipedia.org/wiki/Analytic_signal . Nếu tín hiệu của bạn là sóng hình sin hoặc sóng hình sin được điều chế, cường độ của tín hiệu phân tích thực sự sẽ trông giống như đường bao. Tuy nhiên, tính toán của biến đổi Hilbert không phải là nhỏ. Về mặt kỹ thuật, nó đòi hỏi một bộ lọc FIR không nhân quả có độ dài đáng kể, vì vậy nó sẽ đòi hỏi một lượng MIPS, bộ nhớ và độ trễ hợp lý.

Đối với tín hiệu băng rộng, nó thực sự phụ thuộc vào cách bạn xác định "đường bao" cho ứng dụng cụ thể của mình. Đối với ứng dụng nén dải động của bạn, bạn muốn một số liệu tương quan tốt với nhận thức về độ ồn theo thời gian. Biến đổi Hilbert không phải là công cụ phù hợp cho việc đó.

Một lựa chọn tốt hơn sẽ là áp dụng bộ lọc có trọng số A ( http://en.wikipedia.org/wiki/A- weighting ) và sau đó thực hiện một bộ phát hiện RMS cực đại hoặc mất mát. Điều này sẽ tương quan khá tốt với độ ồn nhận thức theo thời gian và tương đối rẻ để làm.


Cả hai đều không có nguyên nhân, nhưng phương pháp FFT (loại bỏ một nửa phổ và IFFT) thường nhanh hơn bộ lọc FIR?
endolith

Ngoài ra, làm thế nào để phương pháp FFT để tính toán biến đổi Hilbert yêu cầu phi nhân quả? Một người có lẽ chỉ cần một cửa sổ khá lớn để có được hình dạng phong bì hữu ích.
mavavilj

4

Bạn có thể sử dụng biến đổi Hilbert để tính toán một phong bì theo cách sau. (Tôi sẽ viết nó dưới dạng mã MATLAB):

envelope = abs(hilbert(yourTimeDomainSignal));

Tôi không có thời gian để viết toán ra ngay bây giờ, (tôi sẽ thử sau), nhưng rất đơn giản, nói rằng tín hiệu của bạn là một sóng hình sin. Biến đổi Hilbert của một sin là một -cosine. (Nói cách khác, biến đổi hilbert sẽ luôn cung cấp cho bạn tín hiệu của bạn được dịch chuyển theo pha -90 độ - phương trình của nó nói cách khác).

Nếu bạn thêm tín hiệu của mình (sóng hình sin) để nhân với jtín hiệu hilberted của bạn, (sóng -cosine), bạn sẽ nhận được:

sin(wt) - j.*cos(wt)

Điều này cũng xảy ra là e ^ (j * (wt - pi / 2)).

Do đó, khi bạn lấy giá trị tuyệt đối của số này, bạn nhận được 1, đó là phong bì của bạn. (Đối với trường hợp này).


Rất tiếc! Quên dấu hiệu tiêu cực - cảm ơn Dilip, đã sửa bây giờ.
Spacey

2

Tôi nhận thức được ít nhất hai cách riêng biệt để lấy đường bao biên độ từ tín hiệu.

Phương trình chính là:

E(t)^2 = S(t)^2 + Q(S(t))^2

Where Q represents a π/2 phase shift (also known as quadrature signal).

Cách đơn giản nhất mà tôi biết là để Q có thể phân tách S (t) thành một nhóm các thành phần hình sin bằng cách sử dụng FFT, xoay mỗi thành phần một phần tư theo chiều ngược chiều kim đồng hồ (hãy nhớ rằng mỗi thành phần sẽ là một số phức nên một thành phần cụ thể x + iy -> -y + ix) và sau đó kết hợp lại.

Cách tiếp cận này hoạt động khá tốt, mặc dù đòi hỏi một chút điều chỉnh (tôi chưa hiểu rõ về toán học đủ để giải thích điều này theo bất kỳ cách nào tốt hơn)

Có một vài thuật ngữ chính ở đây, cụ thể là 'Biến đổi Hilbert' và 'tín hiệu phân tích'

Tôi tránh sử dụng các thuật ngữ này bởi vì tôi khá chắc chắn rằng tôi đã chứng kiến ​​sự mơ hồ đáng kể trong việc sử dụng chúng.

Một tài liệu mô tả tín hiệu phân tích (phức tạp) của tín hiệu thực gốc f (t) là:

Analytic(f(t)) = f(t) + i.H(f(t))

where H(f(t)) represents the 'π/2 phase shift' of f(t)

trong trường hợp đường bao biên độ chỉ đơn giản là | Giải tích (f (t)) |, đưa chúng ta trở lại phương trình Pythagore ban đầu

Lưu ý: Gần đây tôi đã bắt gặp một kỹ thuật tiên tiến hơn liên quan đến dịch chuyển tần số và bộ lọc kỹ thuật số thông thấp. Lý thuyết là chúng ta có thể xây dựng tín hiệu phân tích bằng các phương tiện khác nhau; chúng tôi phân hủy f (t) thành các thành phần tần số hình sin dương và âm và sau đó chỉ cần loại bỏ các thành phần âm và nhân đôi các thành phần dương. và có thể thực hiện điều này 'loại bỏ thành phần tần số âm' bằng cách kết hợp dịch chuyển tần số và lọc thông thấp. điều này có thể được thực hiện cực kỳ nhanh chóng bằng các bộ lọc kỹ thuật số. Tôi chưa khám phá phương pháp này, vì vậy đây là nhiều như tôi có thể nói vào lúc này.


1
Đây chỉ là những cách khác nhau để tính toán cùng một thứ (cường độ của tín hiệu phân tích thông qua một biến đổi Hilbert). Kỹ thuật "nâng cao" chỉ đơn giản là thực hiện FFT, loại bỏ các tần số âm và sau đó thực hiện FFT ngược. Phần thực là tín hiệu gốc và phần ảo là biến đổi Hilbert của nó. Ma quỷ nằm trong các chi tiết như đóng khung, cửa sổ, chồng chéo và xử lý tuyến tính so với vòng tròn.
Hilmar

2
Thật không thành công khi thấy rằng một số cá nhân đã thấy phù hợp để thưởng cho thời gian và năng lượng mà tôi đã dành cho cộng đồng này (thông qua bài viết trên) với một downvote. Một bài đăng có chứa thông tin vững chắc sẽ có ích cho ai đó.
P i

2
@Hilmar, Có một cách tốt hơn là "loại bỏ các tần số âm" để đạt được Biến đổi Hilbert. Như tôi đã nói, một cách không liên quan đến FFT. Trước những điều trên, tôi không cảm thấy đặc biệt say mê để chi tiết nó ngay bây giờ.
P i

Đánh giá cao câu trả lời chi tiết của bạn về biến đổi Hilbert; muốn đảm bảo rằng điều này được đón nhận, do đó không được nản lòng. Hãy bỏ qua downvote bởi bất cứ ai.

0

vì vậy về cơ bản bạn đang tìm kiếm một Điều khiển tăng tự động (AGC). Không chắc chắn nếu bạn phải làm điều đó bằng cách xử lý kỹ thuật số, nhưng có những mạch tích hợp rất tốt ngoài đó có thể thực hiện nhiệm vụ đó rất tốt, thường thì AGC được tích hợp với rất nhiều tính năng khác, nhưng một số mạch điện có thể được tạo ra bằng bóng bán dẫn JFE và một số điốt.

Nhưng một cách rất dễ hiểu để thực hiện điều này với xử lý kỹ thuật số sẽ là thiết kế một công cụ ước lượng phương sai thích nghi, như lấy một cửa sổ thời gian đủ mẫu để biểu thị 5 hoặc 10 msec, và áp dụng hệ số quên alpha ^ n (alpha <1) mỗi mẫu mới được đưa vào tài khoản nhiều hơn các mẫu trước đây. sau đó dựa trên ước tính phương sai này, bạn thiết kế theo ý muốn của mình, một hàm ánh xạ phương sai tới mức tăng mà bạn áp dụng cho từng mẫu âm thanh. đây có thể là một ranh giới quyết định khó khăn, trong khi nếu phương sai vượt quá ngưỡng nào đó, bạn sẽ giảm mức tăng theo một số yếu tố.

Hoặc có thể là ranh giới quyết định mềm hơn, trong đó bạn tạo một phép biến đổi phi tuyến tính từ phương sai sang mức tăng và áp dụng phép biến đổi cho mọi mẫu dựa trên ước lượng phương sai cuối cùng.

Đây là phương pháp heuristic hơn nhưng ít nhất nó sẽ cứu bạn khỏi tất cả các bài toán nặng.

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.