การอ่านพล็อตการแปลงเวฟเล็ต


15

ฉันมีปัญหาในการทำความเข้าใจเกี่ยวกับวิธีการอ่านพล็อตโดยการแปลงเวฟเล็ต

นี่คือรหัส Matlab ที่เรียบง่ายของฉัน

load noissin;
% c is a 48-by-1000 matrix, each row 
% of which corresponds to a single scale.
c = cwt(noissin,1:48,'db4','plot');

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นส่วนที่สว่างที่สุดหมายถึงขนาดของคอฟฟี่เซ็ตที่ใหญ่ขึ้น แต่ฉันจะเข้าใจพล็อตนี้ว่าเกิดอะไรขึ้นที่นั่นได้อย่างไร กรุณาช่วยฉัน


ฉันพยายามรหัสต่อไปนี้ใน matlab t = 0: 0.001: 2; y = sin (2 * pi * 20 * t) wname = 'cmor0.5-1' scale = 1: 0.1: 80; CWT (y, ขนาด, wname 'พล็อต'); ฉันได้พล็อตต่อไปนี้! ป้อนคำอธิบายรูปภาพที่นี่จริงและส่วนจินตภาพแสดงช่องว่างที่พบใน CWT ด้วยเวฟ morl ดังนั้นในวิธี CWT ที่มีเวฟเล็ต morlet ที่ซับซ้อนก็มีข้อมูลเฟส จะอธิบายยังไงดี ??

คำตอบ:


15

ลองนึกภาพหนึ่งวินาทีว่าคุณเพิ่งแปลงเวฟเล็ตdaubechies-4อย่างที่คุณเห็นในสีแดง

ป้อนคำอธิบายรูปภาพที่นี่

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

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

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

หากคุณดูที่ด้านบนสุดเรามีจุดที่สว่างที่สุด ดังนั้นสำหรับสเกล -46 คุณสร้างแถวนั้นโดยการยืดเวฟเล็ตดั้งเดิมของคุณ 46 ครั้งแล้วครอสสัมพันธ์กับสัญญาณของคุณและนั่นก็คือแถวที่ 46 ของคุณ ดังนั้นคุณจะเห็นจุดสว่างที่ดีมากมาย คุณจะเห็นว่าที่ตำแหน่ง (แกน x) ~ 25, ~ 190 และ ~ 610 ฉันมีจุดสว่าง เพื่อที่จะบอกคุณคุณจะมีคุณลักษณะบางอย่างในสัญญาณของคุณที่อย่างใกล้ชิดตรงกับเวฟของคุณที่ถูกยืดออก 46 ครั้ง ดังนั้นคุณมี 'บางสิ่งบางอย่าง' ในสถานที่เหล่านั้นที่ตรงกับเวฟเล็ตของคุณในระดับนี้

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

โดยสรุป CWT นั้นจะแสดงคะแนนความสัมพันธ์ที่เป็นไปได้ทั้งหมดระหว่างตัวกรองเทมเพลต / การจับคู่ของคุณ (ในกรณีนี้คือเวฟ daub-4 เวฟเล็ต) ที่ตำแหน่งต่าง ๆ (แกน x) เช่นกันที่ปัจจัยยืด (แกน y) .

หวังว่านี่จะช่วยได้


ขอบคุณมากสิ่งนี้ช่วยได้จริงๆ แต่คุณจะบอกได้อย่างไรว่าฉันได้ค้นพบความถี่และเวลาของสัญญาณของฉันจากกระบวนการนี้?
Sufiyan Ghori

1
@Effected คุณพบว่า 'เวลา' ของการเกิดขึ้นของคุณลักษณะบางอย่างในสัญญาณของคุณโดยที่คุณได้รับคะแนนความสัมพันธ์สูงสุด (ตัวอย่าง ~ 25, ~ 190, ~ 610) ในตัวอย่างของคุณ ในการรับเนื้อหาความถี่ของสัญญาณ ณ จุดนั้นคุณสามารถดู FFT ของสัญญาณนั้นหรือคุณสามารถดู FFT ของเวฟเล็ตในระดับนั้นและดูการตอบสนองความถี่
Spacey

