จำกัด การปรับแต่งเสียงรบกวนที่เป็นไปได้หรือไม่


9

ฉันต้องการสร้างสัญญาณรบกวนในแอพพลิเคชั่น 100kHz, 16 บิตเพื่อเปลี่ยนสัญญาณควอนตัมทั้งหมดให้เป็นวง 25khz-50kHz โดยมีสัญญาณรบกวนน้อยที่สุดในย่าน DC-25kHz

ฉันตั้งค่า mathematica เพื่อสร้างเคอร์เนลตัวกรองข้อผิดพลาด 31 ตัวอย่างผ่านการเรียนรู้การเสริมแรงซึ่งทำงานได้ดี: หลังจากเรียนรู้เพียงเล็กน้อยฉันจะได้รับการเพิ่มประสิทธิภาพของเสียงความถี่สูงประมาณ ~ 16dB สำหรับการลดลงของย่านความถี่ต่ำจำนวนเดียวกัน เส้นกลางคือระดับเสียงที่ลดลงทั้งสองรูป) ซึ่งสอดคล้องกับทฤษฎีการสร้างเสียงรบกวน "Gerzon-Craven"

ส่งผลให้เกิดคลื่นความถี่เสียงหลังจากการเรียนรู้บางอย่าง

ตอนนี้ปัญหาของฉัน:

ฉันไม่สามารถจัดการกับเสียงดังได้มากขึ้นแม้หลังจากการเรียนรู้ที่กว้างขวางแม้ว่าทฤษฎีบท Gerzon-Craven ไม่ได้ห้ามไว้ ตัวอย่างเช่นควรเป็นไปได้ที่จะลดระดับ 40 dB ในย่านความถี่ต่ำและเพิ่มประสิทธิภาพ 40 dB ในย่านความถี่สูง

ดังนั้นมีข้อ จำกัด พื้นฐานอื่นที่ฉันพบ

ฉันพยายามดูทฤษฎีบทเกี่ยวกับเสียงรบกวน / การสุ่มตัวอย่าง / ข้อมูล แต่หลังจากที่เล่น ๆ ไปซักพักฉันก็สามารถหาข้อ จำกัด เพียงอย่างเดียวจากมันได้: ทฤษฎีบท Gerzon-Craven ซึ่งดูเหมือนจะเป็นผลลัพธ์โดยตรงของทฤษฎีบทแชนนอน

ความช่วยเหลือใด ๆ ที่ชื่นชม

แก้ไข: ข้อมูลเพิ่มเติม

ก่อนอื่นเคอร์เนลตัวกรองที่สร้างเสียงดังขึ้นโปรดทราบว่าตัวอย่างล่าสุดอยู่ทางด้านขวา ค่าตัวเลขของ BarChart จะปัดเศษเป็น. 01: {-0.16, 0.51, -0.74, 0.52, -0.04, -0.25, 0.22, -0.11, -0.02, 0.31, -0.56, 0.45, -0.13, 0.04, -0.14, 0.12, -0.06, 0.19, -0.22, -0.15, 0.4, 0.01, -0.41, -0.1, 0.84, -0.42, -0.81, 0.91, 0.75, -2.37, 2.29} (ไม่ตรงกับแท่งถ่าน แต่สร้างเส้นโค้งที่คล้ายกัน )

เคอร์เนลตัวกรองตัวอย่างล่าสุดบน RIGHT

หมายเหตุเกี่ยวกับการใช้ข้อเสนอแนะข้อผิดพลาดอีก:

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

นี่คือรหัสที่ใช้ในการคำนวณตัวอย่างคลื่นดิจิทัล step คือ stepize สำหรับการปัดเศษ wave เป็นรูปแบบของคลื่นที่ไม่ได้รับการปรับแต่ง (โดยทั่วไปจะเป็นศูนย์เมื่อไม่ได้ใช้สัญญาณ)

TestWave[kernel_?VectorQ] := 
 Module[{k = kernel, nf, dith, signals, twave, deltas},
  nf = Length@k;
  dith = RandomVariate[TriangularDistribution[{-1, 1}*step], l];
  signals = deltas = Table[0, {l}];
  twave = wave;
  Do[
   twave[[i]] -= k.PadLeft[deltas[[;; i - 1]], nf];
   signals[[i]] = Round[twave[[i]] + dith[[i]], step];
   deltas[[i]] = signals[[i]] - twave[[i]];
   , {i, l}];
  signals
  ]

