มีศัพท์เทคนิคหรือไม่สำหรับวิธีง่ายๆในการทำให้สัญญาณเรียบ


26

ประการแรกฉันยังใหม่กับ DSP และไม่มีการศึกษาจริงในนั้น แต่ฉันกำลังพัฒนาโปรแกรมสร้างภาพเสียงและฉันเป็นตัวแทนของอาร์เรย์ FFT เป็นแถบแนวตั้งเช่นเดียวกับการสร้างภาพคลื่นความถี่ทั่วไป

ปัญหาที่ฉันมีคือค่าสัญญาณเสียงเปลี่ยนไปเร็วเกินไปที่จะสร้างเอาต์พุตภาพที่น่าพอใจถ้าฉันเพิ่งแมปค่า FFT โดยตรง:

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

ดังนั้นฉันจึงใช้ฟังก์ชั่นง่าย ๆ กับค่าต่างๆเพื่อ "ทำให้เรียบ" ผลลัพธ์:

// pseudo-code
delta = fftValue - smoothedFftValue;
smoothedFftValue += delta * 0.2; 
// 0.2 is arbitrary - the lower the number, the more "smoothing"

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

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

ดังนั้นคำถามของฉันคือ:

  1. นี่เป็นรูปแบบหรือฟังก์ชั่นที่ได้รับการยอมรับเป็นอย่างดีซึ่งคำศัพท์นี้มีอยู่แล้ว คำนี้คืออะไร? ฉันใช้ "การปรับให้เรียบ" ด้านบน แต่ฉันรู้ว่านี่หมายถึงบางสิ่งที่เฉพาะเจาะจงมากใน DSP และอาจไม่ถูกต้อง นอกเหนือจากนั้นอาจเกี่ยวข้องกับซองจดหมายที่มีปริมาณมาก แต่ก็ไม่เหมือนกัน

  2. มีแนวทางที่ดีกว่าหรือศึกษาเพิ่มเติมเกี่ยวกับแนวทางแก้ไขปัญหาที่ฉันควรพิจารณา

ขอบคุณสำหรับเวลาและคำขอโทษของคุณหากนี่เป็นคำถามที่โง่ (อ่านการอภิปรายอื่น ๆ ที่นี่ฉันรู้ว่าความรู้ของฉันต่ำกว่าค่าเฉลี่ยดูเหมือนมาก)


1
ตอนนี้ฉันสงสัยว่าคุณจะได้อะไรถ้าคุณใช้ FFT ที่ราบรื่นและผกผัน -FFT
user253751

มันจะตรงไปตรงมามากกว่าที่จะเพียงแค่ทำคำตอบแรกในลำดับที่ต่างออกไป? current_value = current_value * ผุ; if (new_value> current_value) {current_value = new_value; }
Richard Forster

@immibis นี่ควรเป็นเสียงสะท้อนจากความเข้าใจของฉัน ช่วยแก้ให้ด้วยนะถ้าฉันผิด.
Andreas

แน่นอนและคอมไพเลอร์การเพิ่มประสิทธิภาพจะสร้างการใช้งานเดียวกัน จุดสำคัญคือการได้รับผลลัพธ์ที่ถูกต้องเมื่อ (current_value * สลายตัว) <new_value <current_value
Richard Forster

2
ฉันชอบคำถามนี้จริงๆ มันเป็นหนึ่งในสิ่งที่มีคนพยายามทำบางสิ่งออกมาโดยบังเอิญค้นพบตัวเองที่ด้านล่างของต้นไม้แห่งความรู้ขนาดใหญ่ (ฟิลเตอร์ Infinite Impulse Response, โดยเฉพาะ) ในขณะเดียวกันผู้ที่กำลังปีนขึ้นต้นไม้สามารถบรรยายสิ่งที่น่าสนใจทั้งหมดที่พวกเขาค้นพบในกิ่งไม้ได้แล้ว ...
DrMcCleod

คำตอบ:


37

สิ่งที่คุณได้นำมาใช้เป็นตัวกรอง lowpass ขั้วเดียวบางครั้งเรียกว่าบูรณาการรั่ว สัญญาณของคุณมีสมการความแตกต่าง:

y[n]=0.8y[n1]+0.2x[n]

โดยที่คืออินพุต (ค่าถังขยะที่ไม่ราบรื่น) และคือค่าถังขยะที่ปรับให้เรียบ นี่เป็นวิธีการทั่วไปในการนำตัวกรอง lowpass แบบง่ายและมีความซับซ้อนต่ำมาใช้ ฉันเคยเขียนเกี่ยวกับพวกเขาหลายครั้งก่อนในคำตอบก่อนหน้า; ดู[1] [2] [3]x[n]y[n]


