คำถามสองสามข้อเกี่ยวกับ Slepian และหน้าต่าง Gaussian ทั่วไป


10

ฉันกำลังพยายามเพิ่มเอกสารสำหรับฟังก์ชั่นหน้าต่างทั้งหมดใน scipy.signal และฉันติดอยู่ที่Slepian (เหมือนกับ DPSS?) และหน้าต่างเกาส์ทั่วไปที่ฉันไม่เคยได้ยินมาก่อน

มีตัวแปรสองตัวที่เป็นพารามิเตอร์รูปร่างของบางประเภทpในแบบเกาส์ทั่วไปและwidthใน Slepian ( sigดูเหมือนจะเป็นซิกม่า, ส่วนเบี่ยงเบนมาตรฐาน)

2 คำถาม:

  1. แทนที่จะเป็นวิศวกรรมย้อนกลับและการคาดเดาทุกคนสามารถอธิบายสิ่งที่เรียกว่าตัวแปรเหล่านี้และสิ่งที่พวกเขาทำ?

  2. คุณช่วยอธิบายว่าหน้าต่างเหล่านี้มีประโยชน์ต่อการใช้งานหรือที่ไหน?

 

def general_gaussian(M, p, sig, sym=True):
    """Return a window with a generalized Gaussian shape.

    The Gaussian shape is defined as ``exp(-0.5*(x/sig)**(2*p))``, the
    half-power point is at ``(2*log(2)))**(1/(2*p)) * sig``.

    """
    if M < 1:
        return np.array([])
    if M == 1:
        return np.ones(1, 'd')
    odd = M % 2
    if not sym and not odd:
        M = M + 1
    n = np.arange(0, M) - (M - 1.0) / 2.0
    w = np.exp(-0.5 * (n / sig) ** (2 * p))
    if not sym and not odd:
        w = w[:-1]
    return w

def slepian(M, width, sym=True):
    """Return the M-point slepian window.

    """
    if (M * width > 27.38):
        raise ValueError("Cannot reliably obtain slepian sequences for"
              " M*width > 27.38.")
    if M < 1:
        return np.array([])
    if M == 1:
        return np.ones(1, 'd')
    odd = M % 2
    if not sym and not odd:
        M = M + 1

    twoF = width / 2.0
    alpha = (M - 1) / 2.0
    m = np.arange(0, M) - alpha
    n = m[:, np.newaxis]
    k = m[np.newaxis, :]
    AF = twoF * special.sinc(twoF * (n - k))
    [lam, vec] = linalg.eig(AF)
    ind = np.argmax(abs(lam), axis=-1)
    w = np.abs(vec[:, ind])
    w = w / max(w)

    if not sym and not odd:
        w = w[:-1]
    return w

การแข่งขันที่เป็นไปได้:

ฟังก์ชัน dpss_windows ของ nipyใช้NW"แบนด์วิดท์ครึ่งมาตรฐานที่สอดคล้องกับ 2NW = BW * f0 = BW * N / dt แต่มี dt เป็น 1"

dpss ของ Matlabใช้time_halfbandwidthนี่เป็นหน้าต่างเดียวกันหรือไม่ เป็นtime_halfbandwidthเช่นเดียวกับwidth?

คำจำกัดความ DPSS นี้มี "ความถี่ของการตัดพูหลักที่ต้องการเป็นเรเดียนต่อวินาที"ωc

การแจกแจงแบบปกติทั่วไปมีβ (เท่ากับสองเท่าp?) ซึ่งเรียกว่าพารามิเตอร์รูปร่างโดยมีการแจกแจงปกติสำหรับβ = 1 และการแจกแจงแบบ Laplace สำหรับβ = 2


FWIW ฉันดูเหมือนจะจำได้ว่า DPSS นั้นเหมือนกัน (หรือคล้ายกันมาก) กับหน้าต่าง Kaiser ขออภัยนั่นคือทั้งหมดที่ฉันได้รับ :-)
Spacey

@ โมฮัมหมัด: หน้าต่างไกเซอร์เป็นค่าประมาณของ DPSS ฉันคิดว่าเพราะ DPSS ที่แท้จริงนั้นมีราคาแพงมาก en.wikipedia.org/wiki/Window_function#Kaiser_windows
endolith

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

