อัลกอริทึมผลบิดเบือนดิจิตอล


10

ฉันอ่านหนังสือ DAFX โดย Udo Zölzerเกี่ยวกับผลการบิดเบือนที่หน้า 124-125 และมันบอกว่าฟังก์ชั่นการจำลองการบิดเบือนที่เหมาะสมได้รับจากฟังก์ชั่น:

f(x)=x|x|(1ex2/|x|)

ใครสามารถอธิบายสูตรนี้และสัญญาณที่เราได้รับ

จากสิ่งที่ฉันเข้าใจ 'x' คือสัญญาณตัวอย่างดังนั้นนี่คือลำดับของตัวเลข | x | อะไร หมายความว่าอย่างไร มันหมายถึงค่าสัมบูรณ์ของ x สำหรับแต่ละค่าตัวอย่าง?

ดังนั้นหากฉันต้องการใช้การจำลองผลกระทบการบิดเบือนนี้

  1. ฉันจำเป็นต้องรู้ความยาวของ x (ได้จากจำนวนตัวอย่าง)
  2. ในลูปฉันต้องคำนวณสูตรนี้สำหรับค่าตัวอย่างแต่ละค่า
  3. หลังจากลูปสิ้นสุดฉันได้รับสัญญาณที่บิดเบี้ยว (ในรูปแบบดิจิตอล)

หลังจากนั้นฉันต้องแปลงเป็นสัญญาณอะนาล็อกเพื่อให้ฉันได้ยิน


2
โปรดทราบว่ามีข้อผิดพลาดในสูตรที่ให้ไว้ในหนังสือ (ควรมีเครื่องหมายลบในเลขยกกำลัง) ดูคำตอบของฉันด้านล่าง
Matt L.

คำตอบ:


5

| x | หมายถึงค่าสัมบูรณ์ - x / | x | มีสูตรอยู่เล็กน้อยเพื่อให้แน่ใจว่าเครื่องหมายของอินพุตนั้นถูกสงวนไว้ในเอาต์พุต เกี่ยวกับการนำไปปฏิบัติใช่ขั้นตอนที่คุณระบุไว้นั้นถูกต้อง


1
คุณหมายถึงอะไรโดย "การบิดเบือนที่แท้จริง"? การดำเนินการใด ๆ ที่คุณทำกับสัญญาณดั้งเดิมจะเป็นการบิดเบือนอย่างแน่นอน! คุณพยายามจะทำอะไร?
pichenettes

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

1
คุณต้องทำสิ่งนี้ในโดเมนเวลา
pichenettes

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

1
เครื่องกำเนิดเสียงที่เปลี่ยนเป็นเสียงแหลม, พระพุทธศาสนาแฟนซี (พูด EHX micro pog) หรือ morphing สเปกตรัมแฟนซี (จำชื่อผลิตภัณฑ์ไม่ได้) ต้องใช้การประมวลผลโดเมนความถี่ ตัวจำลองแอมป์ / ลำโพงบางตัวจำเป็นต้องใช้การสนทนาแบบยาวซึ่งทำได้อย่างมีประสิทธิภาพโดยการคูณในโดเมนความถี่ แต่ไม่ว่าในกรณีใดก็ตามไม่เคย "รับสัญญาณ FFT ทั้งหมด" - สิ่งนี้ดำเนินการโดยการเพิ่มการซ้อนทับของ FFT ที่มีความยาวขนาดเล็ก (1024 ตัวอย่างหรือมากกว่านั้น)
pichenettes

10

ขอบคุณพล็อตในคำตอบของ Olli Niemitaloฉันมั่นใจว่าสูตรที่ให้ไว้ในหนังสือมีข้อผิดพลาดในการลงชื่อ Non-linearity ที่ใช้สำหรับ fuzz หรือ distortion มักจะมีฟังก์ชั่น clipping smoothed บางชนิดซึ่งบีบอัดสัญญาณอินพุต อินพุทแอมพลิจูดขนาดเล็กนั้นมีการเปลี่ยนแปลงเล็กน้อยในขณะที่แอมพลิจูดของอินพุตที่สูงนั้นถูกตัดอย่างนุ่มนวล และตัวเลขที่แสดงในคำตอบของ Olli นั้นตรงกันข้าม

ดังนั้นฉันมั่นใจว่าสูตรที่ถูกต้องควรเป็น

(1)f(x)=x|x|(1ex2/|x|)=sgn(x)(1e|x|)

xf(x)sgn(x)|x|=xf(x)sgn(x)

f(x)

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

(1)x/|x|x2/|x|x

ถ้า (x> 0)
   y = 1 - exp (-x);
อื่น
   y = -1 + exp (x);
ปลาย

โอ้ใช่หนังสือผิด ๆweb.archive.org/web/20070826204128/http://www.notam02.no/และข้างต้นเป็นสูตรที่ถูกต้อง
Olli Niemitalo

โอเคขอบคุณ. คุณคิดว่านี่เป็นแหล่งที่มาของหนังสือหรือไม่
Matt L.

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

1
x2/|x|

2

คุณสามารถเขียนเนื้อความของฟังก์ชั่นลงใน Wolfram Alpha โดยตรงและทำการแปลง:

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

ดูเหมือนว่าฉันจะเป็นwaveshaperและสามารถใช้ได้ตามที่คุณอธิบาย


1
ตอนนี้ฉันเห็นพล็อตของคุณฉันค่อนข้างมั่นใจว่าสูตรในหนังสือไม่ถูกต้อง ดูคำตอบของฉัน คุณคิดอย่างไร?
Matt L.

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