วิธีการเสริมแรง:

"คะแนน" นั้นคำนวณได้จากการดูสเปกตรัมคลื่นเสียง เป้าหมายคือลดพลังงานเสียงรบกวนในย่านความถี่ DC-25kHz ฉันไม่ได้ลงโทษเสียงในย่านความถี่สูงดังนั้นเสียงที่สูงตามอำเภอใจจึงไม่มีคะแนนลดลง ฉันแนะนำเสียงในเคอร์เนลน้ำหนักเพื่อเรียนรู้ บางทีดังนั้นฉันอยู่ในขั้นต่ำท้องถิ่น (กว้างและลึก) แต่ฉันคิดว่ามันไม่น่าเป็นไปได้อย่างยิ่ง

เปรียบเทียบกับการออกแบบตัวกรองมาตรฐาน:

Mathematica อนุญาตให้สร้างตัวกรองซ้ำได้ สิ่งเหล่านี้สามารถมีความแตกต่างได้ดีกว่า 36 เดซิเบลเมื่อพล็อตตอบสนองความถี่ของพวกเขา สูงถึง 80-100 เดซิเบล ค่าตัวเลข: {0.024, -0.061, -0.048, 0.38, -0.36, -0.808, 2.09, -0.331, -4.796, 6.142, 3.918, -17.773, 11.245, 30.613, -87.072, 113.676, -87.072, 30.613, 11.645 , -17.773, 3.918, 6.142, -4.796, -0.331, 2.09, -0.808, -0.36, 0.38, -0.048, -0.061, 0.024}

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

อย่างไรก็ตามเมื่อนำไปใช้ในการสร้างเสียงจริงพวกเขาจะ (ก) จับกับความคมชัด ~ 40dB เดียวกัน (b) ทำงานได้แย่กว่าตัวกรองที่เรียนรู้ซึ่งจริง ๆ แล้วไม่มีการลดทอนเสียง

สีน้ำเงิน: ตัวกรองที่เรียนรู้, สีเหลือง: ตัวกรอง Equiripple นอกกรอบ, ไม่เปลี่ยน ... มันแย่กว่านั้นจริงๆ


2
+1 คำถามที่น่าสนใจมาก คุณลองเพิ่มคำสั่งของตัวกรองที่สูงกว่า 31 ก๊อก การปราบปราม 40dB ฟังดูสูงสักหน่อยสำหรับ 31 tap FIR
A_A

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

2
@ โททอลจากการออกแบบตัวกรอง "คลาสสิค" เป็นผลที่คาดหวังว่าตัวกรองอีกต่อไปจะชันและ / หรือมีการลดทอนในวงหยุดและ / หรือมีระลอกคลื่นน้อยกว่าในวงผ่าน ตอนนี้ฉันเดาแล้วว่าวิธีการเสริมกำลังของคุณให้รางวัลความชันมากกว่าการลดทอนหลังจากบางจุด วิธีการที่คุณใช้ในการเสริมกำลังคืออะไร?
Marcus Müller

1
คุณอาจต้องการดูหัวข้อการออกแบบตัวกรองของ Mathematica บางทีคุณสามารถกำหนดคุณสมบัติของตัวกรองของคุณและใช้หนึ่งในเทคนิคที่มีอยู่เพื่อส่งคืนตัวกรองที่ตรงกับพวกเขา
A_A

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

คำตอบ:


12

การทำธรณีพื้นฐานโดยไม่มีการรบกวน

การทำให้เป็นควอนตัมพื้นฐาน dithered โดยไม่มีการสร้างเสียงรบกวนทำงานเช่นนี้:


รูปที่ 1 แผนภาพระบบควอนไทซ์พื้นฐาน dithered สัญญาณรบกวนเป็นรูปสามเหลี่ยมที่มีค่าเฉลี่ยศูนย์โดยมีค่าสัมบูรณ์สูงสุดเท่ากับ 1 การปัดเศษเป็นจำนวนเต็มที่ใกล้ที่สุด ข้อผิดพลาดที่เหลือคือความแตกต่างระหว่างเอาต์พุตและอินพุตและคำนวณเพื่อการวิเคราะห์เท่านั้น

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

