วิธีที่ดีที่สุดในการประเมิน "คุณภาพ" ของความสัมพันธ์อัตโนมัติ?


9

นี่คือด้านการเดินทางจากฉันแอปการนอนกรน

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

คำถาม # 1: RMS ของ autocorrelation (การข้ามองค์ประกอบศูนย์) เป็นตัวชี้วัด "คุณภาพ" ที่ดีหรือไม่หรือมีอะไรที่ดีกว่า

หากต้องการอธิบายอย่างละเอียด: ฉันแค่ต้องการวิธีตัวเลข (เทียบกับ "มอง" ที่แผนภูมิ) เพื่อแยกแยะสัญญาณที่สัมพันธ์กันโดยอัตโนมัติสูงจากสัญญาณที่สัมพันธ์กันไม่ดี

(ฉันไม่รู้จริง ๆ พอที่จะรู้ว่ามีคำถามอื่น ๆ ที่จะถาม)

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

Update - 22 พฤษภาคม: ในที่สุดฉันก็มีเวลาที่จะทำงานกับมันอีก (ฉันถูกดึงออกมาจากแอพอื่นซึ่งเป็นความเจ็บปวดอย่างแท้จริง ) ฉันป้อนผลลัพธ์ของความสัมพันธ์อัตโนมัติเป็น FFT และผลลัพธ์ค่อนข้างน่าสนใจ - มันแสดงจุดสูงสุดที่ค่อนข้างน่าทึ่งใกล้กับจุดเริ่มต้นเมื่อกรนเริ่มต้น

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

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

พยายามเรียบ -

กรณีทดสอบของฉันสามารถแบ่งออกเป็นหมวดหมู่ "well-behaved" และหมวดหมู่ "children problems"

สำหรับกรณีทดสอบ "well-behaved" ความเรียบของ FFT ของ autocorrelation จะลดลงอย่างมากและอัตราส่วนของค่าสูงสุดต่อค่าเฉลี่ยของ autocorrelation จะเพิ่มขึ้นในช่วงกรน อัตราส่วนของตัวเลขสองตัวนี้ (อัตราส่วนสูงสุดที่หารด้วยความเรียบ) นั้นมีความละเอียดอ่อนเป็นพิเศษแสดงการปีนขึ้น 5-10x ระหว่างการหายใจ / กรน

อย่างไรก็ตามสำหรับ "เด็กที่มีปัญหา" ตัวเลขจะมุ่งหน้าไปในทิศทางตรงกันข้าม อัตราส่วนสูงสุด / เฉลี่ยลดลงเล็กน้อยในขณะที่ความเรียบเพิ่มขึ้นจริง 50-100%

ความแตกต่างระหว่างสองประเภทนี้ (ส่วนใหญ่) สามเท่า:

  1. ระดับเสียงรบกวน (ปกติ) สูงกว่าใน "เด็กที่มีปัญหา"
  2. ระดับเสียงลดลงใน "ปัญหาเด็ก"
  3. "เด็กที่มีปัญหา" มีแนวโน้มที่จะประกอบด้วยการหายใจมากขึ้นและการกรนที่เกิดขึ้นจริงน้อยลง (และฉันต้องตรวจสอบทั้งสอง)

ความคิดใด ๆ

Update - 5/25/2012: มันเป็นการคลอดก่อนกำหนดเพียงเล็กน้อยที่จะมีการเต้นแบบชัยชนะ แต่เมื่อฉันสะท้อนความสัมพันธ์อัตโนมัติเกี่ยวกับจุดหนึ่งเอา FFT ของสิ่งนั้นออกมา สภาพแวดล้อมที่แตกต่างกันหลายแห่ง การสะท้อนความสัมพันธ์อัตโนมัติดูเหมือนว่าจะปรับปรุงคุณภาพของ FFT

จุดเล็ก ๆ น้อย ๆ อย่างหนึ่งก็คือเนื่องจาก "ส่วนประกอบ DC" ของ "สัญญาณ" ที่สะท้อนนั้นเป็นศูนย์ผลลัพธ์ของศูนย์ FFT จะเป็นศูนย์เสมอและประเภทนี้จะแบ่งค่าเฉลี่ยทางเรขาคณิตที่มีศูนย์ แต่การข้ามองค์ประกอบซีโรทดูเหมือนจะใช้ได้

ผลลัพธ์ที่ฉันได้รับนั้นไม่เพียงพอที่จะระบุ snores / breaths ด้วยตัวเอง แต่ดูเหมือนว่าเป็นการยืนยันที่ค่อนข้างอ่อนไหวถ้าฉันไม่ได้รับ "jump" มันอาจจะไม่ใช่ snore / breath

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


