Ước tính thời gian khởi phát của một giai điệu bùng nổ trong tiếng ồn?


14

Những kỹ thuật nào người ta có thể sử dụng để ước tính thời gian khởi phát của âm hình sin phát ra trong tín hiệu nhiễu?

Giả sử cụm âm có tần số cố định đã biết (nhưng pha không xác định) và thời gian tăng rất mạnh và mục tiêu là ước tính thời gian khởi động trong khoảng hơn một nửa thời gian tăng và / hoặc một khoảng thời gian của tần số của âm , nếu có thể. Các kỹ thuật ước tính có thể thay đổi như thế nào nếu tỷ lệ S / N rất thấp (ít hơn 1)?

Đã thêm: Giả sử cụm âm có độ dài không xác định, nhưng dài hơn bội số nhỏ của thời gian tăng và chu kỳ tần số.

Đã thêm: DFT / FFT cho thấy sự tồn tại rất có thể xảy ra của âm. Vấn đề là tìm ra chính xác chính xác nơi trong cửa sổ FFT, âm (hoặc có thể nhiều âm có cùng tần số) có thể đã bắt đầu trong cửa sổ FFT hoặc xác định xem âm hiện tại có bắt đầu bên ngoài cửa sổ DFT đó không, miễn là tôi có tất cả dữ liệu miền thời gian bổ sung.

Độ chính xác phát hiện xung radar gần với độ phân giải tôi cần, ngoại trừ tôi chỉ có một cạnh, vì âm có độ dài không xác định, và, ngoài thời gian tăng đã biết, không được điều chế. Bộ lọc thông dải hẹp làm biến dạng thời gian tăng và do đó giết chết độ phân giải ước tính cạnh.


1
Chúng ta có thể giả định bất cứ điều gì về tiếng ồn? Có phải là văn phòng phẩm? Nó có tuân theo bất kỳ loại phân phối nào không?
Phonon

2
Là báo động sai từ máy dò của bạn không mong muốn? Bạn có một đặc điểm kỹ thuật về xác suất phát hiện chính xác từng xung? Điều này rất giống với (một phiên bản đơn giản hóa) xử lý tín hiệu radar mặt trước; định vị các xung (có thể được điều chế) được nhúng trong nhiễu và ước tính các tham số của chúng.
Jason R

1
Bạn có cần phải làm điều này trong thời gian thực, hoặc nó là một phân tích ngoại tuyến?
nibot

2
@ hotpaw2: Bạn không thích điều gì về thuật toán Goertzel theo câu trả lời SO này ?
Peter K.

1
Thuật toán Goertzel được sử dụng để phát hiện giai điệu, dường như là những gì bạn đang theo đuổi. Đầu ra của bộ lọc là ước tính "công suất" của tín hiệu ở tần số mà nó được điều chỉnh. Chọn một ngưỡng. Nếu đầu ra của bộ lọc ở trên mức này, bạn đã phát hiện thấy âm báo. Đặt ngưỡng của bạn một cách thích hợp và bạn có thể phát hiện sự khởi đầu của âm báo sớm hơn (và cũng dễ bị báo động sai hơn).
Peter K.

Câu trả lời:


6

Như chúng ta đã thảo luận trong các ý kiến, thuật toán Goertzel là cách thông thường để phát hiện âm báo trong tiếng ồn. Sau cuộc thảo luận, tôi không chắc chắn đó là những gì bạn đang theo dõi (bạn muốn thời gian khởi động ), nhưng dường như có sự nhầm lẫn về cách thuật toán Goertzel có thể được áp dụng cho vấn đề của bạn, vì vậy tôi nghĩ rằng tôi đã viết nó lên đây.

Thuật toán Goertzel

Thuật toán Goertzel rất tốt để sử dụng nếu bạn biết tần số của âm bạn đang tìm kiếm (gọi nó là ) và nếu bạn có ý tưởng hợp lý về mức độ nhiễu để bạn có thể chọn ngưỡng phát hiện phù hợp.fg

Thuật toán Goertzel có thể được coi là luôn tính toán đầu ra của MỘT thùng FFT:

y(n)= =eȷ2πfgnΣk= =0nx(n)e-ȷ2πfgk

Trong đó là tần số bạn đang tìm kiếm.fg

Trang Wikipedia có một cách tốt hơn để tính toán điều này.

Đây là một nỗ lực (yếu đuối) của Scilab trong việc thực hiện nó:

function [y,resultr,resulti] = goertzel(f_goertzel,x)
realW = 2.0*cos(2.0*%pi*f_goertzel);
imagW = sin(2.0*%pi*f_goertzel);

d1 = 0;
d2 = 0;

for n = 0:length(x)-1,
    y(n+1) = x(n+1) + realW*d1 - d2;
    d2 = d1;
    d1 = y(n+1);
    resultr(n+1) = 0.5*realW*d1 - d2;
    resulti(n+1) = imagW*d1;
end
endfunction

Hãy xem xét các tín hiệu với φ = 4.4318752 :f= =0,0239074φ= =4,4318752

x= =tội(2πfn+φ)+ε(n)

nơi là zero-mean, đơn vị sai Gaussian tiếng ồn trắng.ε(n)

Trong ví dụ này, âm bắt đầu một phần ba đường vào tín hiệu ở chỉ số 1001.

Nếu chúng ta chạy thuật toán Goertzel trên nó với thì chúng ta sẽ có được hai dấu vết trên cùng của hình.fg= =f-0,001

fg= =f

Bốn dấu vết là:

  • xyfg= =0,0229074
  • reSbạntôitr2+reSbạntôitTôi2
  • xyfg= =0,0239074
  • reSbạntôitr2+reSbạntôitTôi2

Như bạn có thể thấy, trường hợp âm mà chúng ta quan tâm là hiện tại các đỉnh ở khoảng 250. Nếu chúng ta đặt ngưỡng phát hiện ở khoảng một nửa giá trị này (125), thì phát hiện xảy ra (giá trị căn bậc hai lớn hơn 125 ) ở khoảng chỉ số 1450 --- 450 mẫu sau khi giai điệu bắt đầu.

Ngưỡng này (125) sẽ không gây ra phát hiện trong trường hợp khác (dù sao cho lần chạy này), nhưng giá trị tối đa của đầu ra đó là 115,24, chúng ta không thể giảm ngưỡng quá nhiều mà không bị phát hiện sai.

Việc giảm ngưỡng xuống mức 116 sẽ khiến phát hiện trong trường hợp thực (đối với lần chạy này) tại chỉ số 1401 ... nhưng chúng tôi có nguy cơ báo động sai nhiều hơn.

nhập mô tả hình ảnh ở đây


Bộ lọc Goertzel đang chạy sẽ phù hợp hơn nếu người ta chỉ tìm kiếm ước tính tồn tại trong một cửa sổ có độ dài cố định. Goertzel đang chạy mà không có thời hạn mất / phân rã sẽ thay đổi băng thông theo chiều dài của nó và băng thông hẹp hơn về sau cung cấp ước tính thời gian đến tồi tệ hơn, nhạy hơn với các lỗi nhiễu và ngưỡng.
hotpaw2

@ hotpaw2: Đúng. Bạn có thể giới thiệu "yếu tố quên" để duy trì hoạt động của Goertzel, nhưng nếu không thì nó sẽ nhớ mọi thứ.
Peter K.

Nhớ tất cả mọi thứ? Đó là một FIR có thể được thực hiện ở dạng đệ quy. Tôi đã bỏ lỡ điều gì ở đây?
Oliver Charlesworth

y(n)
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.