การประมาณเวลาที่เริ่มมีอาการของเสียงระเบิดในเสียงหรือไม่


14

เทคนิคใดที่เราจะใช้ในการประมาณเวลาที่เริ่มมีอาการของเสียงไซนัสออกมาในสัญญาณที่มีเสียงดัง

สมมติว่าเสียงระเบิดมีความถี่คงที่ที่ทราบ (แต่ไม่ทราบระยะ) และเวลาเพิ่มขึ้นที่คมชัดมากและเป้าหมายคือการประเมินเวลาเริ่มต้นภายในเวลาที่ดีกว่าครึ่งเวลาเพิ่มขึ้นและ / หรือระยะเวลาหนึ่งของความถี่ของเสียง , ถ้าเป็นไปได้. เทคนิคการประมาณค่าจะเปลี่ยนไปอย่างไรถ้าอัตราส่วน S / N ต่ำมาก (น้อยกว่า 1)

เพิ่ม: สมมติว่าความดังของเสียงนั้นมีความยาวไม่ทราบ แต่นานกว่าตัวคูณเล็ก ๆ ของเวลาที่เพิ่มขึ้นและช่วงความถี่

เพิ่มเติม: DFT / FFT แสดงการมีอยู่ของเสียง ปัญหาคือการหาอย่างแม่นยำตรงที่ในหน้าต่าง FFT เสียง (หรืออาจมีหลายเสียงระเบิดของความถี่เดียวกัน) อาจเริ่มต้นภายในหน้าต่าง FFT หรือพิจารณาว่าเสียงปัจจุบันเริ่มนอกหน้าต่าง DFT นั้นถ้าฉันมีทุกสิ่งที่ ข้อมูลโดเมนเวลาเพิ่มเติม

ความแม่นยำในการตรวจจับเรดาร์ของพัลส์นั้นใกล้เคียงกับความละเอียดที่ฉันต้องการยกเว้นฉันมีเพียงขอบเนื่องจากโทนเสียงนั้นมีความยาวที่ไม่รู้จัก ตัวกรองผ่านแถบแคบทำให้เวลาที่เพิ่มขึ้นผิดเพี้ยนและทำให้ความละเอียดการประมาณค่าการมาถึงของการทำลายขอบลดลง


1
เราสามารถคิดอะไรเกี่ยวกับเสียงได้ไหม มันหยุดนิ่งหรือไม่? มันเป็นไปตามการกระจายประเภทใด ๆ ?
Phonon

2
สัญญาณเตือนที่ผิดพลาดจากเครื่องตรวจจับของคุณไม่เป็นที่ต้องการหรือไม่? คุณมีข้อมูลจำเพาะเกี่ยวกับความน่าจะเป็นในการตรวจจับชีพจรแต่ละครั้งอย่างถูกต้องหรือไม่? สิ่งนี้คล้ายกับการประมวลผลสัญญาณเรดาร์ส่วนหน้า (แบบง่าย) การค้นหาพัลส์ (อาจเป็นมอดูเลต) ที่ฝังอยู่ในเสียงรบกวนและการประมาณค่าพารามิเตอร์
Jason R

1
คุณต้องทำแบบเรียลไทม์หรือเป็นการวิเคราะห์แบบออฟไลน์หรือไม่?
nibot

2
@ hotpaw2: คุณไม่ชอบอะไรเกี่ยวกับอัลกอริทึมของ Goertzelตามคำตอบ SO นี้ ?
Peter K.

1
อัลกอริทึม Goertzel ใช้สำหรับตรวจจับเสียงซึ่งดูเหมือนจะเป็นสิ่งที่คุณต้องการ เอาต์พุตของตัวกรองคือค่าประมาณของ "กำลัง" ของสัญญาณที่ความถี่ที่จะถูกปรับ เลือกเกณฑ์ หากเอาต์พุตของตัวกรองอยู่เหนือสิ่งนี้คุณจะตรวจพบเสียง ตั้งค่าเกณฑ์ของคุณอย่างเหมาะสมและคุณสามารถตรวจจับการโจมตีของเสียงก่อนหน้านี้ (และยังมีแนวโน้มที่จะเตือนภัยที่ผิดพลาด)
Peter K.

คำตอบ:


6

ตามที่เราได้พูดคุยในความคิดเห็นอัลกอริทึม Goertzelเป็นวิธีปกติในการตรวจสอบเสียงในเสียง หลังจากการสนทนาฉันไม่แน่ใจว่ามันเป็นสิ่งที่คุณเป็น (หลังจากที่คุณต้องการเวลาโจมตี ) แต่ดูเหมือนจะมีความสับสนว่าอัลกอริทึม Goertzel อาจนำไปใช้กับปัญหาของคุณได้อย่างไรฉันจึงคิดว่าฉันจะเขียนมันขึ้น ที่นี่

