Tutarlı Örnekleme için Niceleme Gürültüsü - Faz Gürültüsü?


9

Güncelleme: Bu yayının altındaki eklenen düşüncelere bakın.


Aşağıda açıklananlarla kısıtlanmayan genel örnekleme koşulları altında (örnekleme saati ile ilgisiz sinyal), nicemleme gürültüsü genellikle bir nicemleme seviyesi üzerinde tekdüze bir dağılım olarak tahmin edilir. İki ADC, karmaşık bir sinyalin örneklenmesini oluşturmak için I ve Q yollarıyla birleştirildiğinde, niceleme gürültüsü, aşağıda simüle edildiği gibi hem genlik hem de faz gürültü bileşenlerine sahiptir. Gösterildiği gibi, bu gürültü, I ve Q bileşenleri bir sinyalin 45 ° açısında olduğu gibi genliğe ve faza eşit olarak katkıda bulunduğu zaman üçgen bir dağılıma sahiptir ve sinyal eksende olduğunda eşittir. Bu, her I ve Q için nicelik gürültüsünün ilişkisiz olması nedeniyle beklenir, böylece dağılımlar, her ikisi de çıktı sonucuna katkıda bulunurken kıvrılır.

Sorulması gereken soru, faz gürültüsünün bu dağılımının tutarlı örnekleme vakaları için önemli ölçüde değişip değişmediğidir (örnekleme saatinin kendisinin bir faktör değil çok daha üstün faz gürültüsü olduğunu varsayın)? Özellikle, tutarlı örneklemenin nicelemeyle ilgili faz gürültüsünü önemli ölçüde azaltıp azaltmayacağını anlamaya çalışıyorum. Bu, tutarlılığın kolayca korunabileceği saat sinyali üretimi için doğrudan uygulanabilir.

Hem gerçek sinyalleri (bir ADC) hem de karmaşık sinyalleri (iki ADC; biri I için ve biri Q için birlikte tek bir karmaşık örneği tanımlayan) düşünün. Gerçek sinyal durumunda, girdi tam ölçekli bir sinüs dalgasıdır ve faz terimi analitik sinyalden türetilir; sinüzoidal bir tonun sıfır geçişindeki değişikliklerle ilgili titreşim, gerçek bir sinyal için ortaya çıkan faz gürültüsünün bir örneği olacaktır. Karmaşık sinyaller için, giriş tam ölçeklidirbirejωtgerçek ve hayali bileşenlerin her biri tam ölçekte sinüs dalgaları olacaktı.

Bu, tutarlı örneklemenin iyi tanımlandığı, ancak faz gürültüsünden özellikle bahsedilmediği bu soru ile ilgilidir:

Tutarlı Örnekleme ve Niceleme Gürültüsünün Dağılımı

İndüklenen AM ve PM gürültü bileşenlerini daha açık bir şekilde tanımlamak için, belirli bir örnekleme anında sürekli bir zamanda karmaşık bir vektörü gösteren karmaşık nicemleme durumu için aşağıdaki grafiği ekledim. sinyalin gerçek ve hayali kısımlarının nicemleme seviyelerinin düzgün dağılımı.

resim açıklamasını buraya girin

İndüklenen genlik hatasını ve faz hatasını göstermek için yukarıdaki grafikte nicemlemenin gerçekleştiği yere yakınlaştırma:

resim açıklamasını buraya girin

Böylece keyfi bir sinyal verilir.

s(t)=bir(t)ejωt=bir(t)marul(ωt)+jbir(t)günah(ωt)=ben(t)+jq(t)

Nicelenmiş sinyal, tarafından verilen en yakın mesafe noktasıdır.

sk=benk+jqk

Nerede benk ve qk her biri aşağıdakilere göre eşlenen nicelenmiş I ve Q seviyelerini temsil eder:

S{x}=ΔxΔ+12

Nerede ()zemin fonksiyonunu temsil eder veΔ ayrı bir nicemleme seviyesini temsil eder.

benk=S{ben(tk)}qk=S{q(tk)}

