ฉันมีข้อสงสัยเกี่ยวกับ (แก้ไข: นี่ถูกลบออกจากคำถาม):
การกระจายขององค์ประกอบเสียง AM และ PM เหล่านี้สามารถสันนิษฐานได้อย่างสมเหตุสมผลว่ามีความสม่ำเสมอตราบใดที่สัญญาณอินพุทไม่ได้มีความสัมพันธ์กับนาฬิกาตัวอย่าง
พิจารณาสัญญาณ:
สัญญาณ( t ) = cos( t ) + j บาป( t )
และปริมาณของมัน:
Qยูn T ฉันซีอีd _ sฉันg n a l( t ) =รอบ( Ncos( T ) )ยังไม่มีข้อความ+ j ×รอบ( Nบาป( T ) )ยังไม่มีข้อความ
สำหรับขั้นตอนการทำควอนตัมของ 1 / N ของทั้ง I และองค์ประกอบ Q (คุณมี ยังไม่มีข้อความ=5 ในรูปของคุณ)
รูปที่ 1 ร่องรอยของสัญญาณ (เส้นสีฟ้า) และการหาปริมาณของมัน (จุดสีดำ) และ morphing ระหว่างพวกเขาเพื่อดูว่าส่วนต่าง ๆ ของสัญญาณที่ถูก quantized สำหรับ ยังไม่มีข้อความ= 5. "Morphing" เป็นเพียงชุดของการแปลงพารามิเตอร์เพิ่มเติมสัญญาณ( t ) + ( 1 - a ) qคุณa n t i z e d _ s ฉันg n a l( t ) ที่ a = [15,25,35,45] .
ข้อผิดพลาดในเฟสเนื่องจากข้อผิดพลาดเชิงปริมาณคือ:
p h a s e _ e r r o r( t ) = atan(อิม( qคุณa n t i z e d _ s ฉันg n a l( t ) ) , Re( qคุณa n t i z e d _ s ฉันg n a l( t ) ) )- atan(อิม(สัญญาณ( t ) ) , Re(สัญญาณ( t ) ) )= atan(รอบ( Nบาป( T ) ) , รอบ( Ncos( t ) ) ) - atan( Nบาป( t ) , Ncos( T ) )= atan(รอบ( Nบาป( T ) ) , รอบ( Ncos( t ) ) ) - mod( t - π, 2 π) + π
การลบเฟสที่ห่อไว้นั้นมีความเสี่ยง แต่มันใช้ได้ในกรณีนี้
รูปที่ 2 p h a s e _ e rr or( t ) สำหรับ ยังไม่มีข้อความ= 5.
นั่นคือฟังก์ชันเชิงเส้นที่ชาญฉลาด ส่วนของเส้นตรงทั้งหมดข้ามระดับศูนย์ แต่จบที่ระดับอื่น ๆ มันหมายถึงการพิจารณาเสื้อ เป็นตัวแปรสุ่มที่สม่ำเสมอในฟังก์ชันความหนาแน่นของความน่าจะเป็น p h a s e _ e r r or( T ) ,ค่าใกล้ศูนย์เป็นตัวแทน ดังนั้นp h a s e _ e r r o r( t ) ไม่สามารถมีการกระจายที่สม่ำเสมอ
พิจารณาคำถามจริงดูรูปที่ 1 ด้วยค่าสูงพอ ยังไม่มีข้อความและความถี่ของความซับซ้อนของไซนัสที่ว่าในแต่ละช่วงเวลาการสุ่มตัวอย่างสัญญาณจะหมุนผ่านขอบเขตของการหาปริมาณจำนวนมากความคลาดเคลื่อนเชิงปริมาณในตัวอย่างนั้นเป็นลำดับที่แน่นอนของตัวเลขหลอกเทียมที่มาจาก quirks ของทฤษฎีจำนวน ข้อผิดพลาดขึ้นอยู่กับความถี่และยังไม่มีข้อความ,และในระยะเริ่มต้นหากความถี่เป็น submultiple ของหลายความถี่การสุ่มตัวอย่างซึ่งในกรณีที่ข้อผิดพลาดเชิงปริมาณเป็นลำดับการทำซ้ำที่ไม่มีค่าความผิดพลาดเชิงปริมาณที่เป็นไปได้ทั้งหมด ในขีด จำกัด ขนาดใหญ่ยังไม่มีข้อความการแจกแจงของข้อผิดพลาดของ I และ Q นั้นเหมือนกันและข้อผิดพลาดของเฟสและขนาดคือตัวเลขหลอกเทียมที่มาจากการแจกแจงที่ขึ้นอยู่กับเฟสสัญญาณ การพึ่งพาเฟสนั้นอยู่ที่นั่นเพราะกริด quantization สี่เหลี่ยมมีทิศทาง
ในขีด จำกัด ขนาดใหญ่ ยังไม่มีข้อความ,ข้อผิดพลาดเฟสและข้อผิดพลาดขนาดเป็นองค์ประกอบตั้งฉากของข้อผิดพลาดที่ซับซ้อน ความคลาดเคลื่อนขนาดสามารถแสดงตามสัดส่วนของขั้นตอนควอนตัมที่น้อยที่สุดและความคลาดเคลื่อนเฟสสามารถแสดงตามสัดส่วนของarcsinของขั้นตอนการควอนตัม ที่เฟสสัญญาณα ข้อผิดพลาดขนาดอยู่ในทิศทางเชิงมุม α และข้อผิดพลาดเฟสอยู่ในทิศทางเชิงมุม α + π/ 2. ข้อผิดพลาดเชิงปริมาณที่ซับซ้อนมีการกระจายอย่างเท่าเทียมกันในตารางขั้นตอนการเชิงปริมาณที่มุ่งเน้นไปตามแกน I และ Q กับมุมที่พิกัดที่แสดงตามสัดส่วนกับขั้นตอนการควอนตัม:
[ (1/2,1/2),( - 1 / 2 , 1 / 2 ) ,( - 1 / 2 , - 1 / 2 ) ,( 1 / 2 , - 1 / 2 ) ]
การหมุนพิกัดเหล่านี้หรือการฉายภาพอย่างเท่าเทียมกันของพวกเขาไปยังข้อผิดพลาดเฟสแบบสัดส่วนและแกนข้อผิดพลาดแบบสัดส่วนทำให้ทั้งฟังก์ชันความหนาแน่นของความน่าจะเป็นเชิงเส้นแบบแบนบนชิ้นเดียวกันกับโหนด:
[cos( α )2-บาป( α )2,cos( α )2+บาป( α )2,-cos( α )2+บาป( α )2,-cos( α )2-บาป( α )2] = [2-√cos( α + π/ 4),2-√บาป( α + π/ 4),-2-√cos( α + π/ 4),-2-√บาป( α + π/ 4) ]
รูปที่ 3 โหนดของฟังก์ชั่นความหนาแน่นความสามารถในการเคลื่อนย้ายเชิงเส้นแบบแบนส่วนบนแบบแบ่งส่วนที่ชาญฉลาด (PDF) ของข้อผิดพลาดเฟสแบบสัดส่วนและข้อผิดพลาดขนาดตามสัดส่วนเมื่อกำหนดมุมสัญญาณ α. ที่อัลฟ่า∈ { - π, - π/ 2,0,π/ 2,π}PDF เป็นสี่เหลี่ยม บางโหนดรวมที่อัลฟ่า∈ { - 3 π/ 4,-π/ 4,π/ 4,3π/ 4} ให้ PDF แบบสามเหลี่ยมที่มีตัวพิมพ์ใหญ่ที่สุด -ยังไม่มีข้อความ การประมาณแบบเชิงเส้นเท่ากับ 1) ความคลาดเคลื่อนสัมบูรณ์สูงสุดของ 2-√/ 2 ขั้นตอนการหาปริมาณและ 2) ข้อผิดพลาดเฟสสัมบูรณ์สูงสุดของ 2-√/ 2 ครั้ง arcsin ของขั้นตอนการควอนตัม
ที่เฟสกลาง PDF จะมีลักษณะเช่นนี้:
รูปที่ 4 PDF ที่แชร์ที่ α = π/ 8
ตามที่แนะนำโดย Dan PDF ยังเป็นข้อสังสัยของสี่เหลี่ยม PDF s ของข้อผิดพลาด I และ Q ที่ฉายลงบนแกนขนาดและแกนข้อผิดพลาดเฟส ความกว้างของหนึ่งใน PDF ที่ฉายคือ| cos( α ) |และความกว้างของอีกอันคือ | บาป( α ) |. ความแปรปรวนรวมของพวกเขาคือcos2( α ) / 12 +บาป2( α ) / 12 = 1 / 12 , เหมือนกันมากกว่า α.
อาจมีการรวมกันของ "pseudolucky" ของเฟสแรกและอัตราส่วนจำนวนตรรกยะของความถี่ของไซน์ไซด์ที่ซับซ้อนและความถี่การสุ่มตัวอย่างที่ให้ข้อผิดพลาดเล็กน้อยสำหรับตัวอย่างทั้งหมดในลำดับการทำซ้ำ เนื่องจากความสมมาตรของข้อผิดพลาดที่เห็นในรูปที่ 1 ในความผิดพลาดสัมบูรณ์สูงสุดความรู้สึกความถี่เหล่านั้นเป็นข้อได้เปรียบที่จำนวนของคะแนนที่เข้าเยี่ยมชมในวงกลมเป็นทวีคูณของ 2 เพราะโชค (ข้อผิดพลาดต่ำ) เป็นสิ่งจำเป็น เพียงครึ่งหนึ่งของคะแนน ข้อผิดพลาดในส่วนที่เหลือของจุดซ้ำกันของสิ่งที่พวกเขาเป็นคนแรกที่มีเครื่องหมายพลิก ทวีคูณอย่างน้อย 6, 4 และ 12 มีข้อดีมากกว่า ฉันไม่แน่ใจว่ากฎที่แน่นอนอยู่ที่นี่เพราะมันดูเหมือนจะไม่เกี่ยวกับการเป็นบางสิ่งบางอย่าง มัน' บางอย่างเกี่ยวกับ symmetries กริดรวมกับโมดูโลคณิตศาสตร์ อย่างไรก็ตามข้อผิดพลาด pseudorandom นั้นถูกกำหนดไว้แล้วดังนั้นการค้นหาอย่างละเอียดจึงเผยให้เห็นการจัดการที่ดีที่สุด การค้นหาการจัดการที่ดีที่สุดในความรู้สึกผิดพลาดแบบรูทค่าเฉลี่ย (RMS) นั้นง่ายที่สุด:
รูปที่ 5 Top) RMS ที่เป็นไปได้ต่ำสุดข้อผิดพลาด quantization แน่นอนใน oscillator IQ ซับซ้อนสำหรับความลึก oscillator บิตต่าง ๆ โดยใช้ควอนตารางตาราง ซอร์สโค้ดสำหรับการค้นหา pseudolucky อย่างละเอียดอยู่ที่ท้ายคำตอบ ด้านล่าง) รายละเอียดแสดงสำหรับการเปรียบเทียบ (สีฟ้าอ่อน)ยังไม่มีข้อความ→ ∞ การประมาณแบบเชิงเส้นกำกับของข้อผิดพลาดเชิงปริมาณสัมบูรณ์ RMS 1 / 6---√/ N, สำหรับ ยังไม่มีข้อความ=2k- 1 , ที่ไหน k + 1 คือจำนวนบิต oscillator
แอมพลิจูดของความถี่ข้อผิดพลาดที่โดดเด่นที่สุดนั้นไม่เกินข้อผิดพลาดสัมบูรณ์ RMS สำหรับออสซิลเลเตอร์ 8 บิตตัวเลือกที่ดีโดยเฉพาะคือ12 จุดที่อยู่โดยประมาณในวงกลมหน่วย:
{ ( 0 , ± 112 ) ,( ± 112 , 0 ) ,( ± 97 , ± 56 ) ,( ± 56 , ± 97 ) }112.00297611139371
ไซน์ไซด์ที่ไม่ต่อเนื่องที่ซับซ้อนซึ่งผ่านจุดเหล่านี้บนระนาบเชิงซ้อนเพื่อเพิ่มมุมเชิงมุมมีความเพี้ยนฮาร์มอนิกเพียง 5 และที่ - 91.5 เดซิเบลเมื่อเทียบกับพื้นฐานตามที่ได้รับการยืนยันโดยซอร์สโค้ด Octave ในตอนท้ายของคำตอบ
เพื่อให้ได้ข้อผิดพลาดการวัดค่าสัมบูรณ์แบบ RMS ต่ำความถี่ไม่จำเป็นต้องผ่านจุดต่าง ๆ ตามลำดับโดยประมาณ [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 ] ⋅ 2 π/ 12 สำหรับความถี่ 1 / 12คูณความถี่การสุ่มตัวอย่าง ตัวอย่างเช่นความถี่5 / 12 คูณด้วยความถี่การสุ่มตัวอย่างจะผ่านจุดเดียวกัน แต่ในลำดับที่ต่างกัน: [ 0 , 5 , 10 , 3 , 8 , 1 , 6 , 11 , 4 , 9 , 2 , 7 ] ⋅ 2 π/ 12. ผมคิดว่างานนี้มันไม่เพราะ 5 และ 12 มีcoprime
เกี่ยวกับการจัดการที่สมบูรณ์แบบที่เป็นไปได้ข้อผิดพลาดอาจเป็นศูนย์ที่ทุกจุดถ้าความถี่ของไซนัสเป็นหนึ่งในสี่ของความถี่การสุ่มตัวอย่าง (การเพิ่มเฟสของ π/ 2ต่อตัวอย่าง) ในตารางสี่เหลี่ยมไม่มีการเตรียมการที่สมบูรณ์แบบอื่น ๆ อีกแล้ว บนกริดหกเหลี่ยมหรือบนตารางสี่เหลี่ยมที่ไม่ใช่ตารางที่มีหนึ่งในแกน I หรือ Q ที่ยืดออกโดยปัจจัยหนึ่ง3-√ (โดยที่มันเทียบเท่ากับทุกแถวที่สองในตารางรวงผึ้ง) ซึ่งเป็นการเพิ่มเฟสของ π/ 3ต่อตัวอย่างจะทำงานได้อย่างสมบูรณ์ การปรับขนาดดังกล่าวสามารถทำได้ในโดเมนแอนะล็อก สิ่งนี้จะเพิ่มจำนวนแกนสมมาตรของกริดซึ่งส่งผลให้เกิดการเปลี่ยนแปลงที่น่าพอใจในการจัดการ pseudolucky:
รูปที่ 6 ข้อผิดพลาดการวัดค่าสัมบูรณ์แบบสัมบูรณ์ RMS ที่เป็นไปได้ต่ำที่สุดในไอคิวออสซิลเลเตอร์ที่ซับซ้อนสำหรับความลึกบิตของออสซิลเลเตอร์ต่าง ๆ โดยใช้ตารางควอนติเซชันสี่เหลี่ยมกับแกน3-√.
โดยเฉพาะอย่างยิ่งสำหรับออสซิลเลเตอร์ 8 บิตที่มี 30 คะแนนบนวงกลมข้อผิดพลาดสัมบูรณ์ RMS ที่เล็กที่สุดที่เป็นไปได้คือ -51.3 dB บนกริดสแควร์และ -62.5 เดซิเบลบนกริดสี่เหลี่ยมที่ไม่ใช่สี่เหลี่ยมจัตุรัส ลำดับ pseudolucky มีข้อผิดพลาด:
รูปที่ 7 ค่าของข้อผิดพลาดบนระนาบ IQ โดยลำดับ pseudolucky 8 บิตที่มีความยาว 30 ใช้ประโยชน์จากแกนสมมาตรที่พบในตาราง quantization ที่ยืดออกโดยปัจจัย 3-√แนวนอน คะแนนมาจากตัวเลขที่ซับซ้อน pseudolucky เพียงสามตัวพลิกรอบแกนสมมาตร
ฉันไม่มีประสบการณ์จริงกับสัญญาณนาฬิกา IQ ดังนั้นฉันจึงไม่แน่ใจว่ามีความสำคัญอะไร ด้วยการสร้างสัญญาณนาฬิกาโดยใช้ตัวแปลงสัญญาณดิจิตอลเป็นอะนาล็อก (DAC) ฉันสงสัยว่าถ้าไม่มีการใช้ pseudolucky ที่ดีก็ควรที่จะมีพื้นเสียงสีขาวที่ต่ำกว่าดีกว่าเพื่อให้มีคลื่นเสียงฮาร์มอนิกที่มีค่าสูงกว่า เดือยที่มาจากข้อผิดพลาดในการทำควอนตัมซ้ำ ๆ กัน (ดูการสุ่มตัวอย่างที่สอดคล้องกันและการกระจายตัวของควอนติเสียง ) เดือยสเปกตรัมเหล่านี้เช่นเดียวกับเสียงสีขาวสามารถรั่วไหลผ่านความจุของกาฝากและมีผลกระทบที่ไม่พึงประสงค์ในส่วนอื่น ๆ ของระบบหรือส่งผลกระทบต่อความเข้ากันได้ทางแม่เหล็กไฟฟ้า (EMC) ของอุปกรณ์ ในฐานะที่เป็นการเปรียบเทียบเทคโนโลยีการแพร่กระจายคลื่นความถี่ช่วยปรับปรุง EMC โดยการเปลี่ยน spikes สเปกตรัมเป็นชั้นเสียงที่ต่ำกว่าสูงสุด
รหัสที่มาสำหรับการค้นหาการจัดเรียง pseudolucky ครบถ้วนสมบูรณ์ใน C ++ ดังนี้ คุณสามารถเรียกใช้มันข้ามคืนเพื่อค้นหาการจัดการที่ดีที่สุดสำหรับออสซิลเลเตอร์อย่างน้อย 16 บิต1 ≤ M≤ 100.
// Compile with g++ -O3 -std-c++11
#include <stdio.h>
#include <math.h>
#include <complex>
#include <float.h>
#include <algorithm>
// N = circle size in quantization steps
const int maxN = 127;
// M = number of points on the circle
const int minM = 1;
const int maxM = 100;
const int stepM = 1;
// k = floor(log2(N))
const int mink = 2;
const double IScale = 1; // 1 or larger please, sqrt(3) is very lucky, and 1 means a square grid
typedef std::complex<double> cplx;
struct Arrangement {
int initialI;
int initialQ;
cplx fundamentalIQ;
double fundamentalIQNorm;
double cost;
};
int main() {
cplx rotation[maxM+1];
cplx fourierCoef[maxM+1];
double invSlope[maxM+1];
Arrangement bestArrangements[(maxM+1)*(int)(floor(log2(maxN))+1)];
const double maxk(floor(log2(maxN)));
const double IScaleInv = 1/IScale;
for (int M = minM; M <= maxM; M++) {
rotation[M] = cplx(cos(2*M_PI/M), sin(2*M_PI/M));
invSlope[M] = tan(M_PI/2 - 2*M_PI/M)*IScaleInv;
for (int k = 0; k <= maxk; k++) {
bestArrangements[M+(maxM+1)*k].cost = DBL_MAX;
bestArrangements[M+(maxM+1)*k].fundamentalIQNorm = 1;
}
}
for (int M = minM; M <= maxM; M += stepM) {
for (int m = 0; m < M; m++) {
fourierCoef[m] = cplx(cos(2*M_PI*m/M), -sin(2*M_PI*m/M))/(double)M;
}
for (int initialQ = 0; initialQ <= maxN; initialQ++) {
int initialI(IScale == 1? initialQ : 0);
initialI = std::max(initialI, (int)floor(invSlope[M]*initialQ));
if (initialQ == 0 && initialI == 0) {
initialI = 1;
}
for (; initialI*(int_least64_t)initialI <= (2*maxN + 1)*(int_least64_t)(2*maxN + 1)/4 - initialQ*(int_least64_t)initialQ; initialI++) {
cplx IQ(initialI*IScale, initialQ);
cplx roundedIQ(round(real(IQ)*IScaleInv)*IScale, round(imag(IQ)));
cplx fundamentalIQ(roundedIQ*fourierCoef[0].real());
for (int m = 1; m < M; m++) {
IQ *= rotation[M];
roundedIQ = cplx(round(real(IQ)*IScaleInv)*IScale, round(imag(IQ)));
fundamentalIQ += roundedIQ*fourierCoef[m];
}
IQ = fundamentalIQ;
roundedIQ = cplx(round(real(IQ)*IScaleInv)*IScale, round(imag(IQ)));
double cost = norm(roundedIQ-IQ);
for (int m = 1; m < M; m++) {
IQ *= rotation[M];
roundedIQ = cplx(round(real(IQ)*IScaleInv)*IScale, round(imag(IQ)));
cost += norm(roundedIQ-IQ);
}
double fundamentalIQNorm = norm(fundamentalIQ);
int k = std::max(floor(log2(initialI)), floor(log2(initialQ)));
// printf("(%d,%d)",k,initialI);
if (cost*bestArrangements[M+(maxM+1)*k].fundamentalIQNorm < bestArrangements[M+(maxM+1)*k].cost*fundamentalIQNorm) {
bestArrangements[M+(maxM+1)*k] = {initialI, initialQ, fundamentalIQ, fundamentalIQNorm, cost};
}
}
}
}
printf("N");
for (int k = mink; k <= maxk; k++) {
printf(",%d-bit", k+2);
}
printf("\n");
for (int M = minM; M <= maxM; M += stepM) {
printf("%d", M);
for (int k = mink; k <= maxk; k++) {
printf(",%.13f", sqrt(bestArrangements[M+(maxM+1)*k].cost/bestArrangements[M+(maxM+1)*k].fundamentalIQNorm/M));
}
printf("\n");
}
printf("bits,M,N,fundamentalI,fundamentalQ,I,Q,rms\n");
for (int M = minM; M <= maxM; M += stepM) {
for (int k = mink; k <= maxk; k++) {
printf("%d,%d,%.13f,%.13f,%.13f,%d,%d,%.13f\n", k+2, M, sqrt(bestArrangements[M+(maxM+1)*k].fundamentalIQNorm), real(bestArrangements[M+(maxM+1)*k].fundamentalIQ), imag(bestArrangements[M+(maxM+1)*k].fundamentalIQ), bestArrangements[M+(maxM+1)*k].initialI, bestArrangements[M+(maxM+1)*k].initialQ, sqrt(bestArrangements[M+(maxM+1)*k].cost/bestArrangements[M+(maxM+1)*k].fundamentalIQNorm/M));
}
}
}
เอาต์พุตตัวอย่างที่อธิบายลำดับตัวอย่างแรกที่พบด้วยIScale = 1
:
bits,M,N,fundamentalI,fundamentalQ,I,Q,rms
8,12,112.0029761113937,112.0029761113937,0.0000000000000,112,0,0.0000265717171
ตัวอย่างเอาต์พุตที่อธิบายลำดับตัวอย่างที่สองที่พบด้วยIScale = sqrt(3)
:
8,30,200.2597744568315,199.1627304588310,20.9328464782995,115,21,0.0007529202390
รหัสระดับแปดเสียงสำหรับการทดสอบลำดับตัวอย่างแรก:
x = [112+0i, 97+56i, 56+97i, 0+112i, -56+97i, -97+56i, -112+0i, -97-56i, -56-97i, 0-112i, 56-97i, 97-56i];
abs(fft(x))
20*log10(abs(fft(x)(6)))-20*log10(abs(fft(x)(2)))
รหัสระดับแปดเสียงสำหรับการทดสอบลำดับตัวอย่างที่สอง:
x = exp(2*pi*i*(0:29)/30)*(199.1627304588310+20.9328464782995i);
y = real(x)/sqrt(3)+imag(x)*i;
z = (round(real(y))*sqrt(3)+round(imag(y))*i)/200.2597744568315;
#Error on IQ plane
star = z-exp(2*pi*i*(0:29)/30)*(199.1627304588310+20.9328464782995i)/200.2597744568315;
scatter(real(star), imag(star));
#Magnitude of discrete Fourier transform
scatter((0:length(z)-1)*2*pi/30, 20*log10(abs(fft(z))/abs(fft(z)(2)))); ylim([-120, 0]);
#RMS error:
10*log10((sum(fft(z).*conj(fft(z)))-(fft(z)(2).*conj(fft(z)(2))))/(fft(z)(2).*conj(fft(z)(2))))