Hakkında bir şüphe var (Düzenle: bu daha sonra sorudan kaldırıldı):
Bu AM ve PM gürültü bileşenlerinin dağılımının, giriş sinyali örnekleme saati ile ilişkisiz olduğu sürece, tekdüze olduğu varsayılabilir.
Sinyali düşünün:
işaret( t ) = cos( t ) + j günah( t )
ve miktar ölçümü:
qu a n t i z e d _ s ig n a l( t ) =yuvarlak( Nmarul( t ) )N-+ j ×yuvarlak( Ngünah( t ) )N-
bir niceleme adımı için 1 / N hem I hem de Q bileşenlerinin ( N-= 5 Şeklinizde).
Şekil 1. Sinyal izi (mavi çizgi) ve nicemlemesi (siyah noktalar) ve sinyalin farklı kısımlarının hangi yolla nicelendirildiğini görmek için aralarında bir geçiş N-= 5. "Dönüşüm" basitçe bir dizi ek parametrik grafiktirbir sinyal( t ) + ( 1 - a ) qu a n t i z e d _ s i g n a l( t ) en a = [15,25,35,45] .
Nicemleme hatası nedeniyle fazdaki hata:
p h a s e _ e r r o r( t ) = atanmış( Ben( qu a n t i z e d _ s i g n a l( t ) ) , Re( qu a n t i z e d _ s i g n a l( t ) ) )- atan( Ben( sinyal( t ) ) , Re( sinyal( t ) ) )= atan( yuvarlak( Ngünah( t ) ) , yuvarlak( Nmarul( t ) ) ) - atanan( Ngünah( t ) , Nmarul( t ) )= atan( yuvarlak( Ngünah( t ) ) , yuvarlak( Nmarul( t ) ) ) - mod( t - π, 2 π) + π
Sarılmış fazları çıkarmak risklidir, ancak bu durumda çalışır.
Şekil 2. p h a s e _ e r r o r( t ) için N-= 5.
Bu parça-bilge doğrusal bir fonksiyondur. Tüm çizgi segmentleri sıfır seviyesini geçer ancak diğer çeşitli seviyelerde sona erer. Bu,t Tekdüze rastgele değişken olarak, olasılık yoğunluk fonksiyonunda p h a s e _ e r r o r( t ) ,sıfıra yakın değerler aşırı temsil edilir. Yanip h a s e _ e r r o r( t ) tekdüze bir dağılımı olamaz.
Asıl soru göz önüne alındığında, Şekil 1'e bakıldığında, yeterince yüksek N-ve kompleks sinüzoidin böyle bir frekansı, her bir örnekleme aralığı boyunca sinyalin birkaç niceleme sınırını aştığında, numunelerdeki nicemleme hatalarının, sayı teorisinin tuhaflıklarından gelen sabit bir psödondom sayıları dizisidir. Hatalar frekansa veN-,ve aynı zamanda, frekans, örnekleme frekansının bir katının bir alt-üçü ise, bu durumda nicemleme hatası, olası tüm nicemleme hata değerlerini ihtiva etmeyen bir tekrar dizisidir. Büyük sınırındaN-I ve Q hatalarının dağılımları aynıdır ve faz ve büyüklük hataları, sinyal fazına bağlı dağılımlardan gelen yalancı sayılardır. Faz bağımlılığı oradadır çünkü dikdörtgen nicemleme ızgarasının bir yönü vardır.
Büyük sınırında N-,faz hatası ve büyüklük hatası, karmaşık hatanın dikey bileşenleridir. Büyüklük hatası, sonsuz nicemleme adımıyla orantılı olarak ifade edilebilir ve faz hatası,arcsinnicemleme aşamasının. Sinyal aşamasındaα büyüklük hatası açısal yönde α ve faz hatası açısal yöndedir α + π/ 2. Karmaşık nicemleme hatası, I ve Q eksenleri boyunca yönlendirilmiş bir nicemleme adımında eşit olarak dağıtılır ve koordinatlardaki köşeler niceleme adımıyla orantılı olarak ifade edilir:
[ (1/2,1/2),( - 1 / 2 , 1 / 2 ) ,( - 1 / 2 , - 1 / 2 ) ,( 1 / 2 , - 1 / 2 ) ]
Bu koordinatların dönüşü veya bunların orantılı faz hatası ve orantılı büyüklük hata eksenlerine eşzamanlı olarak yansıtılması, düğümlerle aynı düz üst parça-bilge doğrusal olasılık yoğunluk fonksiyonunu verir:
[marul( α )2-günah( α )2,marul( α )2+günah( α )2,-marul( α )2+günah( α )2,-marul( α )2-günah( α )2] = [2-√marul( α + π/ 4),2-√günah( α + π/ 4),-2-√marul( α + π/ 4),-2-√günah( α + π/ 4) ]
Şekil 3. Sinyal açısı göz önüne alındığında, orantılı faz hatası ve oransal büyüklük hatasının paylaşılan parça-bilişsel doğrusal düz-üst olasılık yoğunluk fonksiyonunun (PDF) düğümleri α. atα ∈ { - π, - π/ 2,0,π/ 2,π}PDF dikdörtgen şeklindedir. Bazı düğümler deα ∈ { - 3 π/ 4,-π/ 4,π/ 4,3π/ 4} en kötü durumda büyük bir üçgen PDFN- asimptotik tahmin 1) maksimum mutlak büyüklük hatası 2-√/ 2 niceleme adımları ve 2) maksimum mutlak faz hatası 2-√/ 2 zamanlar arcsin nicemleme aşamasının.
Ara aşamalarda PDF, örneğin şöyle görünür:
Şekil 4. Paylaşılan PDF α = π/ 8.
Dan'ın önerdiği gibi, PDF aynı zamanda büyüklük ve faz hata eksenlerine yansıtılan I ve Q hatalarının dikdörtgen PDF'lerinin bir dönüşümüdür . Yansıtılan PDF'lerden birinin genişliği:| marul( α ) |ve diğerinin genişliği | günah( α ) |. Kombine varyanslarımarul2( α ) / 12 +günah2( Α ) / 12 = 1 / 12 , üniforma giymek α.
Başlangıç fazının bazı "sahte" kombinasyonları ve karmaşık sinüzoidin frekansının ve örnekleme frekansının rasyonel sayı oranı, tekrar eden sekanstaki tüm numuneler için sadece küçük bir hata veren kombinasyonlar olabilir. Şekil l'de görülen hataların simetrileri nedeniyle, maksimum mutlak hata anlamında, bu frekanslar, daire üzerinde ziyaret edilen nokta sayısının 2'nin katı olduğu bir avantajdır, çünkü şans (düşük hata) puanların sadece yarısı. Noktaların geri kalanındaki hata, işaret döndürmeleri ile ilk olarak ne olduklarının kopyalarıdır. En az 6, 4 ve 12 katları daha da büyük bir avantaja sahiptir. Burada tam kuralın ne olduğundan emin değilim, çünkü her şeyin bir katı olmakla ilgili gibi görünmüyor. O' Modüler aritmetik ile birleştirilmiş grid simetrileri hakkında bir şeyler. Bununla birlikte, yalancı hata hataları belirleyicidir, bu nedenle kapsamlı bir arama en iyi düzenlemeleri ortaya çıkarır. Kök-ortalama-kare (RMS) mutlak hata anlamında en iyi düzenlemeleri bulmak en kolayıdır:
Şekil 5. Üst) Kare niceleme ızgarası kullanarak çeşitli osilatör bit derinlikleri için karmaşık IQ osilatöründe mümkün olan en düşük RMS mutlak niceleme hataları . Sözde düzenlemeler için kapsamlı arama için kaynak kodu yanıtın sonunda. Alt) Karşılaştırma için gösterilen detay (açık mavi)N-→ ∞ RMS mutlak nicemleme hatasının asimptotik tahmini, 1 / 6---√/ N, için N-=2k- 1 , nerede k + 1 osilatör bitlerinin sayısıdır.
En belirgin hata frekansının büyüklüğü hiçbir zaman RMS mutlak hatadan daha fazla değildir. 8-bit osilatör için, özellikle iyi bir seçim12 yaklaşık olarak birim çember üzerinde bulunan noktalar:
{ ( 0 , ± 112 ) ,( ± 112 , 0 ) ,( ± 97 , ± 56 ) ,( ± 56 , ± 97 ) }112,00297611139371
Artan açısal düzende karmaşık düzlemde bu noktalardan geçen ayrı bir kompleks sinüsoid, sadece 5. harmonik bozulmaya sahiptir ve - 91.5 dB, cevabın sonunda Oktav kaynak kodu tarafından onaylandığı gibi, temel ile karşılaştırılmıştır.
Düşük RMS mutlak nicemleme hatası elde etmek için, frekansların yaklaşık fazlarda olduğu gibi noktalardan geçmesi gerekmez [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 ] ⋅ 2 π/ 12 frekans için 1 / 12örnekleme sıklığının çarpımı. Örneğin, frekans5 / 12 örnekleme sıklığının aynı noktalardan farklı bir sırayla geçmesi: [ 0 , 5 , 10 , 3 , 8 , 1 , 6 , 11 , 4 , 9 , 2 , 7 ] ⋅ 2 π/ 12. Bence bu işe yaradığı gibi çalışıyor çünkü 5 ve 12 ikilidir .
Olası mükemmel düzenlemeler hakkında, sinüsoid frekansı örnekleme frekansının dörtte biri ise hata tüm noktalarda tam olarak sıfır olabilir (faz artışı π/ 2örnek başına). Kare ızgarada, böyle mükemmel düzenlemeler yoktur . Altıgen bir ızgarada veya I veya Q eksenlerinden birinin bir faktörle gerilmiş kare olmayan dikdörtgen bir ızgarada3-√ (böylece petek ızgarasındaki her ikinci satıra eşdeğerdir), bir faz artışı π/ 3örnek başına mükemmel çalışır. Bu ölçeklendirme analog alanda yapılabilir. Bu, şebekenin simetri eksenlerinin sayısını arttırır, bu da sahte sahte düzenlemelerde çoğunlukla olumlu değişikliklerle sonuçlanır:
Çeşitli osilatör bit derinliğinde için karmaşık IQ osilatör Şekil 6. Mümkün olan en düşük RMS mutlak nicemleme hatalarını, bir ile ölçeklenmiş eksenlerinden biri dikdörtgen niceleme ızgara3-√.
Özellikle, daire üzerinde 30 noktalı bir 8-bit osilatör için, mümkün olan en küçük RMS mutlak hatası kare ızgarada -51.3 dB ve en düşük-RMS-mutlak hatanın olduğu kare olmayan dikdörtgen ızgarada -62.5 dB'dir. sözde dizide hata var:
Şekil 7. 30 bitlik bir 8-bit sahte dizisi ile IQ düzlemindeki hatanın değerleri, bir faktör tarafından gerilmiş niceleme ızgarasında bulunan simetri eksenlerinden yararlanır 3-√yatay. Noktalar, simetri eksenleri etrafında döndürülen sadece üç sahte karmaşık sayıdan geliyor.
IQ saat sinyalleri ile ilgili pratik bir deneyimim yok, bu yüzden neyin önemli olduğundan emin değilim. Saat sinyali üretimi ile, bir dijital-analog dönüştürücü (DAC) kullanarak, iyi sahte düzenlemeler kullanılmadıkça, daha yüksek bir harmonik gürültü spektrumuna sahip olmaktan daha düşük bir beyaz gürültü tabanına sahip olmanın daha iyi olduğundan şüphelenirim. tekrarlayan bir nicemleme sırası dizisinden gelen ani yükselmeler (bkz. Tutarlı Örnekleme ve Nicemleme Gürültüsünün Dağılımı ). Bu spektral ani artışlar, aynı zamanda beyaz gürültü de parazit kapasitans yoluyla sızabilir ve sistemin diğer kısımlarında istenmeyen etkilere neden olabilir veya cihazın elektromanyetik uyumluluğunu (EMC) etkileyebilir. Bir benzetme olarak, yayılı spektrum teknolojisi, spektral sivri uçları en düşük gürültü seviyesine çevirerek EMC'yi geliştirir.
C ++ 'da ayrıntılı sahte düzenleme araması için kaynak kodu aşağıdadır. En az 16-bit osilatörler için en iyi düzenlemeleri bulmak için bir gecede çalıştırabilirsiniz.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));
}
}
}
Bulunan ilk örnek diziyi açıklayan örnek çıktı IScale = 1
:
bits,M,N,fundamentalI,fundamentalQ,I,Q,rms
8,12,112.0029761113937,112.0029761113937,0.0000000000000,112,0,0.0000265717171
İkinci örnek diziyi açıklayan örnek çıktı IScale = sqrt(3)
:
8,30,200.2597744568315,199.1627304588310,20.9328464782995,115,21,0.0007529202390
İlk örnek diziyi test etmek için oktav kodu:
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)))
İkinci örnek diziyi test etmek için oktav kodu:
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))))