ด้วยข้อผิดพลาดสารเติมแต่งอิสระเราจะมีรูปแบบที่เรียบง่ายของระบบ:


รูปที่ 2 การประมาณควอนไทซ์ dithered พื้นฐาน ข้อผิดพลาดที่เหลือคือเสียงสีขาว

ในรูปแบบโดยประมาณเอาต์พุตเป็นอินพุตเพียงแค่บวกข้อผิดพลาดที่เหลือของเสียงสีขาวที่เป็นอิสระ

สั่นสะเทือนด้วยเสียง

ฉันไม่สามารถอ่าน Mathematica ได้ดีมากดังนั้นแทนที่จะเป็นระบบของคุณฉันจะวิเคราะห์ระบบจาก Lipshitz และคณะ " การสร้างเสียงรบกวนน้อยที่สุด " J. Audio Eng Soc., Vol.39, No.11, พฤศจิกายน 1991:

ระบบ Lipshitz และคณะ 1991
รูปที่ 3 Lipshitz และคณะ ไดอะแกรมระบบ 1991 (ดัดแปลงจากรูปที่ 1) ตัวกรอง (ตัวเอียงในข้อความ) รวมถึงความล่าช้าตัวอย่างหนึ่งเพื่อให้มันสามารถใช้เป็นตัวกรองข้อเสนอแนะข้อผิดพลาด เสียงรบกวนเป็นรูปสามเหลี่ยม dither

หากข้อผิดพลาดที่เหลือเป็นอิสระจากค่าปัจจุบันและอดีตของสัญญาณ A เรามีระบบที่ง่ายขึ้น:


รูปที่ 4 โมเดลโดยประมาณของ Lipshitz และคณะ 2534 ระบบ ตัวกรองเป็นเช่นเดียวกับในรูปที่ 3 และรวมถึงความล่าช้าตัวอย่างหนึ่ง มันไม่ได้ใช้เป็นตัวกรองข้อเสนอแนะ ข้อผิดพลาดที่เหลือคือเสียงสีขาว

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

HFilter(z)=b1z1b2z2b3z3

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

H(z)=1HFilter(z)=1+b1z1+b2z2+b3z3+.

ที่จะไปจากคุณกรองสัมประสิทธิ์ซึ่งคุณรายการในการสั่งซื้อเพื่อเสียงเต็มรูปแบบฟังก์ชั่นการถ่ายโอนตัวกรองการสร้างค่าสัมประสิทธิ์พหุนาม , สัญญาณของค่าสัมประสิทธิ์ที่ เปลี่ยนเป็นบัญชีสำหรับการปฏิเสธของตัวกรองผลลัพธ์ในแผนภาพระบบและค่าสัมประสิทธิ์ถูกผนวกเข้ากับท้าย (โดยในสคริปต์คู่ด้านล่าง) และในที่สุดรายการจะถูกย้อนกลับ (โดย):,b3,b2,b11,1,2,3,...0=1horzcatflip

pkg load signal
b = [-0.16, 0.51, -0.74, 0.52, -0.04, -0.25, 0.22, -0.11, -0.02, 0.31, -0.56, 0.45, -0.13, 0.04, -0.14, 0.12, -0.06, 0.19, -0.22, -0.15, 0.4, 0.01, -0.41, -0.1, 0.84, -0.42, -0.81, 0.91, 0.75, -2.37, 2.29];
c = flip(horzcat(-b, 1));
freqz(c)
zplane(c)

สคริปต์แปลงการตอบสนองความถี่ขนาดและตำแหน่งศูนย์ของตัวกรองการสร้างเสียงรบกวนแบบเต็ม:

พล็อต Freqz
รูปที่ 5 การตอบสนองความถี่ขนาดของฟิลเตอร์ลดเสียงรบกวนเต็มรูปแบบ

พล็อต Zplane
รูปที่ 6 พล็อต Z-plane ของเสา ( ) และศูนย์ ( ) ของตัวกรอง เลขศูนย์ทั้งหมดอยู่ในวงกลมหน่วยดังนั้นตัวกรองการสร้างเสียงรบกวนทั้งหมดจึงเป็นเฟสต่ำสุด×

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