Genlik hatası: |s(tk)|-|sk| nerede tk o zaman s(t) üretmek için örneklendi sk.

Faz hatası arg{s(tk)}-arg{sk}=arg{s(tk)(sk)*} burada * karmaşık konjugatı temsil eder.

Bu yazı için soru, örnekleme saati giriş sinyali ile orantılı olduğunda (tamsayı katsayısı) faz bileşeninin doğası nedir?

Yardımcı olmak için, burada I ve Q'da 6 bit nicemleme ile karmaşık nicemleme durumu için genlik ve faz hatalarının simüle edilmiş dağılımları vardır. Bu simülasyonlar için gerçek sinyalin "gerçeğin" bir nicemlemede herhangi bir yerde olması muhtemel olduğu varsayılmaktadır. sektör, yukarıdaki şemada gösterilen ızgara olarak tanımlanmıştır. Sinyal kadranlardan biri (tümü I veya tümü Q) boyunca olduğunda, gerçek sinyallerle tek ADC durumunda dağılım beklendiği gibi eşittir. Ancak sinyal 45 ° açıyla olduğunda dağılım üçgen şeklindedir. Bu durum, sinyallerin her birinin ilişkisiz düzgün dağılımlar olduğu eşit I ve Q katkılarına sahip olması anlamlıdır; böylece iki dağıtım üçgen şeklinde kıvrılır.

Nicemleme ile 45 derece

Nicemleme ile 45 dereceyi yakınlaştırın

açı histogramı

büyüklük histogramı

Sinyal vektörü 0 ° döndürüldükten sonra, büyüklük ve açı histogramları beklendiği gibi çok daha eşittir:

Nicemleme ile 0 derece açı

0 ° 'de açı histogramı

0 ° 'deki büyüklük histogramı


Güncelleme: Belirli bir soruya hala bir cevaba ihtiyacımız olduğu için (Olli'nin aşağıdaki cevabı, üçgen ve düzgün gürültü yoğunluklarını güncellememe yol açan gürültünün özellikleri, ancak faz gürültüsünün özellikleri hakkında iyi bir açıklama sundu. tutarlı örnekleme koşulları hala zor), ben gerçek bir cevap veya daha fazla ilerleme karıştırabilir aşağıdaki düşünceler sunuyoruz (Bunların çoğu muhtemelen yanlış yönlendirilmiş ama henüz sahip değilim cevabı almak yararına düşünceler):

Tutarlı örnekleme koşullarında, örnekleme hızının giriş frekansının tamsayı katı olduğunu (ve fazın da kilitlendiğini) unutmayın. Bu, karmaşık bir sinyal ve örnekleme için karmaşık düzlemde bir kez döndüğümüzde veya gerçek bir sinyal ve örnekleme (tek ADC) için bir sinüsoid döngüsünün bir tamsayı sayısı olacağı anlamına gelir.

Ve tarif edildiği gibi, örnekleme saatinin kendisinin çok daha üstün olduğu ve bu nedenle bir katkı olarak değerlendirilmediğini varsayıyoruz. Bu nedenle numuneler her seferinde tam olarak aynı yere inecektir.

Gerçek sinyal göz önüne alındığında, faz gürültüsünün belirlenmesinde sadece sıfır geçişlerle ilgiliysek, tutarlı örneklemenin sonucu sadece sabit ama tutarlı bir gecikme değişimi olacaktır (ancak yükselen ve düşen kenarlar farklı gecikmelere sahip olabilir) tutarlılık tek bir tamsayı olduğunda). Açıkçası karmaşık örnekleme durumunda, her örnekte faz gürültüsü ile ilgileniyoruz ve bunun gerçek durum için de aynı olacağından şüpheleniyorum (şüphem, "gerçeğin" herhangi bir anında bir numunenin zaman gecikmesi olacaktır. faz gürültü bileşeni ama sonra da genlik farkı ne olduğunu çift sayıyorum eğer kafam karışıyor ...) Zamanım varsa, ben tek tek yinelenen desen verilen giriş sinyalinin tamsayı harmonik gösterecektir gibi ben bunu simüle edecek döngü, ve faz ile genliğin testi harmoniklerin temel ile rölatif arasındaki bağıl fazı olacaktır - simülasyon veya hesaplama yoluyla görülmesi ilginç olan şey, bu harmoniklerin (gerçek bir sinyal için hepsinin karmaşık eşlenik muadilleri olacaktır) toplamı temel veya faz ile dördüncül olarak ve bu nedenle tüm faz gürültüsü, tüm genlik gürültüsü veya her ikisinin bir bileşimi olduğu gösterilmiştir. (Çift sayıda örnek ile tek sayı arasındaki fark muhtemelen bunu etkileyebilir).