เท่าที่การวัดความสัมพันธ์ 'กำลัง' สิ่งที่คุณต้องทำคือทำให้สัญญาณทั้งสองของคุณมีความสัมพันธ์กันก่อนที่จะทำการสหสัมพันธ์ (หลังจากการทำให้เป็นมาตรฐานแล้วผลรวมของสัญญาณควรเป็น 1) จากนั้นค่าสูงสุดสหสัมพันธ์จะอยู่ระหว่าง -1 ถึง 1 นี่คือความแข็งแกร่งของคุณ ฉันไม่แน่ใจเกี่ยวกับคำถามที่เหลือของคุณบางทีคุณอาจแก้ไขได้เล็กน้อย
Spacey

ฉันกำลังจัดการกับความสัมพันธ์แบบอัตโนมัติดังนั้นสัญญาณทั้งสองจึงเหมือนกันและเป็นไปตามนิยาม "ปกติ" ที่สัมพันธ์กัน โดย "ความแข็งแกร่ง" ฉันหมายถึงจำนวนความสัมพันธ์อัตโนมัติที่มี
Daniel R Hicks

ฉันไม่เข้าใจสิ่งที่คุณต้องการ แต่ฉันคิดว่าคุณต้องการวัดค่าสูงสุดของค่าสูงสุดของความสัมพันธ์อัตโนมัติไม่ใช่ค่า RMS ของทุกสิ่ง
endolith

@endolith ฉันคิดว่าเขาอาจจะถามเกี่ยวกับการวัด 'ความยอดเยี่ยม' ของฟังก์ชั่น autocorrelation ของคุณมันเพื่อแยกสัญญาณด้วยเดลตาเดียว (autocorrelation ของสัญญาณรบกวน) จากสัญญาณของยอดเขาหลาย ๆ สัญญาณอัตโนมัติที่มีฮาร์มอนิกส์ บางทีอาจจะใช้วัดสเปกตรัมความเรียบนอกจากนี้ยังสามารถนำมาใช้ที่นี่ ...
สเปซีย์

ดูเหมือนความเรียบของสเปกตรัมคือสิ่งที่เขาต้องการ Daniel: คุณต้องการพิจารณาว่าสัญญาณแตกต่างจากสัญญาณรบกวนสีขาวหรือไม่?
เอ็ม

คำตอบ:


3

รอบคัดเลือกโซน

การสาธิตนี้เป็นเรื่องง่ายกับแพคเกจ MATLAB audioreadซึ่งจะช่วยให้การอ่าน / เขียนไฟล์ MP3 หรือคุณสามารถแปลงไฟล์ MP3 ในตัวอย่างเป็น WAV ด้วยตนเอง

กรณีง่าย

ก่อนที่เราจะตรวจสอบไฟล์ที่มีปัญหาของคุณลองตรงไปที่ SoundCloud แล้วหยิบเสียงกรนที่เหมาะสมเพื่อที่เราจะได้รู้ว่าจะเกิดอะไรขึ้นเมื่อ SNR สูง นี่คือสเตอริโอ 52s 44.1KHz MP3 ดาวน์โหลดไปยังโฟลเดอร์ในเส้นทางของ MATLAB

ทีนี้ลองคำนวณสเปกโทรแกรม (ฉันเลือกหน้าต่างฮันน์ 8192 ตัวอย่าง) และความเรียบของสเปกตรัม:

[snd1,fs1]=mp3read('snoring - brobar.mp3'); % use wavread if you converted manually
[s1,f,t,p1]=spectrogram(mean(snd1,2),hann(8192));
sf1=10*log10(geomean(p1)./mean(p1)); % spectral flatness
plot(linspace(0,length(snd1)/fs1,length(sf1)),sf1); axis tight

ความเรียบของสเปกตรัมของกรนของแท่ง

การลดลงอย่างมากของความเรียบของสเปกตรัม (เช่นการเบี่ยงเบนจากเสียงสีขาว) กรีดร้องว่า "ฉันกำลังนอนกรน" เราสามารถจำแนกมันได้อย่างง่ายดายโดยดูที่การเบี่ยงเบนจากพื้นฐาน (ค่ามัธยฐาน):

stem(linspace(0,length(snd1)/fs1,length(sf1)),median(sf1)-sf1>2*std(sf1)); axis tight

ความเรียบของสเปกตรัมที่ถูกจำแนกของกรนของแถบเหล็ก

เรามีส่วนเบี่ยงเบนมาตรฐานมากกว่าสองส่วน รูปแบบมาตรฐานตัวเองสำหรับการอ้างอิงเป็น6.8487

กรณียาก

ตอนนี้ลองมาดูที่ไฟล์ของคุณ เป็นไฟล์ WAV ขนาด 8KHz 10 นาที เนื่องจากระดับต่ำมากจึงช่วยในการคำนวณสัญญาณ