การแปลงจากการออกแบบเสาทั้งหมดเพื่อ FIR ขั้นต่ำ

ขั้นตอนการออกแบบที่แตกต่างกัน แต่ในหลาย ๆ วิธีมีตัวกรองที่เทียบเท่ากันได้อธิบายไว้ในStojanović et al , "All-ขั้วโลกซ้ำดิจิตอลตัวกรองการออกแบบบนพื้นฐานของ Ultraspherical พหุนาม", วิศวกรรมวิทยุ, ปีที่ 23, ฉบับที่ 3, กันยายน 2014. พวกเขาคำนวณค่าสัมประสิทธิ์ส่วนของฟังก์ชั่นการถ่ายโอนของตัวกรอง low-pass low-pass ทุกตัวของ IIR พวกมันมักมีค่าสัมประสิทธิ์ส่วนนำ 1 และมีเสาทั้งหมดภายในวงกลมหน่วยความต้องการของตัวกรอง IIR ที่มั่นคง หากใช้สัมประสิทธิ์เหล่านั้นเป็นค่าสัมประสิทธิ์ของตัวกรองสัญญาณรบกวน FIR ขั้นต่ำพวกเขาจะให้การตอบสนองความถี่ผ่านสูงผ่านเมื่อเทียบกับตัวกรอง IIR ต่ำผ่าน (ฟังก์ชั่นถ่ายโอนค่าสัมประสิทธิ์ตัวหารกลายเป็นค่าสัมประสิทธิ์เศษ) ในสัญกรณ์ของคุณหนึ่งชุดของค่าสัมประสิทธิ์จากบทความนั้นคือ{-0.0076120, 0.0960380, -0.5454670, 1.8298040, -3.9884220, 5.8308660, -5.6495140, 3.3816780}ซึ่งสามารถทดสอบได้สำหรับการประยุกต์ใช้การสร้างเสียงรบกวนแม้ว่ามันจะไม่ตรงตามข้อกำหนด:

การตอบสนองความถี่
รูปที่ 7 การตอบสนองความถี่ขนาดของตัวกรอง FIR โดยใช้ค่าสัมประสิทธิ์จากStojanovićและคณะ 2014

พล็อตขั้วเป็นศูนย์
รูปที่ 8 พล็อตขั้ว - ศูนย์ของตัวกรอง FIR โดยใช้ค่าสัมประสิทธิ์จากStojanović et al 2014

ฟังก์ชั่นการถ่ายโอนทุกขั้วคือ:

H(Z)=11+a1Z-1+a2Z-2+a3Z-3+...

ดังนั้นคุณสามารถออกแบบมั่นคงทุกขั้วกรอง IIR low-pass และใช้สัมประสิทธิ์เป็นสัมประสิทธิ์ที่จะได้รับขั้นต่ำเฟสสูงผ่านการกรอง FIR ด้วยค่าสัมประสิทธิ์ชั้นนำของ 1a

ในการออกแบบตัวกรองแบบโพลทั้งหมดและการแปลงให้เป็นตัวกรอง FIR ขั้นต่ำคุณจะไม่สามารถใช้วิธีการออกแบบตัวกรอง IIR ที่เริ่มต้นจากตัวกรองต้นแบบแบบแอนะล็อกและแมปขั้วและศูนย์ในโดเมนดิจิทัลโดยใช้การแปลงแบบไบลิเนียร์ . ซึ่งรวมถึงcheby1, cheby2และellipใน Octave และ Python SciPy วิธีการเหล่านี้จะให้ค่าศูนย์อยู่ห่างจากจุดกำเนิด z-plane ดังนั้นตัวกรองจะไม่เป็นประเภทของเสาแบบครบวงจรที่ต้องการ

ตอบคำถามเชิงทฤษฎี

หากคุณไม่สนใจว่าจะมีเสียงรบกวนมากแค่ไหนที่ความถี่เหนือไตรมาสของความถี่การสุ่มตัวอย่างแล้ว Lipshitz และคณะ 1991 ตอบคำถามของคุณโดยตรง:

สำหรับฟังก์ชั่นการถ่วงน้ำหนักซึ่งไปที่ศูนย์เหนือส่วนหนึ่งของวงดนตรีนั้นไม่มีข้อ จำกัด ทางทฤษฎีเกี่ยวกับการลดเสียงรบกวน - พลังงานลดน้ำหนักที่หาได้จากวงจรของรูปที่ 1 นี่อาจเป็นกรณีเช่นหนึ่งสมมติว่า หูมีความไวเป็นศูนย์ระหว่างพูด 20 kHz และความถี่ Nyquist และเลือกฟังก์ชั่นการถ่วงน้ำหนักเพื่อสะท้อนความจริงนี้

รูปที่ 1 แสดง shaper เสียงรบกวนที่มีโครงสร้างตัวกรอง IIR ทั่วไปที่มีทั้งเสาและศูนย์ดังนั้นจึงแตกต่างจากโครงสร้าง FIR ที่คุณมีอยู่ในขณะนี้ แต่สิ่งที่พวกเขาพูดยังใช้กับสิ่งนั้นเพราะการตอบสนองแรงกระตุ้นของตัวกรอง FIR ทำโดยพลการใกล้กับการตอบสนองต่อแรงกระตุ้นของตัวกรอง IIR ที่เสถียรใด ๆ

สคริปต์ระดับแปดเสียงสำหรับการออกแบบตัวกรอง

นี่คือสคริปต์ Octave สำหรับการคำนวณค่าสัมประสิทธิ์โดยวิธีอื่นที่ฉันคิดว่าเทียบเท่ากับ Stojanovici และคณะ วิธีการแปรพารามิเตอร์ 2014 เป็นพร้อมตัวเลือกที่ถูกต้องของพารามิเตอร์ของฉันν=0dip

pkg load signal
N = 14; #number of taps including leading tap with coefficient 1
att = 97.5; #dB attenuation of Dolph-Chebyshev window, must be positive
dip = 2; #spectrum lift-up multiplier, must be above 1
c = chebwin(N, att);
c = conv(c, c);
c /= sum(c);
c(N) += dip*10^(-att/10);
r = roots(c);
j = (abs(r(:)) <= 1);
r = r(j);
c = real(poly(r));
c .*= (-1).^(0:(N-1)); #if this complains, then root finding has probably failed
freqz(c)
zplane(c)
printf('%f, ', flip(-c(2:end))), printf('\n'); #tobalt's format

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

การตอบสนองความถี่
รูปที่ 9. การตอบสนองความถี่ของตัวกรองจากสคริปต์ด้านบน (เวอร์ชั่นที่เก่ากว่า แต่เกือบเทียบเท่า)

พล็อตขั้วเป็นศูนย์
รูปที่ 10 พล็อตโพล - ศูนย์ของตัวกรองจากสคริปต์ด้านบน (เวอร์ชั่นที่เก่ากว่า แต่เกือบเทียบเท่า)

ค่าสัมประสิทธิ์จาก (รุ่นเก่า แต่เทียบเท่าเกือบ) {0.357662, -2.588396, 9.931419, -26.205448, 52.450624, -83.531276, 108.508775, -116.272581, 102.875781, -74.473956, 43.140431, -19.131434, 5.923468}สคริปต์ดังกล่าวข้างต้นในสัญกรณ์ของคุณ: ตัวเลขมีขนาดใหญ่ซึ่งอาจนำไปสู่ปัญหาที่เป็นตัวเลข

การปรับใช้ระดับเสียงของคู่เสียง

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

pkg load signal
N = length(c);
M = 16384; #signal length
input = zeros(M, 1);#sin(0.01*(1:M))*127;
er = zeros(M, 1);
output = zeros(M, 1);
for i = 1:M
  A = input(i) + er(i);
  output(i) = round(A + rand() - rand());
  for j = 2:N
    if (i + j - 1 <= M)
      er(i + j - 1) += (output(i) - A)*c(j);
    endif
  endfor
endfor
pwelch(output, max(nuttallwin(1024), 0), 'semilogy');