Kompleks durumunda, Olli'nin orantılı sayıda örnekle yapılan grafiği, gösterilen her nicemlenmiş örnekle ilişkili "gerçek" üzerindeki örnek konumunu göstermesi durumunda daha fazla fikir verebilir. Yine tek veya çift sayıda örnek varsa ilginç bir fark olasılığını görüyorum (grafiği eşitti ve sonuçlanan simetriyi gözlemliyorum, ancak genlik gürültüsüne karşı faza ne yapabileceğinden daha fazlasını göremiyorum). Benim için net görünen şey, hem gerçek hem de karmaşık durumlarda gürültü bileşenlerinin, sadece örnekleme tutarlı olduğunda temel frekansın tamsayı harmoniklerinde var olmasıdır. Dolayısıyla, faz gürültüsü hala şüphelendiğim gibi mevcut olsa da, tamsayı harmoniklerindeki konumu, sonraki filtreleme ile ortadan kaldırılmaya çok daha elverişlidir.

(Not: Bu, yüksek spektral saflıkta referans saat sinyallerinin üretilmesi için geçerlidir.)


2
Keşke asıl sorunun ne olduğu hakkında daha matematiksel olarak açık olmanızı dilerim.
robert bristow-johnson

Bunu nasıl yapacağımı düşüneyim; tarif etmeye çalıştığım şey nicemleme gürültüsünün genlik ve faz bileşenlerine (AM ve PM) ayrıştırılabileceğidir. Örnekleme saati ile ilişkisiz veya orantısız olan rastgele bir sinüzoidal tonu ölçtüğümüzde, örneklenen sonuç orijinal dalga formu tarafından belirlenen "gerçek" ten hem genlik hatasına hem de faz hatasına sahip olacaktır. Tutarlı örnekleme durumunda faz hatasının önemli ölçüde azaldığından veya ortadan kaldırıldığından şüpheleniyorum (fs=N-fsbeng) nerede fs örnekleme oranı ve fsbengsinyal hızıdır.
Dan Boschen

Kabul ediyorum rjj. Faz-genlik dağılımı ile ne demek istiyorsun? Bir matematiğe inanıyorum. sorunla ilgili modelin çözülmesine yardımcı olacaktır. Ayrıca, daha spesifik olabilir, nicelik gürültüsünü genlik ve faza nasıl ayrıştırabilirsiniz?
Maximilian Matthé

1
Bu, metinde belirtildiği gibi rasgele sinyaller veya matematiksel tanımların ima ettiği gibi sinüzoidal sinyallerle mi ilgili? Kişi sadece sinüzoidal sinyalleri göz önüne alırsa büyük ölçüde basitleştirilir, ancak bu gerçek dünya sinyallerinin davranışını yansıtmayabilir. Sinüzoidal sinyaller için uygun durumda, nicemleme hatası periyodiktir ve periyodik faz hatasına dönüşür. Bu tür bir korelasyon bir histogramda görünmez, ancak muhtemelen "faz bileşeninin doğası" nı tanımlamak açısından önemlidir (bu şekilde faz hatasını doğru mu kastediyorsunuz?).
şerbetçiotu

1
Ayrıca, son paragrafınızı senkronize tutmak istiyorsanız (ölçüm için olduğunu önermiştiyseniz) saat sinyali üretimi için olduğunu açıklığa kavuşturmak için soruyu güncelledim.
Dan Boschen