4
ขอบคุณมากสำหรับสิ่งนี้ ดังนั้นมีประโยชน์มาก Googling ด้วยตัวเองก็เหมือนกับหลงทางทะเลเมื่อพูดถึง DSP เพียงแค่มีคำศัพท์สองสามคำในการค้นหาทำให้ฉันเข้าใจ
Michael Bromley

3
ฉันสงสัยว่า ฉันคิดว่า OP ใช้ตัวกรองนี้กับชุดของค่าในแต่ละถังขยะในโดเมนความถี่ Low-Pass ปกติจะใช้กับชุดตัวอย่างในโดเมนเวลา ผลเหมือนกัน (ฉันไม่คิดอย่างนั้นเพราะชิ้นส่วนที่มีความถี่สูงยังคงอยู่ในสัญญาณ แต่…ความเข้มของมันเปลี่ยนไปช้ากว่า)? ถ้าไม่คุณสามารถอธิบายรายละเอียดเกี่ยวกับสิ่งที่ตัวกรองทำกับสัญญาณในโดเมนเวลา
Jonas Schäfer

3
@ JonasWielicki ฉันคิดว่าเป้าหมายนั้นปรับค่า bin ของแต่ละคนให้ราบรื่นเพื่อที่ว่ามันจะไม่เปลี่ยนแปลงอย่างรวดเร็ว ตัวกรองความถี่ต่ำ (ตามที่อธิบายในคำตอบ) สามารถใช้กับอนุกรมเวลาใดก็ได้โดยไม่คำนึงถึงโดเมน (เวลาหรือความถี่หรือสิ่งอื่นใด)
Arpit Jain

@arpitjain ฉันเข้าใจว่า ฉันแค่อยากจะรู้ว่ามีความเข้าใจใด ๆ (ไม่จำเป็นโดยคุณ OP หรือผู้ตอบ) ว่ามันมีผลกับโดเมนเวลาอย่างไรเมื่อคุณทำเช่นนั้น
Jonas Schäfer