ดังนั้นเราควรใช้ DCT หลังเวฟเล็ตเพื่อให้มีทั้งเวลาและส่วนประกอบความถี่หรือไม่? ถ้าฉันมีคลื่นไซน์ (แกน x = เวลา, y- แกน = แอมพลิจูด) และถ้าฉันใช้ FFT ของมันแล้วฉันมีองค์ประกอบความถี่จากองค์ประกอบ FFT และเวลาจากสัญญาณเดิมแล้วทำไมเราจึงควรใช้เวฟเล็ต?
Sufiyan Ghori

1
@Effected เหตุผลที่คุณใช้ DFT / DCT คือการรับเนื้อหาความถี่ทั่วโลก DFT / DCT บอกเนื้อหาความถี่ของคุณสำหรับสัญญาณทั้งหมด ความถี่หนึ่งตรงเวลาอยู่ที่ไหน คุณไม่รู้ อย่างไรก็ตามถ้าคุณใช้เวฟเล็ตคุณสามารถค้นหาได้ว่าไม่ว่าความถี่ของคุณคืออะไร (คล้ายกับ DFT / DCT) แต่ยังที่ที่คุณมีความถี่นั้นด้วย (สถานที่ในเวลา)
Spacey

สำหรับเร็กคอร์ดมีความถี่เป็นแนวคิดสากลเท่านั้น ทันทีที่คุณเริ่มพยายามปักความถี่ลงไปสู่ช่วงเวลาหนึ่งคุณกำลังพูดถึงการแจกแจงความถี่ การแจกแจงจะแคบลงเมื่อช่วงเวลาหรือระดับเพิ่มขึ้น การคำนวณ DFT ของเวฟเล็ตที่มีตาชั่งที่แตกต่างกันจะทำให้คุณมีความคิดว่าจะตีความผลลัพธ์การแปลงที่เกี่ยวข้องกลับไปยังโดเมนความถี่ได้อย่างไร คิดว่าตัวกรอง bandpass เวฟเล็ต Morlet เกิดขึ้นกับการกระจายความถี่แบบเกาส์ซึ่งเหมาะสมอย่างยิ่งสำหรับการเชื่อมโยงกับแนวคิดของฟูริเยร์ @endolith ได้สัมผัสสิ่งนี้ในการตอบสนองของเขา
2718

11

แปลงเหล่านี้มีประโยชน์สำหรับฉันที่จะเข้าใจมาจากพื้นหลังSTFT :

ซับซ้อน Morlet (ซายน์) เวฟลักษณะและพฤติกรรมเช่นเคอร์เนลที่ซับซ้อนของ STFT A (ตั้งแต่มันมาจากบอร์เปลี่ยนประเภทของ STFT ก) เมื่อคุณ "เลื่อนผ่าน" สัญญาณที่มีความถี่เท่ากันมันจับคู่กันไม่ว่าเฟสของสัญญาณที่คุณกำลังวัดจะวัดขนาดและเฟสในแต่ละจุด (และนี่คือพล็อตของขนาดอย่างเดียว):

ขนาดของการแปลงเวฟเล็ต Morlet ที่ซับซ้อน

พล็อตขนาดของการแปลงเวฟเล็ต Morlet ที่ซับซ้อน

จริงมูลค่า Morlet เวฟเท่านั้นตรงกับเมื่อขั้นตอนของเวฟและสายสัญญาณขึ้น ดังนั้นเมื่อคุณเลื่อนผ่านสัญญาณที่คุณวัดมันจะเข้าและออกจากเฟสสร้าง maxima และ minima เมื่อพวกเขายกเลิกหรือเสริม:

ขนาดของการแปลงเวฟเล็ต Morlet จริงอย่างต่อเนื่อง