คำตอบ:


4

ลำดับ Slepian เป็นตระกูลของฟังก์ชัน อัลกอริทึมส่วนใหญ่คำนวณ 2 * NW - 1 ซีเควนซ์พร้อมกันสำหรับ NW ที่กำหนด N คือจำนวนคะแนนในลำดับและ W ตัดสินใจครึ่งหนึ่งของความกว้างของ mainlobe ในโดเมนความถี่สำหรับการแปลงฟูริเยร์ของลำดับ Slepian ที่กำหนด โดยทั่วไปคุณจะใช้ NW 3 หรือ 4 สำหรับการประมวลผลสัญญาณของคุณ

ในสลิปพวกเขาจะขอพารามิเตอร์ (m ในรหัส Python) และพารามิเตอร์ (ความกว้างในรหัส Python) แยกต่างหากขณะที่ใน matlab คุณป้อนผลิตภัณฑ์แบนด์วิธเวลาเป็นพารามิเตอร์เดียว นี้ทำให้รู้สึกเพราะคุณมักจะคำนวณลำดับ Slepian ไม่มีW N W NNWNWN

หากคุณกำลังประเมินสเปกตรัมพลังงานของอนุกรมเวลาคงที่ DPSS เป็นชุดของหน้าต่างที่คุณควรใช้

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


“ คุณสมบัติที่ดีของเกาส์เซียนคือมันเป็นตัวแปลงฟูริเยร์เอง” นั่นเป็นเพียงความจริงเท่านั้นp = 1ใช่ไหม?
endolith

ฉันไม่แน่ใจว่าสมมาตรจะมีค่าสำหรับ p = 1 เท่านั้น บางทีใครบางคนสามารถทำงาน FT ของ Generalized Gaussian (GG) กำลังมองหาที่มาของ FT ของเกาส์ในวุลแฟรม Mathworld mathworld.wolfram.com/FourierTransformGaussian.html เราสามารถกำจัดส่วนจินตภาพของอินทิกรัลสำหรับ GG ด้วยเหตุผลเดียวกัน แม้ว่าฉันไม่แน่ใจว่าจะประเมินeax2pcos(2πkx)dx
ncRubert

1

ตัวอย่างเดียวที่จะลบล้าง GG คือการแปลงร่างของมันเอง p = 0.5 ให้เลขชี้กำลังแบบ back-to-back แบบธรรมดาซึ่งมีการแปลง 2a / (s ^ 2 + a ^ 2)

สำหรับบล็อก DC มันเป็น ในโดเมนความถี่ Fdcx (w) = 1 - F (w) สิ่งนี้จะทำให้การปฏิเสธรอบ DC ด้วย near-DC กลายเป็น non-optimization ใน passband ในขณะนี้ ดังนั้นฉันจะใช้ Dolph เพื่อทำสิ่งนี้เพื่อให้ passband wideband กลายเป็นระลอกที่เท่ากัน

นี่เป็นแรงกระตุ้นลบด้วยฟังก์ชั่นหน้าต่างต้นฉบับกลับมาในโดเมนเวลา ใหญ่แค่ไหนสำหรับแรงกระตุ้น? จะต้องบังคับให้ผลรวมของลำดับเป็นศูนย์

คำเตือนลำดับความยาวเท่ากันบังคับให้ศูนย์เป็นศูนย์ที่ความถี่ Nyquist ดังนั้นคุณจะต้องหลีกเลี่ยง


-1

การแปลงฟูริเยร์ของ GG ยังเป็นแบบเกาส์เซียน การใช้ทฤษฎีบทการสนทนา FT (Gaussian \ times Gaussian) = FT (Gaussian) \ conv FT (Gaussian) = Gaussian \ conv Gaussian = Gaussian หวังว่าจะช่วย!


นี่เป็นแบบเกาส์ทั่วไปไม่ใช่เป็นแบบเกาส์ทั่วไป มันไม่ใช่การแปรรูปของตัวเอง ดูภาพ: docs.scipy.org/doc/scipy/reference/generated/…
endolith
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.