STFT และ DWT (เวฟเล็ต)


12

STFT สามารถใช้กับข้อมูลเสียงได้สำเร็จ (พร้อมด้วยไฟล์. wav soundfile) เพื่อทำการปรับเปลี่ยนโดเมนความถี่บางอย่าง (ตัวอย่าง: กำจัดเสียงรบกวน)
ด้วยN=441000(เช่น 10 วินาทีในอัตราการสุ่มตัวอย่างfs=44100) windowsize=4096, overlap=4, STFT ผลิต approximatively 430x4096อาร์เรย์ (ตอนแรกประสานงาน: กรอบเวลาสองประสานงานความถี่ bin) การแก้ไขสามารถทำได้ในอาเรย์นี้และการสร้างใหม่สามารถทำได้ด้วยoverlap-add (*)

มันเป็นวิธีการที่เป็นไปได้ที่จะทำสิ่งที่คล้ายกันกับแสง ? (DWT) คือรับรูปร่างที่คล้ายกันa x bโดยมีaกรอบเวลาและbถังขยะความถี่ทำการปรับเปลี่ยนบางอย่างในอาเรย์นี้และในตอนท้ายการกู้คืนสัญญาณหรือไม่ ได้อย่างไร เวฟเล็ตเทียบเท่ากับการทับซ้อนกันคืออะไร ฟังก์ชั่น Python เกี่ยวข้องกับอะไร (ฉันไม่พบตัวอย่างง่ายๆของการดัดแปลงเสียงด้วยpyWavelets... )?

(*): นี่คือกรอบ STFT ที่สามารถใช้ได้:

signal = stft.Stft(x, 4096, 4)    # x is the input
modified_signal = np.zeros(signal.shape, dtype=np.complex)

for i in xrange(signal.shape[0]):    # Process each STFT frame
    modified_signal[i, :] =  signal[i, :] * .....  # here do something in order to
                                                   # modify the signal in frequency domain !
y = stft.OverlapAdd(modified_signal, 4)   # y is the output

เป้าหมายคือการหากรอบคล้ายกับเวฟเล็ต


ความคิดเห็นด้านข้าง: การทำ"การกรอง" แบบนั้นบน STFT เป็นความคิดที่แย่จริงๆ ไม่ใช่วิธีที่ยอดเยี่ยมในการทำสิ่งต่าง ๆ ที่คุณต้องการทำ คุณพยายามทำอะไรให้สำเร็จ
Peter K.

โปรดทราบว่า PyWavelets ใช้สำหรับการแปลงเวฟเล็ตโดยสิ้นเชิง หากคุณต้องการทำสิ่งที่เหมือน STFT คุณจะเข้าใจการแปลงเวฟเล็ตอย่างต่อเนื่องเช่นการแปลง Q อย่างต่อเนื่องซึ่งเป็นการแปลง Gabor ซึ่งเป็นสิ่งเดียวกับการแปลงเวฟเล็ต Morlet ต่อเนื่องที่ซับซ้อนแต่ถูกออกแบบมาให้เป็น invertible: grrrr.org/research/software/nsgt
endolith

1
(คำถามนี้ฟื้นขึ้นมาจาก "ชุมชน") ในความคิดของฉันเวฟเล็ตซ้อนทับและเพิ่มในลักษณะที่คล้ายกับ STFT มาก ดังนั้นฉันจึงไม่ค่อยเข้าใจธรรมชาติของคำถาม
robert bristow-johnson

ต้องการรายละเอียดเพิ่มเติมหรือไม่
Laurent Duval

คำตอบ:


4

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

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

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

ดูเหมือนว่าจะมีการใช้งานหลามของการแปลงเวฟเล็ตแบบคงที่ คุณสามารถค้นหาข้อมูลอ้างอิงได้ใน2.3.4 คงแปลบทแสงของกระดาษที่เชื่อมโยง

โดยทั่วไปแล้วจะมีความทนทานมากขึ้นสำหรับการตรวจจับ denoising หรือการคืนค่าในการใช้งานจริง (ธรณีฟิสิกส์, การทดสอบแบบไม่ทำลาย, ultrasounds, การสั่นสะเทือน)


"ความซ้ำซ้อน" หมายถึง "มีข้อมูลเพิ่มเติมในผลลัพธ์มากกว่าที่จำเป็นในการทำซ้ำอินพุต"?
endolith

1
NM>N

3

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

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

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

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

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