ป้อนคำอธิบายรูปภาพที่นี่
รูปที่ 11 การวิเคราะห์สเปกตรัมเสียงเชิงปริมาณจากการใช้การสร้างสัญญาณรบกวนแบบคู่ด้านบนสำหรับสัญญาณอินพุตศูนย์ที่คงที่ แกนแนวนอน: ความถี่ปกติ สีดำ: ไม่มีการสร้างเสียงรบกวน ( c = [1];), สีแดง: ตัวกรองดั้งเดิมของคุณ, สีน้ำเงิน: ตัวกรองจากส่วน "สคริปต์คู่สำหรับการออกแบบตัวกรอง"

โดเมนเวลาทดสอบสำรอง
รูปที่ 12 เอาต์พุตโดเมนเวลาจากการใช้การสร้างสัญญาณรบกวนแบบคู่ด้านบนสำหรับสัญญาณอินพุตศูนย์ที่คงที่ แกนแนวนอน: หมายเลขตัวอย่าง, แกนแนวตั้ง: ค่าตัวอย่าง สีแดง: ตัวกรองดั้งเดิมของคุณสีน้ำเงิน: ตัวกรองจากส่วน "สคริปต์คู่เพื่อการออกแบบตัวกรอง"

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


1
@MattL ตอนแรกฉันคิดผิดว่า tobalt มีตัวกรองทุกขั้ว ฉันเขียนคำตอบของฉันใหม่เมื่อฉันรู้ว่ามันเป็นตัวกรอง FIR ที่มีค่าสัมประสิทธิ์แรก 1 นอกจากนี้ Gerzon-Craven ยังมีรายงานว่าตัวกรองจะต้องเป็นเฟสต่ำสุดที่จะดีที่สุดและค่าสัมประสิทธิ์ที่เหมาะสมของ tobalt ความต้องการเหล่านั้นเทียบเท่ากับสัมประสิทธิ์ของตัวกรองทุกขั้ว IIR ดังนั้นฉันขอแนะนำให้ยืมวิธีการออกแบบจากที่นั่น IIR มาตรฐานจะเป็นตัวเลือกด้วย
Olli Niemitalo

1
ฉันได้แยกข้อผิดพลาด: การใช้งานของฉันทำให้เกิดรูปแบบของคลื่น (ในเวลา) เช่นเดียวกับคุณ อย่างไรก็ตามฟังก์ชั่น Abs [Fourier [wave]] ดูเหมือนว่าจะไหลเข้ามาในพื้นที่ล้น / อันเดอร์โฟล์บางส่วนเนื่องจากสเปกตรัมกลับมาดูแตกต่างกัน (ชั้นบน)
tobalt

1
@Olli Niemitalo ตกลงดูเหมือนว่า FFT ในระดับแปดเสียงจะใช้หน้าต่างอัตโนมัติหรือไม่? หลังจากใช้หน้าต่าง Hann กับรูปแบบของคลื่นฉันสามารถรับ FFT ที่ "ถูกต้อง" ฉันจะทดสอบความสมบูรณ์ของวิธีการนี้โดยย่อและในที่สุดก็เรียนรู้และโพสต์ผลลัพธ์ต่อไป ขอบคุณสำหรับความพยายามทั้งหมดของคุณ ฉันทำเครื่องหมายโพสต์ของคุณเป็นคำตอบ
tobalt

1
@ robertbristow-johnson ฉันคิดว่ามันสอดคล้องกันอย่างที่มันเป็น ฉันลบสมการที่ H (z) สำหรับตัวกรองแบบเรียกซ้ำด้วย 1 เป็นตัวเศษ แต่มันเป็นตัวกรอง FIR ในกรณีของมัน ฉันสงสัยว่าคุณอาจคิดว่ามันกลายเป็นตัวกรองแบบเรียกซ้ำเนื่องจากมีลูปข้อเสนอแนะ แต่การทำควอนตัมแบบ dithered นั้นอยู่ในวงที่ทำสิ่งที่ตัดเส้นทางจากตัวกรองเอาท์พุทไปยังส่วนที่เหลือ
Olli Niemitalo

1
นอกจากนี้ Lipshitz และคณะ 2534 ใช้a และ ด้วยความหมายตรงข้ามการฝึกฝนที่ฉันได้รับการฝึกฝนจากที่นี่ ที่ dsp.stackexchange.com เพราะไม่ได้มาตรฐาน
Olli Niemitalo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.