ขนาดของการแปลงเวฟเล็ต Morlet จริงอย่างต่อเนื่อง

(ที่จริงแล้วในกรณีนี้เรากำลังวางแผนขนาดดังนั้นทั้งคู่ที่เป็นบวกและลบทำให้เกิดจุดสีส้มดีกว่าที่จะเปลี่ยนเป็นcolormap สองขั้วแทนเพื่อแสดงว่ายอดเขาบางส่วนอยู่ในระยะและอื่น ๆ อยู่นอกเฟส) :

การแปลงเวฟเล็ต Morlet อย่างต่อเนื่องโดยใช้ไบโพลาร์คอร์แมป

การแปลงเวฟเล็ต Morlet อย่างต่อเนื่องโดยใช้ไบโพลาร์คอร์แมป

ด้วย Morlet ที่มีมูลค่าจริงข้อมูลขนาดและเฟสจะรวมกันเป็นค่าเอาต์พุตเดี่ยว

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


คุณได้แปลงมาจากไหน btw?
Spacey

@ Mohammad: โอ้ถ้าคุณไปตามลิงค์ฉันมีข้อมูลเพิ่มเติมเกี่ยวกับพวกเขา แต่ในระยะสั้นฉันทำพวกเขาด้วยรหัสนี้: phy.uct.ac.za/courses/python/examples/ …
endolith

ลิงก์นั้นตายแล้วตอนนี้พวกเขาอยู่ที่github.com/emanuele/cwtหรือgist.github.com/endolith/2783866
endolith

1
ดีมาก! ฉันตัดสินใจที่จะเรียนรู้เกี่ยวกับ wavelets googled และภายในห้านาทีฉันกลับไปที่ระบบนิเวศ stackexchange เพื่อเขียน "aha!" - คำตอบของชั้นเรียน นี่เป็นชุดภาพที่ได้รับการคัดสรรมาอย่างดี ขอขอบคุณ!
uhoh

4

นี่คือตัวอย่างที่ฉันคิดว่าดีที่สุดในการทำความเข้าใจกับการแปลงเวฟเล็ต

ดูภาพด้านล่าง The Waveform (A) เป็นสัญญาณดั้งเดิมของเรา Waveform (B) แสดงเวฟ Daubechies 20 (Db20) ประมาณ 1/8 วินาทียาวที่เริ่มต้นที่จุดเริ่มต้น (t = 0) และมีประสิทธิภาพดี ก่อน 1/4 วินาที ค่าศูนย์จะขยายเป็น 1 วินาทีเต็ม การเปรียบเทียบแบบจุดต่อจุด * กับสัญญาณพัลส์ของเรา (A) จะแย่มากและเราจะได้ค่าความสัมพันธ์น้อยมาก

ก่อนอื่นเราเปลี่ยนเวฟเล็ตพื้นฐานหรือเวฟเล็ตแม่ที่ไม่ได้ต่อกันไปทางขวาเล็กน้อยและทำการเปรียบเทียบสัญญาณอีกครั้งกับรูปคลื่นใหม่นี้เพื่อรับค่าความสัมพันธ์อื่น เราเปลี่ยนไปเรื่อย ๆ และเมื่อเวฟ Db20 อยู่ในตำแหน่งที่แสดงใน (C) เราจะได้รับการเปรียบเทียบที่ดีกว่าเล็กน้อยกับ (B) แต่ก็ยังแย่มากเพราะ (C) และ (A) มีความถี่แตกต่างกัน

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

ป้อนคำอธิบายรูปภาพที่นี่

ใน CWT เรามีค่าสหสัมพันธ์หนึ่งค่าสำหรับทุกการเปลี่ยนแปลงของเวฟเล็ตที่ยืดทุกครั้ง†เพื่อแสดงค่าสหสัมพันธ์ (คุณภาพของ“ การจับคู่”) สำหรับการยืดและการเลื่อนเหล่านี้ทั้งหมดเราใช้จอแสดงผล 3 มิติ