[snd,fs]=wavread('recordedFile20120408010300_first_ten_minutes');
cmp=compand(snd,255,1);
wavwrite(cmp,'companded'); % used for listening purposes
[s,f,t,p]=spectrogram(snd,hann(8192));
sf=10*log10(geomean(p)./mean(p));
plot(linspace(0,600,length(sf)),sf);

ความเรียบสเปกตรัมของไฟล์ที่มีเสียงดัง

ดู dips ที่ดีเหล่านั้นที่มาพร้อมกับกรนแต่ละอัน? ฉันก็ไม่ได้เช่นกัน พวกเขาไม่ได้นอนกรน แต่เสียงของวัตถุเคลื่อนไหว ค่าเบี่ยงเบนมาตรฐานคือเล็ก ๆ น้อย ๆ0.9388

ข้อสรุป

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

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


ตอนนี้คุณมีความรู้สึกของสิ่งที่ฉันต่อต้าน ตัวอย่างนั้นมีคุณภาพ "ปานกลาง" ในกลุ่มตัวอย่างที่ฉันต้องทำงานด้วย - มันแย่กว่านั้นมาก และฉันสามารถอ่านตัวอย่างนั้นได้ดีกับอัลกอริธึมที่มีอยู่ของฉัน
Daniel R Hicks

อัลกอริธึมคืออะไร?
เอ็ม

กล่าวโดยย่อ: เสียงวิ่งผ่าน FFT 8 ครั้งต่อวินาทีคลื่นความถี่จะถูกแบ่งออกเป็น 5 ย่านความถี่พลังและความแตกต่างทางสเปกตรัมของแต่ละวงจะถูกคำนวณจากนั้นผลลัพธ์จะได้คะแนนในลักษณะที่ให้น้ำหนักกับวงดนตรีมากขึ้น จะเปลี่ยนแปลงในอัตราที่เหมาะสม
Daniel R Hicks

@ ฉันกำลังติดตามลิงก์ของคุณสร้างบัญชี soundcloud แต่ไม่สามารถดูได้ว่าคุณดาวน์โหลดกรนนั้นอย่างไร ไม่มีปุ่มดาวน์โหลดอยู่ข้างๆหรือที่อื่น ๆ
Spacey

@Mohammad: ฉันให้ลิงค์ดาวน์โหลด
เอ็ม

1

ความสัมพันธ์อัตโนมัติเกี่ยวข้องโดยตรงกับ DFT แบบผกผันของความหนาแน่นสเปกตรัมพลังงานของสัญญาณของคุณ ในแง่นั้นข้อมูลใดก็ตามที่อยู่ในขนาดกำลังสองของ DFT ของคุณจะมีอยู่ในฟังก์ชั่นความสัมพันธ์อัตโนมัติ

ที่กล่าวอย่างไรก็ตามสิ่งหนึ่งที่ autocorrelation สามารถบอกคุณได้ว่ามีการประสานกัน (ระยะทางจากจุดกึ่งกลางสูงสุดไปยังจุดสูงสุดถัดไป) บางทีการนอนกรนกับการหายใจ VS มีฮาร์มอนิกขั้นพื้นฐานที่แตกต่างกันและถ้าเป็นเช่นนั้น 'วิธีการควบคุมความสัมพันธ์แบบอัตโนมัติ' จะเป็นจุดเริ่มต้นที่ดีอย่างแน่นอนเพื่อให้สามารถแยกคุณลักษณะ

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

แก้ไข:

ฉันคิดว่าสิ่งที่คุณทำหลังจากนั้นคือการวัด - ตัวเลข - กำหนดความคล้ายคลึงกันของฟังก์ชัน autocorrelation กับ delta, VS เป็นฟังก์ชัน autocorrelation ด้วยเหตุนี้การวัดความแบนของสเปกตรัมอาจใช้งานได้หรือในกรณีทั่วไปมากขึ้นการวัดค่าเฉลี่ยเรขาคณิตของคุณกับค่าเฉลี่ยเลขคณิต


ฉันอยู่ภายใต้ความประทับใจที่ความสัมพันธ์อัตโนมัติจะแยกแยะความแตกต่างของสัญญาณ (จังหวะ) ได้ดีขึ้นจากเสียง (แบบสุ่ม) - เสียงจะมีความสัมพันธ์แบบอัตโนมัติใกล้ศูนย์ DFT, OTOH จะเป็นตัวแทนของเสียงเป็นเสียง - สเปกตรัมการแพร่กระจาย อย่างน้อยนี่คือ "ทฤษฎี" ที่ฉันเข้าใจ
Daniel R Hicks

โปรดดูการแก้ไขของฉัน
Spacey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.