อัลกอริทึม Goertzel

อัลกอริทึม Goertzel นั้นใช้งานได้ดีหากคุณทราบความถี่ของเสียงที่คุณกำลังมองหา (เรียกมันว่า ก.) และหากคุณมีความคิดที่สมเหตุสมผลเกี่ยวกับระดับเสียงรบกวนเพื่อให้คุณสามารถเลือกเกณฑ์การตรวจจับที่เหมาะสม

อัลกอริทึมของ Goertzel นั้นสามารถนำมาคำนวณการส่งออกของถังขยะหนึ่งช่อง FFT ได้เสมอ:

Y(n)=อีȷ2πก.nΣk=0nx(n)อี-ȷ2πก.k

ที่ไหน ก. เป็นความถี่ที่คุณกำลังมองหา

หน้า Wikipediaมีวิธีที่ดีกว่าในการคำนวณ

นี่คือScilab (อ่อนแอ) ที่พยายามนำมาใช้

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

พิจารณาสัญญาณด้วย =0.0239074 และ φ=4.4318752 :

x=บาป(2πn+φ)+ε(n)

ที่ไหน ε(n) เป็นค่าเฉลี่ยศูนย์ความแปรปรวนของหน่วยเกาส์เสียงสีขาว

ในตัวอย่างนี้เสียงจะเริ่มหนึ่งในสามของวิธีเข้าสู่สัญญาณที่ดัชนี 1001

ถ้าเราเรียกใช้อัลกอริทึมของ Goertzel กับมัน ก.=-0.001 จากนั้นเราจะได้ตัวเลขสองอันดับแรก

ถ้าเราเรียกใช้อัลกอริทึมของ Goertzel กับมัน ก.= จากนั้นเราจะได้ตัวเลขสองอัน

ร่องรอยทั้งสี่คือ:

  • x (สีน้ำเงิน) และ Y (สีแดง) สำหรับ ก.=0.0229074
  • ผลลัพท์ที่ได้ Rอีsยูล.เสื้อR2+Rอีsยูล.เสื้อผม2
  • x (สีน้ำเงิน) และ Y (สีแดง) สำหรับ ก.=0.0239074
  • ผลลัพท์ที่ได้ Rอีsยูล.เสื้อR2+Rอีsยูล.เสื้อผม2 (เส้นทึบ) และผลลัพธ์แรก (เส้นประ)

อย่างที่คุณเห็นในกรณีที่น้ำเสียงที่เราสนใจนั้นอยู่ในจุดสูงสุดที่ประมาณ 250 ถ้าเราตั้งค่าเกณฑ์การตรวจจับที่ประมาณครึ่งหนึ่งของค่านี้ (125) จากนั้นการตรวจจับจะเกิดขึ้น ) ที่ประมาณ 1450 --- 450 ตัวอย่างหลังจากน้ำเสียงเริ่มขึ้น

ขีด จำกัด นี้ (125) จะไม่ทำให้เกิดการตรวจจับในกรณีอื่น (สำหรับการรันนี้อย่างไรก็ตาม) แต่ค่าสูงสุดของเอาต์พุตนั้นคือ 115.24 เราไม่สามารถลดเกณฑ์มากเกินไปโดยไม่ได้รับการตรวจจับที่ผิดพลาด

การลดเกณฑ์ถึง 116 จะทำให้เกิดการตรวจจับในกรณีจริง (สำหรับการดำเนินการนี้) ที่ดัชนี 1401 ... แต่เราเสี่ยงต่อการเตือนที่ผิดพลาดมากขึ้น

enter image description here


A running Goertzel filter is more suitable if one is only looking for an existence estimate within a fixed length window. A running Goertzel without a loss/decay term changes it's bandwidth over its length, and the narrower bandwidth later in time provides a worsening arrival time estimate, more sensitive to noise and threshold errors.
hotpaw2

@ hotpaw2: ถูกต้อง คุณสามารถแนะนำ "ปัจจัยการลืม" เพื่อให้ Goertzel ทำงานต่อไปได้ แต่อย่างอื่นมันจะจดจำทุกสิ่ง
Peter K.

จำทุกอย่างได้มั้ย เป็น FIR ที่สามารถนำไปใช้ในรูปแบบเวียนเกิด ฉันพลาดอะไรไปที่นี่
Oliver Charlesworth

@Oli: ถ้าคุณดูสมการ Y(n)ด้านบนคุณจะทราบว่ายังไม่สิ้นสุด ใช่มันประมาณค่าสัมประสิทธิ์ DFT (ปรับสัดส่วน) แต่ไม่แน่นอน FIR
Peter K.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.