ที่นี่มันไป

ป้อนคำอธิบายรูปภาพที่นี่

จุดสว่างแสดงตำแหน่งที่จุดสูงสุดและหุบเขาของเวฟที่ยืดและเลื่อนปรับแนวได้ดีที่สุดกับจุดสูงสุดและหุบเขาของพัลส์ในตัว (มืดเมื่อไม่มีการจัดแนวหรี่ที่จุดยอดและหุบเขาบางจุดเท่านั้น แต่สว่างที่สุดที่จุดยอดและหุบเขาทั้งหมด ตําแหน่ง) ในตัวอย่างง่ายๆนี้การยืดเวฟเล็ตด้วยปัจจัย 2 จาก 40 เป็น 20 เฮิร์ตซ์ (การยืดตัวกรองจากเดิม 20 คะแนนเป็น 40 คะแนน) และการเปลี่ยนเป็น 3/8 วินาทีในเวลาให้ความสัมพันธ์ที่ดีที่สุดและเห็นด้วยกับสิ่งที่เรารู้ นิรนัยหรือ“ ล่วงหน้า” เกี่ยวกับชีพจร (ชีพจรอยู่ที่ 3/8 วินาที, พัลส์ความถี่ 20 Hz)

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

สำหรับตัวอย่างการสอนอย่างง่ายด้านบนเราสามารถมองเห็นตำแหน่งและความถี่ของการเต้นของชีพจร (A) ตัวอย่างถัดไปเป็นตัวแทนของเวฟเล็ตอีกเล็กน้อยในโลกแห่งความเป็นจริงที่ตาเปล่ามองไม่เห็นตำแหน่งที่ตั้งและความถี่

ดูตัวอย่างด้านล่าง

ป้อนคำอธิบายรูปภาพที่นี่

เวฟเล็ตสามารถใช้วิเคราะห์เหตุการณ์ในท้องถิ่นได้ เราสร้าง 300 จุดอย่างช้าๆที่แตกต่างกันของสัญญาณคลื่นไซน์และเพิ่ม "ความผิดพลาด" หรือความไม่ต่อเนื่อง (ในความชัน) ในเวลา = 180 เราจะไม่สังเกตเห็นความผิดพลาดหากเรามองโคลสอัพ (b)

ตอนนี้มาดูกันว่า FFT จะแสดงความผิดพลาดนี้อย่างไรให้ดู ป้อนคำอธิบายรูปภาพที่นี่

ความถี่ต่ำของคลื่นไซน์นั้นสังเกตเห็นได้ง่าย แต่ไม่สามารถมองเห็นความผิดพลาดเล็กน้อยได้

แต่ถ้าเราใช้ CWT แทน FFT มันจะแสดงความผิดพลาดนั้นอย่างชัดเจน ป้อนคำอธิบายรูปภาพที่นี่

ในขณะที่คุณสามารถเห็นการแสดงเวฟเล็ต CWT แสดงเส้นแนวตั้งได้อย่างชัดเจนในเวลา = 180 และที่ระดับต่ำ (เวฟเล็ตมีการยืดในระดับต่ำเพียงเล็กน้อยซึ่งบ่งชี้ว่าความผิดพลาดนั้นสั้นมาก) CWT ยังเปรียบเทียบได้ดีกับคลื่นไซน์ขนาดใหญ่ที่สั่นซึ่งซ่อนความผิดพลาดไว้ ในระดับที่สูงขึ้นเหล่านี้เวฟได้ถูกยืดออก (เป็นความถี่ที่ต่ำกว่า) ดังนั้นจึง "ค้นหา" จุดสูงสุดและหุบเขาของคลื่นไซน์ให้เป็นเวลา = 75 และ 225 สำหรับความไม่ต่อเนื่องระยะสั้นนี้เราใช้ Db4 ระยะสั้น 4 จุด เวฟเล็ต (ดังแสดง) เพื่อการเปรียบเทียบที่ดีที่สุด

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