Yanıtlar:


5

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)=marul(t)+jgünah(t)
ve miktar ölçümü:
qubirntbenzed_sbengnbirl(t)=yuvarlak(N-marul(t))N-+jxyuvarlak(N-günah(t))N-

bir niceleme adımı için 1/N- hem I hem de Q bileşenlerinin ( N-=5 Şeklinizde).

Sinyal izi ve nicelendirilmesi
Ş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 grafiktirbirişaret(t)+(1-bir)qubirntbenzed_sbengnbirl(t) en bir=[15,25,35,45].

Nicemleme hatası nedeniyle fazdaki hata:

phbirse_errÖr(t)=atan(Ben(qubirntbenzed_sbengnbirl(t)),Yeniden(qubirntbenzed_sbengnbirl(t)))-atan(Ben(işaret(t)),Yeniden(işaret(t)))=atan(yuvarlak(N-günah(t)),yuvarlak(N-marul(t)))-atan(N-günah(t),N-marul(t))=atan(yuvarlak(N-günah(t)),yuvarlak(N-marul(t)))-şık(t-π,2π)+π

Sarılmış fazları çıkarmak risklidir, ancak bu durumda çalışır.

Faz hatası
Şekil 2. phbirse_errÖ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 phbirse_errÖr(t),sıfıra yakın değerler aşırı temsil edilir. Yaniphbirse_errÖ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]=[2marul(α+π/4),2günah(α+π/4),-2marul(α+π/4),-2günah(α+π/4)]

PDF düğümleri
Ş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:

Ara PDF
Ş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:

Sahte düzenlemelerde RMS mutlak hatasıdetay
Ş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:

Ölçekleme katsayısı sqrt olan kare olmayan dikdörtgen bir ızgara için sözde düzenlemelerde RMS mutlak hatası (3)
Ç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:

İkinci sırada hata
Ş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 3yatay. 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.1M100.

// 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))))

Çok hoş. Büyüklükteki her bir I ve Q ekseni, düzgün olarak iyi yaklaşmaktadır; Acaba iki üniform dağılımın bir dönüşümünü görüyor muyuz - sonucunuzun histogramını almayı denediniz mi? Ben de bu doğrulanmamış mantık ile karmaşık sinyal için genlik dağılımının da üçgen olabileceğini varsayıyorum. Bununla ilgili örnekleme saati orantılı olduğunda ne olabileceğine dair bir fikriniz var mı?
Dan Boschen

Ancak tekdüze olduğunu önermek için soruyu güncelleyeceğim!
Dan Boschen

güncellememe bakın- Üçgen dağılımlardan şüphemizi simüle ettim ve onayladım. Bana göre dağılım açıya göre eşit ve üçgen arasında değişecektir (açıklama için güncellememe bakın); bu yüzden açımız eşit olarak dağıtılmışsa, genel olarak yuvarlak bir dağılımla sonuçlanmalıyız.
Dan Boschen

1
@OlloNiemitalo Çok güzel. Birim çemberindeki konumları orantılı örnekleme olarak sınırlarsak ne olacağı (özellikle faz hatası bileşenleri için) hakkında daha fazla bilgiye sahip misiniz? tek bir karmaşık tonun dönme hızının sabit bir katı anlamına mı geliyor? Kesinlikle örnekleme hızı arttıkça bu, gösterdiklerinize yaklaşır. Ancak seçimleri orantılı olacak şekilde sınırlandırdığımızda faz bileşenlerini bu orana karşı matematiksel olarak nasıl tanımlayabiliriz?
Dan Boschen

1
Bunu çiğnediğiniz ve cevabın nerede olabileceği konusunda daha fazla yön verdiğiniz için teşekkürler. Oranın çift tamsayı bir katsayısı olduğuna dikkat edin. Modulo sayı teorisinden belirlenen bu örüntü, cevabın gerçekten olabileceği yerdir
Dan Boschen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.