@JonasWielicki การดำเนินการเป็นสังวัตนาในโดเมนความถี่ดังนั้นจึงแปลเป็นการคูณ (ของการแปลงฟูริเยร์ที่สอดคล้องกัน (ของผกผัน) ที่เกี่ยวข้องในโดเมนเวลา
MBaz

17

คำเตือน: รวมประวัติบางส่วนเอกสารเก่า (ฉันรักพวกเขา) และบัตรเจาะ!

คุณใช้แบบฟอร์ม : บางครั้งเขียนเป็น: a=0.2

y(n)=y(n1)+a[x(n)y(n1)],
y(n)=ax(n)+(1a)y(n1).

เวอร์ชันด้านบนแรกนั้นเป็นธรรมชาติน้อยกว่า แต่มันหลีกเลี่ยงการคูณทวีคูณและมีประสิทธิภาพมากกว่า ทั้งสองสูตรผลผลิตเชิงเส้น , สาเหตุและไม่มีที่สิ้นสุดกรองกระตุ้นการตอบสนอง เรื่องราวย้อนกลับไปและผ่านปัวซอง, Kolmogorov-Zurbenko Adaptive Filter , Brown (การพยากรณ์ทางสถิติสำหรับการควบคุมสินค้าคงคลัง McGraw-Hill, 1959), Holt (1957) และ Winters (1960) มันถูกนำมาใช้เป็นรูปแบบการกรองซ้ำที่รู้จักกันภายใต้ชื่อที่แตกต่างกันทั่วทั้งวรรณกรรม:

"การชี้แจง" ในชื่อที่เกี่ยวข้องกับการกระตุ้นการตอบสนองกับความก้าวหน้าทางเรขาคณิตว่ากลุ่มตัวอย่างชี้แจงสลาย: nh[n]=(1a)u[n]an

สำหรับบันทึกทางประวัติศาสตร์ Robert G. Brown และ Arthur D. Little ใช้วิธีการนี้ในปี 1956 ในการทำให้เรียบแบบเอกซ์โปเนนเชียลเพื่อทำนายอุปสงค์ที่เห็นได้ชัดสำหรับอุตสาหกรรมยาสูบ ประวัติและคำอธิบายเพิ่มเติมสามารถพบได้ในการพยากรณ์ Holt-Winters สำหรับ Dummies (หรือนักพัฒนา) - ส่วนที่ 1 Peter Zehna นำเสนอการวิจารณ์ที่สำคัญในบางคำพูดเกี่ยวกับการปรับให้เรียบแบบเอกซ์โปเนนเชียลปี 1966 บทหนึ่งของ R. Brown ในสารานุกรมวิทยาศาสตร์การวิจัยและการจัดการการปฏิบัติการ (Google books)สร้างประวัติศาสตร์ย้อนหลังไปถึงปี 1944

การปรับให้เรียบแบบเอกซ์โพเนนเชียล, p.  205 สารานุกรมวิทยาศาสตร์การวิจัยและการจัดการการปฏิบัติการ

การปรับให้เรียบแบบเอกซ์โพเนนเชียล, p.  206 สารานุกรมวิทยาศาสตร์การวิจัยและการจัดการการปฏิบัติการ

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

นอกจากนี้คุณยังสามารถตรวจสอบ: “ ตัวกรองอย่างง่าย” นี้ทำงานอย่างไร


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

1
การแก้ไขเล็กน้อย, Winters 1 (960) ควรเป็น Winters (1960) ฉันถือว่า
SGR

9

มีแนวทางที่ดีกว่าหรือศึกษาเพิ่มเติมเกี่ยวกับแนวทางแก้ไขปัญหาที่ฉันควรพิจารณา

วิธีการปกติสำหรับเครื่องวัดเสียงคือ "เครื่องตรวจจับการสูญเสียสูงสุด"

if new_value > current_value
  current_value = new_value;
else
 current_value = current_value * decay;  

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


ฉันทราบว่าสิ่งนี้มีความคล้ายคลึงกับงานที่ฉันทำในวิทยาลัย MIDI ที่สร้างเสียงไม่ดัง (สร้างขึ้นในงานก่อนหน้านี้) ได้รับการปรับปรุงโดยการสังเกตุ (และปรับให้ตรงกับยอดและระยะเวลา) สัญญาณโน้ต (สี่เหลี่ยมสมบูรณ์) สัญญาณที่ ramped ขึ้นอย่างรวดเร็วมาก ( แต่ไม่ทันที) แล้วผุค่อยๆการผลิตโน้ตคมที่เสียชีวิตออก“ธรรมชาติ.” วาปรับปรุงในเสียงเพลง (ขนเอลิเซ่ในกรณีนี้)
KRyan

ฉันเดาว่าคุณต้องการเก็บไว้new_valueถ้ามันยิ่งใหญ่กว่าcurrent_value * decay
user276648

6

รอบตัวผู้รับเหมาของสหรัฐกระทรวง DoD ตัวกรองนี้โดยเฉพาะมักจะเรียกว่า "ตัวกรองอัลฟ่า" เพราะมันสามารถโดดเด่นด้วยพารามิเตอร์เดียวที่มีชื่อเดิมว่า "อัลฟา"

มันคล้ายคลึงโดยตรงกับตัวกรอง analog low-pass RC ของ simpe

พวกเขานั้นง่ายมากมีข้อ จำกัด ที่ร้ายแรง แต่พวกเขามีข้อได้เปรียบที่ไม่อาจปฏิเสธได้ในตัวกรองที่ซับซ้อนมากขึ้น (และซับซ้อน!) ซึ่งหากคุณหลีกเลี่ยงปัญหาที่เกิดขึ้นพวกเขาจะทำงานให้สำเร็จ


3

ดังที่กล่าวไว้ในคำตอบอื่น ๆ ตัวกรองนี้เป็นตัวกรองแบบเรียกซ้ำเสาเดียวซึ่งเป็นตัวกรองประเภทตอบสนองต่อแรงกระตุ้นแบบไม่มีที่สิ้นสุด (IIR)

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

... แต่ละจุดในสัญญาณเอาท์พุตถูกค้นพบโดยการคูณค่าจากสัญญาณอินพุตโดยสัมประสิทธิ์ "a" คูณค่าที่คำนวณไว้ก่อนหน้าจากสัญญาณเอาท์พุตด้วยสัมประสิทธิ์ "b" และเพิ่มผลิตภัณฑ์เข้าด้วยกัน ไม่มีค่าสำหรับ b0 เนื่องจากสิ่งนี้สอดคล้องกับตัวอย่างที่กำลังคำนวณ สมการที่ 19-1 เรียกว่าสมการเรียกซ้ำและตัวกรองที่ใช้เรียกว่าตัวกรองซ้ำ ค่า "a" และ "b" ที่กำหนดตัวกรองเรียกว่าสัมประสิทธิ์การเรียกซ้ำ

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