मुझे इसमें संदेह है (संपादित करें: इसे बाद में प्रश्न से हटा दिया गया था):
इन एएम और पीएम शोर घटकों का वितरण यथोचित माना जा सकता है जब तक कि नमूना संकेत नमूना घड़ी के लिए असंबंधित है
संकेत पर विचार करें:
और इसका परिमाणीकरण:
signal(t)=cos(t)+jsin(t)
quantized_signal(t)=round(Ncos(t))N+j×round(Nsin(t))N
I और Q दोनों घटकों के के परिमाणीकरण चरण के लिए (आपके पास आपके चित्र में है)।1/NN=5
चित्रा 1. संकेत (नीली रेखा) और उसके परिमाणीकरण (काले डॉट्स) का निशान, और उनके बीच एक मॉर्फिंग यह देखने के लिए कि सिग्नल के विभिन्न भागों को लिए किस तरह से निर्धारित किया जाता है । "Morphing" बस अतिरिक्त पैरामीट्रिक भूखंडों का एक सेट है परN=5asignal(t)+(1−a)quantized_signal(t)a=[15,25,35,45].
परिमाणीकरण त्रुटि के कारण चरण में त्रुटि है:
phase_error(t)=atan(Im(quantized_signal(t)),Re(quantized_signal(t)))−atan(Im(signal(t)),Re(signal(t)))=atan(round(Nsin(t)),round(Ncos(t)))−atan(Nsin(t),Ncos(t))=atan(round(Nsin(t)),round(Ncos(t)))−mod(t−π,2π)+π
लिपटे चरणों को घटाना जोखिम भरा है लेकिन यह इस मामले में काम करता है।
चित्रा 2. लिए ।phase_error(t)N=5
यह एक टुकड़ा-वार रैखिक कार्य है। सभी लाइन खंड शून्य स्तर को पार करते हैं लेकिन विभिन्न अन्य स्तरों पर समाप्त होते हैं। इसका मतलब है, एक समान रैंडम वैरिएबल के रूप में को देखते हुए , कि प्रायिकता घनत्व फ़ंक्शन में शून्य के निकट मानों को किया जाता है। इसलिए में एक समान वितरण नहीं हो सकता है।tphase_error(t),phase_error(t)
वास्तविक प्रश्न को ध्यान में रखते हुए, अंजीर में 1, एक उच्च पर्याप्त और जटिल साइनसॉइड की ऐसी आवृत्ति के साथ कि प्रत्येक नमूने अंतराल के दौरान संकेत कई मात्राकरण सीमाओं को पार करता है, नमूनों में परिमाणीकरण त्रुटियों को प्रभावी ढंग से छद्म आयामी का एक निश्चित अनुक्रम है। संख्याएँ जो संख्या सिद्धांत के उद्धरणों से आती हैं। त्रुटियां आवृत्ति और पर निर्भर करती हैं और प्रारंभिक चरण पर भी यदि आवृत्ति नमूनाकरण आवृत्ति के एक से अधिक का एक उप-निर्माता है, तो उस स्थिति में, परिमाणीकरण त्रुटि एक दोहराव अनुक्रम है जिसमें सभी संभव परिमाणीकरण त्रुटि मान शामिल नहीं हैं। बड़े की सीमा मेंNN,NI और Q त्रुटियों के वितरण समान हैं, और चरण और परिमाण की त्रुटियां छद्म रूप से वितरण से आने वाली संख्याएं हैं जो सिग्नल चरण पर निर्भर करती हैं। चरण पर निर्भरता इसलिए है क्योंकि आयताकार परिमाणीकरण ग्रिड में एक अभिविन्यास है।
बड़े की सीमा में चरण त्रुटि और परिमाण त्रुटि जटिल त्रुटि के लंबवत घटक हैं। परिमाण त्रुटि आनुपातिक अत्यल्प परिमाणीकरण कदम को व्यक्त किया जा सकता है, और चरण त्रुटि आनुपातिक को व्यक्त किया जा सकता परिमाणीकरण कदम की। संकेत चरण में परिमाण त्रुटि कोणीय दिशा और चरण त्रुटि कोणीय दिशा । जटिल परिमाणीकरण त्रुटि I और Q कुल्हाड़ियों के साथ उन्मुख एक परिमाणीकरण चरण वर्ग में समान रूप से वितरित की जाती है, निर्देशांक के कोनों के साथ परिमाणीकरण कदम के आनुपातिक रूप से व्यक्त किए जाते हैं:N,arcsinααα+π/2
[(1/2,1/2),(−1/2,1/2),(−1/2,−1/2),(1/2,−1/2)]
आनुपातिक चरण त्रुटि और आनुपातिक परिमाण त्रुटि कुल्हाड़ियों के इन निर्देशांक या समकक्ष प्रक्षेपण के साथ नोड्स के साथ समान सपाट-टॉप टुकड़ा-वार रैखिक संभाव्यता घनत्व फ़ंक्शन दोनों के लिए देता है:
[cos(α)2−sin(α)2,cos(α)2+sin(α)2,−cos(α)2+sin(α)2,−cos(α)2−sin(α)2]=[2–√cos(α+π/4),2–√sin(α+π/4),−2–√cos(α+π/4),−2–√sin(α+π/4)]
चित्रा 3. सांकेतिक कोण देखते हुए आनुपातिक चरण त्रुटि और आनुपातिक परिमाण त्रुटि के साझा टुकड़ा-वार रैखिक फ्लैट-टॉप प्रोपेबिलिटी घनत्व फ़ंक्शन (पीडीएफ) के नोड्स । पर पीडीएफ आयताकार है। कुछ नोड्स भी विलीन हो जाते हैं, जो सबसे खराब स्थिति वाले बड़े त्रिकोणीय पीडीएफ के साथ एक त्रिकोणीय पीडीएफ देता है- विषमार्थी अनुमान 1) परिमाणीकरण चरणों की अधिकतम पूर्ण परिमाण त्रुटि और 2) परिमाणीकरण चरण की गुना की अधिकतम निरपेक्ष चरण त्रुटि ।αα∈{−π,−π/2,0,π/2,π}α∈{−3π/4,−π/4,π/4,3π/4}N2–√/22–√/2arcsin
मध्यवर्ती चरणों में पीडीएफ इस तरह से उदाहरण के लिए दिखता है:
चित्रा 4. साझा पीडीएफα=π/8.
जैसा कि दान ने सुझाव दिया है, पीडीएफ भी आयताकार पीडीएफ एस और आई त्रुटियों की परिमाण है जो परिमाण और चरण त्रुटि अक्षों पर अनुमानित है। अनुमानित पीडीएफ में से एक की चौड़ाई है, और अन्य की चौड़ाई है। उनकी संयुक्त विचरण है वर्दी से अधिक ।|cos(α)||sin(α)|cos2(α)/12+sin2(α)/12=1/12,α
प्रारंभिक चरण के कुछ "स्यूडोलुकी" संयोजन हो सकते हैं और जटिल साइनसॉइड की आवृत्ति का एक तर्कसंगत संख्या अनुपात और नमूना आवृत्ति जो दोहराव अनुक्रम में सभी नमूनों के लिए केवल एक छोटी सी त्रुटि देते हैं। अंजीर में देखी गई त्रुटियों की समरूपता के कारण, 1, अधिकतम पूर्ण त्रुटि के अर्थ में, वे आवृत्तियां एक लाभ पर हैं जिनके लिए सर्कल पर जाने वाले बिंदुओं की संख्या 2 से अधिक है, क्योंकि भाग्य (कम त्रुटि) की आवश्यकता है केवल आधे अंक। बाकी के बिंदुओं पर त्रुटि साइन फ्लैप्स के साथ पहले वाले पर डुप्लिकेट हैं। कम से कम 6, 4, और 12 के गुणकों का इससे भी बड़ा फायदा है। मुझे यकीन नहीं है कि सटीक नियम यहां क्या है, क्योंकि यह सब कुछ के कई होने के बारे में नहीं लगता है। यह मॉड्यूल समरूपता के साथ संयुक्त ग्रिड समरूपता के बारे में कुछ। फिर भी, छद्म आयामी त्रुटियां निर्धारक हैं, इसलिए एक संपूर्ण खोज सर्वोत्तम व्यवस्थाओं को प्रकट करती है। मूल-माध्य-वर्ग (RMS) पूर्ण त्रुटि बोध में सर्वोत्तम व्यवस्था खोजना सबसे आसान है:
चित्रा 5. शीर्ष) एक वर्ग परिमाणीकरण ग्रिड का उपयोग करते हुए, विभिन्न थरथरानवाला बिट गहराई के लिए जटिल बुद्धि थरथरानवाला में सबसे कम संभव आरएमएस निरपेक्ष परिमाणीकरण त्रुटियों । स्यूडोलुकी व्यवस्था के लिए संपूर्ण खोज का स्रोत कोड उत्तर के अंत में है। नीचे) विस्तार, तुलना (हल्का नीला) के लिए दिखा आरएमएस पूर्ण परिमाणीकरण त्रुटि के asymptotic अनुमान है, के लिए जहां है थरथरानवाला बिट्स की संख्या।N→∞1/6−−−√/N,N=2k−1,k+1
सबसे प्रमुख त्रुटि आवृत्ति का आयाम आरएमएस निरपेक्ष त्रुटि से अधिक कभी नहीं है। 8-बिट ऑसिलेटर के लिए, एक विशेष रूप से अच्छा विकल्प ये बिंदु हैं जो यूनिट सर्कल पर लगभग स्थित हैं:12
{(0,±112),(±112,0),(±97,±56),(±56,±97)}112.00297611139371
असतत जटिल जो कि कोणीय क्रम में जटिल विमान पर इन बिंदुओं से गुजरता है, केवल 5 वीं हार्मोनिक विरूपण है, और यह कि मौलिक की तुलना में डीबी है, जैसा कि उत्तर के अंत में ऑक्टेव स्रोत कोड द्वारा पुष्टि की गई है।−91.5
कम आरएमएस निरपेक्ष परिमाणीकरण त्रुटि प्राप्त करने के लिए, आवृत्तियों को अंकों के माध्यम से नहीं जाना पड़ता है जैसा कि अनुमानित चरणों नमूना आवृत्ति के लिए बार आवृत्ति के लिए । उदाहरण के लिए आवृत्ति बार नमूना आवृत्ति समान बिंदुओं के माध्यम से जाएगी, लेकिन एक अलग क्रम में: । मुझे लगता है कि यह काम करता है क्योंकि यह 5 और 12 कोप्राइम हैं ।[0,1,2,3,4,5,6,7,8,9,10,11]⋅2π/121/125/12[0,5,10,3,8,1,6,11,4,9,2,7]⋅2π/12
संभावित सही व्यवस्था के बारे में, सभी बिंदुओं पर त्रुटि बिल्कुल शून्य हो सकती है यदि साइनसॉइड की आवृत्ति नमूने की आवृत्ति का एक चौथाई है (चरण प्रति नमूना की वृद्धि )। स्क्वायर ग्रिड पर, ऐसी कोई अन्य परिपूर्ण व्यवस्था नहीं है । एक हेक्सागोनल ग्रिड पर या मैं या क्यू में से एक के साथ एक गैर वर्ग आयताकार ग्रिड पर का एक पहलू से फैला कुल्हाड़ियों (जिससे यह मधुकोश ग्रिड पर हर दूसरी पंक्ति के बराबर है), का एक चरण वेतन वृद्धि प्रति नमूना पूरी तरह से काम करेगा। इस स्केलिंग को एनालॉग डोमेन में किया जा सकता है। यह ग्रिड के सममिति अक्षों की संख्या को बढ़ाता है, जिसके परिणामस्वरूप छद्म-मंडल व्यवस्था में ज्यादातर अनुकूल परिवर्तन होते हैं:π/23–√π/3
चित्रा 6. विभिन्न थरथरानवाला बिट गहराई के लिए जटिल बुद्धि थरथरानवाला में कम से कम संभव आरएमएस निरपेक्ष परिमाणीकरण त्रुटियों, एक आयताकार परिमाणीकरण ग्रिड3–√ का उपयोग करके द्वारा स्केल की गई ।
विशेष रूप से, सर्कल पर 30 बिंदुओं के साथ 8-बिट थरथरानवाला के लिए, सबसे छोटा संभव आरएमएस निरपेक्ष त्रुटि -51.3 डीबी वर्ग ग्रिड पर और -62.5 डीबी गैर-वर्ग आयताकार ग्रिड पर है, जहां सबसे कम-आरएमएस-निरपेक्ष-त्रुटि है छद्म विज्ञान अनुक्रम में त्रुटि है:
चित्र 7. लंबाई 30 के 8-बिट छद्म विज्ञान अनुक्रम द्वारा IQ विमान पर त्रुटि के मान क्षैतिज रूप से कारक द्वारा खींचे गए परिमाणीकरण ग्रिड में पाए गए समरूपता अक्षों का लाभ उठाते हैं । अंक सिर्फ़ तीन छद्म रूपी जटिल संख्याओं से आते हैं, सममिति अक्षों के चारों ओर फ़्लिप करते हैं।3–√
मुझे आईक्यू घड़ी संकेतों के साथ कोई व्यावहारिक अनुभव नहीं है, इसलिए मुझे यकीन नहीं है कि क्या चीजें मायने रखती हैं। घड़ी संकेत पीढ़ी के साथ, डिजिटल-से-एनालॉग कनवर्टर (DAC) का उपयोग करते हुए, मुझे संदेह है कि जब तक कि अच्छे छद्म व्यवस्था का उपयोग नहीं किया जाता है, तब तक कम सफेद शोर वाले फर्श का होना बेहतर होता है, क्योंकि इसमें उच्च के साथ एक हार्मोनिक शोर स्पेक्ट्रम होता है स्पाइक जो कि परिमाणीकरण त्रुटि के दोहराव अनुक्रम से आते हैं (देखें सुसंगत नमूनाकरण और परिमाणीकरण वितरण का वितरण )। ये वर्णक्रमीय स्पाइक्स, साथ ही सफेद शोर, परजीवी समाई के माध्यम से रिसाव कर सकते हैं और सिस्टम के अन्य भागों में अवांछित प्रभाव डाल सकते हैं या डिवाइस के विद्युत चुम्बकीय संगतता (EMC) को प्रभावित कर सकते हैं। एक सादृश्य के रूप में, स्प्रेड स्पेक्ट्रम तकनीक ईएमसी को वर्णक्रमीय स्पाइक्स को निचले-शिखर शोर मंजिल में बदलकर बेहतर बनाती है।
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))))