Least Squares
[สารบัญกลุ่มเรื่องที่กำลังศึกษา]

เป็นหลักการหนึ่งที่ใช้บ่อยใน DSP สมมติว่าเรามีฟังก์ชั่นต่อเนื่อง 2 ฟังก์ชั่น f(t) กับ f̂(c,t) เมื่อ c ไม่เป็นฟังก์ชั่นของ t ถ้าเราเลือก c ที่ทำให้ f̂(c,t) เป็นการประมาณแบบ least-squares ของ f(t) ในช่วง t1 ถึง t2 แล้ว total squared error (TSE) ซึ่งมีค่าตามสมการ

          

จะมีค่าต่ำสุด

ตัวอย่างรูปด้านล่าง f(t) เป็นคลื่นสามเหลี่ยมมีคาบ = 500 และพล็อตในช่วง t1 = 0 ถึง t2 = 1000 อีกฟังก์ชั่นหนึ่ง f̂(c,t) = c sin(2πt/500) ที่เลือกค่า c ให้ TSE ต่ำสุด เท่ากับเราพูดว่า f̂(c,t) เป็นการประมาณแบบ least-squares ของ f(t) ในช่วง [t1, t2] = [0, 1000]


กรณีสัญญาณไม่ต่อเนื่อง f(t) จะกลายเป็นเวกเตอร์ที่มี elements เป็นแซมเปิ้ล N ตัว f = [f1 f2 ··· fN] และสมการ TSE เปลี่ยนเป็น

          

เมื่อ fn คือ element ที่ n ของ f และ T คือ time step หรือช่วงระหว่างแซมเปิ้ล ตัวอย่างรูปด้านล่างคือกรณีไม่ต่อเนื่องของรูปบนที่ T = 35, N = 28


ถ้า f̂(c,t) เป็นฟังก์ชั่นเชิงเส้นของ c เช่น f̂(c,t) = c1 + c2t + c3t2 + ... + cMtM-1 เราจะเรียกว่าเป็นการประมาณแบบ least-squares ที่เป็นเชิงเส้น (linear least-squares approximation) ในกรณีดังกล่าว มีฟังก์ชั่นในรูป tm (ค่าของ m เริ่มจาก 0) อยู่ M ฟังก์ชั่น ถ้าให้ gm(t) เป็นฟังก์ชั่นของ t ฟังก์ชั่นที่ m เราจะเขียน gmn = gm(nT) แทนค่าของ gm(t) ที่ t = nT ฉะนั้น

          f̂(c,nT) = c1g1n + c2g2n + c3g3n + ... + cMgMn

และ

          

เงื่อนไขที่ทำให้ TSE ต่ำสุดคือ

          

ทั้งหมดจะมี M สมการที่ต้องแก้ออกมาเพื่อหาเวกเตอร์ least-squares coefficient หรือ c = [c1 c2 ··· cM]′, เอาแบบไม่สนใจการจัดรูปทางคณิตศาสตร์นะครับ เราจะได้ c = (G′*G)∖(f*G)′ เมื่อ G = [G′1 G′2 ··· G′M], Gm = [gm1 gm2 ··· gmN], f = [f1 f2 ··· fN], '*' แทน การคูณเวกเตอร์, '′' แทน transpose และ '∖' คือ ตัวดำเนินการที่แก้ชุดของสมการเชิงเส้น เช่น ถ้า B = A∖C แล้ว A*B = C

ลองมาดูตัวอย่างกัน จากรูปบน เลือกมา 12 แซมเปิ้ล เราสร้างเป็น f = [f1 f2 ··· fN] ที่ N = 12 ได้ f = [0.0 1.4 2.8 4.2 4.4 3.0 1.6 0.2 -1.2 -2.6 -4.0 -4.6] คราวนี้ f̂(c,t) เราจะไม่ใช้แค่ฟังก์ชั่น sine ตัวเดียวเหมือนในรูปแล้ว แต่จะใช้ผลรวมของ sine สามตัวแทน

          f̂(c,t) = c1sin(2πnT/500) + c2sin(6πnT/500) + c3sin(10πnT/500)

เมื่อ n = 0..11, gmn = sin(2π(2m-1)nT/500) ฉะนั้น เมตริกซ์ G มี 3 หลัก (M = 3) และ 12 แถว (N = 12) โค้ด MATLAB ต่อไปนี้ใช้สร้าง G


หลังจากได้ G12x3 เราก็คำนวณหา c ได้ตามสูตรครับ



ที่มา: หัวข้อ 2.2 Least Squares หนังสือ Digital Signal Processing with Examples in MATLAB ของ S. D. Stearns กับ D. R. Hush



Create Date : 28 กรกฎาคม 2556
Last Update : 28 กรกฎาคม 2556 16:33:55 น.
Counter : 1109 Pageviews.

0 comments
วัดภาวนาโซล ประเทศเกาหลีใต้ จัดโครงการปฏิบัติธรรมนานาชาติ ณ ศูนย์ปฏิบัติธรรม นานาชาติโทชิหงิญี่ปุ่น Turtle Came to See Me
(13 มี.ค. 2562 20:11:50 น.)
:: ปูรณฆฏะ :: กะว่าก๋า
(18 มี.ค. 2562 06:13:13 น.)
Don't Worry Be Happy - Bobby McFerrin ... ความหมาย tuk-tuk@korat
(24 ก.พ. 2562 16:10:07 น.)
ทีวีอนิเม หน่วยผจญคนไฟลุก ประกาศผู้ที่มารับบทเป็น Joker iamZEON
(12 ก.พ. 2562 16:25:58 น.)
ชื่อ : * blog นี้ comment ได้เฉพาะสมาชิก
Comment :
 *ส่วน comment ไม่สามารถใช้ javascript และ style sheet
 

Zol.BlogGang.com

ศล
Location :
กรุงเทพ  Thailand

[ดู Profile ทั้งหมด]
 ผู้ติดตามบล็อก : 85 คน [?]

บทความทั้งหมด