1
ขอบคุณสำหรับคำตอบ. เหตุผลหลักที่ฉันพยายามที่จะมีกรอบรหัสคือฉันได้สังเกตเห็นเสมอ (ตั้งแต่วัยเด็กของฉันถึงไม่กี่ปีที่ผ่านมาเมื่อฉันจบปริญญาเอกของฉัน (ไม่เกี่ยวข้องกับ DSP แน่นอนถ้าฉันจะไม่ถาม ดังนั้นคำถามเกี่ยวกับมือใหม่ที่นี่!)) คือการจัดการเนื้อหาในชีวิตจริง (ตัวอย่างเช่นสัญญาณเสียงใน DSP) ช่วยให้เข้าใจทฤษฎีที่ลึกซึ้งได้อย่างมาก Audio sound -> Wavelet transform -> (do something on the array) -> Inversion -> Audio outputสิ่งที่ผมอยากจะรหัสคือ: ด้วยจำนวนมาก (ทำบางอย่างในอาร์เรย์) ฉันแน่ใจว่าฉันจะเข้าใจอีกเล็กน้อยเกี่ยวกับวิธีการทำงานของเวฟเล็ต
Basj

1
@Basj แล้วทำตามที่ฉันพูด ค้นหาห้องสมุดไพ ธ อนที่รองรับทั้งการแปลงเวฟเล็ตอย่างรวดเร็วและผกผันของมันแล้วเล่นกับทรีสัมประสิทธิ์ที่สร้างขึ้น ขอให้โชคดีและสนุก!
Jazzmaniac

"ไม่สามารถใช้ได้กับการแปลงเวฟเล็ต" มันใช้ได้กับ CWT ใช่มั้ย
endolith

1

การกำหนดเวฟเล็ตมีหลายวิธี โดยทั่วไปเวฟเล็ตจะมีลักษณะดังนี้:

wx0,k0(x)=Aexp(ik0x)e(k0(xx0))

x0k0eAk

(x0,k0)(x0,k0)

เนื่องจากขนาดของข้อมูลที่แปลงแล้วมีค่ามากกว่าของสัญญาณพื้นฐานของเวฟเล็ตจึงไม่เป็นแบบออโธเทนนิมอล เช่นต่อไปนี้จะเป็นเท็จ:

wk0,x0|wk0,x0=δ(x0,x0)δ(k0,k0)

Aw

x0,k0|wx0,k01k0wx0,k0|=identity

กล่าวอีกนัยหนึ่งคุณสามารถสร้างสัญญาณใหม่ได้อย่างสมบูรณ์แบบเพียงแค่เพิ่มองค์ประกอบเวฟเล็ต

"การปรับเปลี่ยน" ของคุณสามารถแทรกในผลรวมข้างต้น:

my_filter=x0,k0|wx0,k0f(x0,k0)wx0,k0|

อัปเดต 2013-11-19: การเพิ่มรายละเอียดการใช้งานด้านล่างตามที่ร้องขอ

f(x)

cx0,k0=wx0,k0|f

k0cx0,k0x0ffw0,k0cx0,k0

  • ff^
  • k01/4
    • f^w^0,k0
    • [kl,kr)w^0,k0
    • ใช้การแปลงฟูริเยร์ผกผันกับสิ่งนั้น
    • exp(ixkl+kr2)cx0,k0x0

k0x0w0,k0k0k0

cx0,k0k0

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

w^x0,k0(k)wx0,k0(x)

w^x0,k0=Aexp(i(kk0)x0)exp((Qlog(k/k0))2)

QAk0


1
ขอบคุณสำหรับการระลึกถึงประเด็นสำคัญเหล่านี้เกี่ยวกับทฤษฎีเวฟเล็ตซึ่งจำเป็นอย่างยิ่งที่จะต้องเข้าใจว่ามันทำงานอย่างไร แต่ที่นี่คำถามจะเพิ่มเติมเกี่ยวกับการสร้างรหัสกรอบงานที่จะทำงานกับสัญญาณเสียงเช่น คำถามคือ: วิธีการจัดการกับผลรวมอนันต์เหล่านี้, วิธีเลือก windows (หรือเวฟเล็ตแม่ ), วิธีการใช้ pyWavelets ใน Python (หรือภาษาอื่นเทียบเท่า, ฉันจะแปลเป็น Python แล้ว), วิธีการ เลือกพารามิเตอร์ (เหมือนในตัวอย่างของฉันสำหรับเสียง: อัตราการสุ่มตัวอย่าง = 44100 หน้าต่าง FFT = 4096 ทับซ้อน = 4 ฯลฯ )
Basj

akk|kakk|=Id

K

akakf

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