Kuantisasi Suara untuk Pengambilan Sampel yang Koheren - Kebisingan Fase?

9

Pembaruan: Lihat pemikiran tambahan di bagian bawah posting ini.


Di bawah kondisi pengambilan sampel umum yang tidak dibatasi oleh apa yang dijelaskan di bawah ini (sinyal tidak berkorelasi dengan jam pengambilan sampel), kebisingan kuantisasi sering diperkirakan sebagai distribusi seragam pada satu tingkat kuantisasi. Ketika dua ADC digabungkan dengan jalur I dan Q untuk membuat sampling sinyal kompleks, noise kuantisasi memiliki komponen noise amplitudo dan fasa seperti yang disimulasikan di bawah ini. Seperti ditunjukkan, noise ini memiliki distribusi segitiga ketika komponen I dan Q berkontribusi sama untuk amplitudo dan fase seperti ketika sinyal berada pada sudut 45 °, dan seragam ketika sinyal berada pada sumbu. Ini diharapkan karena noise kuantisasi untuk setiap I dan Q tidak berkorelasi sehingga distribusi akan berbelit-belit ketika keduanya berkontribusi pada hasil output.

Pertanyaan yang ditanyakan adalah apakah distribusi kebisingan fase ini berubah secara signifikan untuk kasus pengambilan sampel yang koheren (menganggap jam pengambilan sampel sendiri memiliki kebisingan fase yang jauh lebih unggul sehingga bukan faktor)? Secara khusus saya mencoba untuk memahami jika pengambilan sampel yang koheren akan secara signifikan mengurangi kebisingan fase terkait kuantisasi. Ini akan langsung berlaku untuk generasi sinyal clock, di mana koherensi akan mudah dipertahankan.

Pertimbangkan baik sinyal nyata (satu ADC) atau sinyal kompleks (dua ADC; satu untuk I dan satu untuk Q bersama-sama menggambarkan sampel kompleks tunggal). Dalam kasus sinyal nyata, input adalah gelombang sinus skala penuh dan istilah fase berasal dari sinyal analitik; jitter yang terkait dengan perubahan pada penyilangan nol dari nada sinusoidal akan menjadi contoh kebisingan fase yang dihasilkan untuk sinyal nyata. Untuk kasus sinyal kompleks, input skala penuh SEBUAHejωt , di mana komponen real dan imajiner masing-masing akan menjadi sinus-gelombang pada skala penuh.

Ini terkait dengan pertanyaan ini di mana pengambilan sampel koheren dijelaskan dengan baik, tetapi fase noise secara khusus tidak disebutkan:

Sampling Koheren Dan Distribusi Kebisingan Kuantisasi

Untuk menggambarkan komponen gangguan AM dan PM yang diinduksi lebih jelas, saya telah menambahkan grafik berikut ini untuk kasus kuantisasi kompleks yang menunjukkan vektor kompleks dalam waktu kontinu pada contoh pengambilan sampel yang diberikan, dan sampel terkuantisasi yang terkait sebagai titik merah, dengan asumsi linier distribusi seragam tingkat kuantisasi bagian sinyal nyata dan imajiner.

masukkan deskripsi gambar di sini

Memperbesar lokasi di mana kuantisasi terjadi pada grafik di atas untuk mengilustrasikan kesalahan amplitudo yang diinduksi dan kesalahan fase:

masukkan deskripsi gambar di sini

Demikian diberi sinyal sewenang-wenang

s(t)=Sebuah(t)ejωt=Sebuah(t)cos(ωt)+jSebuah(t)dosa(ωt)=saya(t)+jq(t)

Sinyal terkuantisasi adalah titik jarak terdekat yang diberikan oleh

sk=sayak+jqk

Dimana dan q k mewakili dikuantisasi I dan tingkat Q masing-masing dipetakan sesuai dengan:sayakqk

Q{x}=ΔxΔ+12

Di mana mewakili fungsi lantai , dan Δ mewakili tingkat kuantisasi diskrit.()Δ

sayak=Q{saya(tk)}qk=Q{q(tk)}

Kesalahan amplitudo adalah dimana t k adalah waktu yang s (|s(tk)|-|sk|tk adalah sampel untuk menghasilkan s k .s(t)sk

Kesalahan fase adalah mana * mewakili konjugat kompleks.arg{s(tk)}-arg{sk}=arg{s(tk)(sk)}

Pertanyaan untuk posting ini adalah apa sifat komponen fase ketika jam sampling sepadan dengan (bilangan bulat dari) sinyal input?

Untuk membantu, berikut adalah beberapa distribusi simulasi kesalahan amplitudo dan fasa untuk kasus kuantisasi kompleks dengan 6 bit kuantisasi pada I dan Q. Untuk simulasi ini diasumsikan bahwa sinyal "kebenaran" aktual sama-sama cenderung berada di mana saja dalam kuantisasi sektor didefinisikan sebagai kisi yang ditunjukkan pada diagram di atas. Perhatikan ketika sinyal berada di sepanjang salah satu kuadran (baik semua I atau semua Q), distribusi seragam seperti yang diharapkan dalam kasus ADC tunggal dengan sinyal nyata. Tetapi ketika sinyal berada di sepanjang sudut 45 °, distribusi berbentuk segitiga. Ini masuk akal karena kasus-kasus ini sinyal memiliki kontribusi I dan Q yang sama yang masing-masing distribusi seragam tidak berkorelasi; jadi dua distribusi berbelit-belit menjadi segitiga.

45 derajat dengan kuantisasi

Memperbesar 45 derajat dengan kuantisasi

histogram sudut

besarnya histogram

Setelah memutar vektor sinyal ke 0 °, histogram angle dan angle jauh lebih seragam seperti yang diharapkan:

Sudut 0 derajat dengan kuantisasi

histogram sudut pada 0 °

histogram besarnya pada 0 °


Pembaruan: Karena kita masih membutuhkan jawaban terhadap pertanyaan spesifik (jawaban Olli di bawah ini menawarkan klarifikasi yang baik tentang karakteristik kebisingan yang mengarah pada pembaruan kepadatan kebisingan segitiga dan seragam, tetapi karakteristik kebisingan fase di bawah kondisi pengambilan sampel yang koheren masih sulit dipahami), saya menawarkan pemikiran berikut yang dapat menggerakkan jawaban aktual atau kemajuan lebih lanjut (Perhatikan ini adalah banyak pemikiran yang mungkin salah arah tetapi untuk mendapatkan jawaban yang belum saya miliki):

Perhatikan bahwa dalam kondisi pengambilan sampel yang koheren, laju pengambilan sampel adalah kelipatan bilangan bulat dari frekuensi input (dan fase juga terkunci). Ini berarti akan selalu ada jumlah bilangan bulat sampel saat kami memutar sekali melalui bidang kompleks untuk sinyal dan pengambilan sampel yang kompleks, atau jumlah bilangan bulat sampel dari satu siklus sinusoid untuk sinyal nyata dan pengambilan sampel (ADC tunggal).

Dan seperti yang dijelaskan kita mengasumsikan kasus ketika jam sampling itu sendiri jauh lebih unggul sehingga tidak dianggap sebagai kontribusi. Oleh karena itu sampel akan mendarat di lokasi yang sama persis, setiap saat.

Mempertimbangkan kasus dari sinyal nyata, jika kita hanya memusatkan perhatian pada nol penyeberangan dalam menentukan noise fase, hasil dari sampling koheren hanya akan menjadi pergeseran tertunda yang konsisten tetapi konsisten (walaupun sisi naik dan turun dapat memiliki penundaan yang berbeda ketika koherensi adalah bilangan bulat ganjil). Jelas dalam kasus pengambilan sampel yang kompleks kami prihatin dengan kebisingan fase pada setiap sampel, dan saya menduga ini akan sama untuk kasus nyata juga (kecurigaan saya adalah penundaan waktu sampel kapan saja dari "kebenaran" adalah komponen noise fase tetapi kemudian saya menjadi bingung jika saya menghitung ganda apa juga perbedaan amplitudo ...) Jika saya punya waktu saya akan mensimulasikan ini karena semua distorsi akan muncul pada integer harmonisa dari sinyal input mengingat pola berulang lebih dari satu siklus, dan uji fase versus amplitudo akan menjadi fase relatif harmonik versus fundamental - yang akan menarik untuk dilihat melalui simulasi atau perhitungan adalah jika harmonik ini (yang untuk sinyal nyata semua akan memiliki rekan konjugat kompleks) dijumlahkan sebagai dalam quadrature dengan fundamental atau dalam fase, dan dengan demikian terbukti menjadi semua fase noise, semua noise amplitudo atau gabungan keduanya. (Perbedaan antara jumlah genap sampel dan ganjil dapat mempengaruhi ini).

Untuk kasus kompleks, grafik Olli yang dilakukan dengan jumlah sampel yang sepadan, dapat menambah wawasan lebih lanjut jika ia menunjukkan lokasi sampel pada "kebenaran" yang terkait dengan setiap sampel terkuantisasi yang ditunjukkan. Sekali lagi saya melihat kemungkinan perbedaan yang menarik jika ada jumlah sampel ganjil atau genap (grafiknya genap dan saya mengamati simetri yang dihasilkan tetapi tidak bisa melihat lebih jauh dari apa yang mungkin dilakukan untuk fase versus noise amplitudo). Apa yang tampak jelas bagi saya adalah komponen kebisingan dalam kasus nyata dan kompleks hanya akan ada pada harmonik integer dari frekuensi dasar ketika pengambilan sampel koheren. Jadi meskipun noise fase mungkin masih ada seperti yang saya duga, lokasinya pada integer harmonics jauh lebih kondusif untuk dihilangkan dengan penyaringan berikutnya.

(Catatan: ini berlaku untuk generasi sinyal jam referensi dengan kemurnian spektral tinggi.)

Dan Boschen
sumber
2
Saya harap Anda bisa lebih eksplisit secara matematis tentang apa pertanyaan sebenarnya.
robert bristow-johnson
fs=Nfssayagfsfssayag
Saya setuju dengan rbj. Apa yang Anda maksud dengan distribusi fase-vs-amplitudo? Saya percaya matematika. model tentang masalah akan membantu menyelesaikannya. Juga, dapat lebih spesifik, bagaimana Anda akan menguraikan noise kuantisasi menjadi amplitudo dan fase?
Maximilian Matthé
1
Apakah ini mengenai sinyal sewenang-wenang yang disinggung dalam teks atau sinyal khusus sinusoidal seperti yang tersirat oleh deskripsi matematika? Kasus ini sangat disederhanakan jika seseorang hanya mempertimbangkan sinyal sinusoidal, tetapi ini mungkin tidak mencerminkan perilaku sinyal dunia nyata. Dalam kasus sepadan untuk sinyal sinusoidal, kesalahan kuantisasi bersifat periodik dan diterjemahkan menjadi kesalahan fase periodik. Jenis korelasi itu tidak akan muncul dalam histogram, tetapi mungkin penting dalam hal menggambarkan "sifat komponen fase" (maksud Anda kesalahan fase ini kan?).
hop
1
Saya juga memperbarui pertanyaan untuk mengklarifikasi bahwa ini untuk generasi sinyal clock, jika Anda ingin menjaga paragraf terakhir Anda sinkron (Anda menyarankannya untuk pengukuran).
Dan Boschen

Jawaban:

5

Saya ragu (Sunting: ini kemudian dihapus dari pertanyaan):

Distribusi komponen-komponen kebisingan AM dan PM ini dapat secara wajar dianggap seragam selama sinyal input tidak berkorelasi dengan jam sampling

sinyal(t)=cos(t)+jdosa(t)
qkamuSebuahntsayazed_ssayagnSebuahl(t)=bulat(Ncos(t))N+j×bulat(Ndosa(t))N

1/NN=5

Jejak sinyal dan kuantisasi
N=5Sebuahsinyal(t)+(1-Sebuah)qkamuSebuahntsayazed_ssayagnSebuahl(t)Sebuah=[15,25,35,45].

Kesalahan dalam fase karena kesalahan kuantisasi adalah:

halhSebuahse_errHair(t)=atan(Aku(qkamuSebuahntsayazed_ssayagnSebuahl(t)),Kembali(qkamuSebuahntsayazed_ssayagnSebuahl(t)))-atan(Aku(sinyal(t)),Kembali(sinyal(t)))=atan(bulat(Ndosa(t)),bulat(Ncos(t)))-atan(Ndosa(t),Ncos(t))=atan(bulat(Ndosa(t)),bulat(Ncos(t)))-mod(t-π,2π)+π

Mengurangkan fase yang dibungkus berisiko tetapi berfungsi dalam kasus ini.

Kesalahan fase
halhSebuahse_errHair(t)N=5

thalhSebuahse_errHair(t),halhSebuahse_errHair(t) tidak dapat memiliki distribusi seragam.

NN,Ndistribusi kesalahan I dan Q adalah seragam, dan kesalahan fase dan besarnya adalah angka pseudorandom yang berasal dari distribusi yang tergantung pada fase sinyal. Ketergantungan pada fase ada karena kisi kuantisasi persegi panjang memiliki orientasi.

N,arcsinααα+π/2

[(1/2,1/2),(-1/2,1/2),(-1/2,-1/2),(1/2,-1/2)]

Rotasi koordinat ini atau proyeksi ekuivalennya dengan kesalahan fase proporsional dan sumbu kesalahan magnitudo proporsional memberikan fungsi kepadatan probabilitas linear-piece-bijaksana sama datar-atas dengan node:

[cos(α)2-dosa(α)2,cos(α)2+dosa(α)2,-cos(α)2+dosa(α)2,-cos(α)2-dosa(α)2]=[2cos(α+π/4),2dosa(α+π/4),-2cos(α+π/4),-2dosa(α+π/4)]

Node dari PDF
αα{-π,-π/2,0,π/2,π}α{-3π/4,-π/4,π/4,3π/4}N2/22/2arcsin

Pada tahap menengah, PDF terlihat seperti ini:

PDF perantara
α=π/8.

|cos(α)||dosa(α)|cos2(α)/12+dosa2(α)/12=1/12,α

Mungkin ada beberapa kombinasi "pseudolucky" fase awal dan rasio bilangan rasional dari frekuensi sinusoid kompleks dan frekuensi sampling yang hanya memberikan kesalahan kecil untuk semua sampel dalam urutan berulang. Karena simetri dari kesalahan yang terlihat pada Gambar. 1, dalam arti kesalahan absolut maksimum frekuensi tersebut berada pada keuntungan di mana jumlah titik yang dikunjungi pada lingkaran adalah kelipatan 2, karena keberuntungan (kesalahan rendah) diperlukan pada hanya setengah dari poin. Kesalahan pada sisa poin adalah duplikat dari apa mereka pada yang pertama, dengan tanda terbalik. Setidaknya kelipatan 6, 4, dan 12 memiliki keunggulan yang lebih besar. Saya tidak yakin apa aturan sebenarnya di sini, karena sepertinya tidak semua tentang kelipatan sesuatu. Itu' Ada sesuatu tentang simetri grid yang dikombinasikan dengan modulo aritmatika. Namun demikian, kesalahan pseudorandom bersifat deterministik, sehingga pencarian lengkap mengungkapkan pengaturan terbaik. Menemukan pengaturan terbaik dalam pengertian kesalahan absolut root-mean-square (RMS) adalah yang termudah:

Kesalahan absolut RMS dalam pengaturan semuDetail
Gambar 5. Top) Kesalahan kuantisasi absolut RMS serendah mungkin dalam osilator IQ kompleks untuk berbagai kedalaman bit osilator, menggunakan N1/6/N,N=2k-1,k+1

12

{(0,±112),(±112,0),(±97,±56),(±56,±97)}112.00297611139371

Sinusoid kompleks diskrit yang melewati titik-titik ini pada bidang kompleks dalam meningkatkan urutan sudut hanya memiliki distorsi harmonik ke-5, dan pada -91.5 dB dibandingkan dengan yang mendasar, seperti yang dikonfirmasi oleh kode sumber oktaf di akhir jawaban.

Untuk mendapatkan kesalahan kuantisasi absolut RMS rendah, frekuensi tidak harus melalui titik-titik secara berurutan seperti pada fase perkiraan [0,1,2,3,4,5,6,7,8,9,10,11]2π/12 untuk suatu frekuensi 1/12kali frekuensi sampling. Misalnya frekuensinya5/12 frekuensi pengambilan sampel akan melewati titik yang sama tetapi dalam urutan yang berbeda: [0,5,10,3,8,1,6,11,4,9,2,7]2π/12. Saya pikir ini berfungsi sebagaimana mestinya karena 5 dan 12 adalah koprime .

Tentang pengaturan sempurna yang mungkin, kesalahan bisa benar-benar nol di semua titik jika frekuensi sinusoid adalah seperempat dari frekuensi pengambilan sampel (penambahan fase dari π/2per sampel). Di kotak persegi, tidak ada pengaturan sempurna lainnya . Pada kisi heksagonal atau pada kisi persegi panjang non-kuadrat dengan salah satu sumbu I atau Q yang direntangkan oleh faktor3 (dengan demikian setara dengan setiap baris kedua pada kisi sarang lebah), fase kenaikan π/3per sampel akan bekerja dengan sempurna. Penskalaan seperti itu dapat dilakukan dalam domain analog. Ini meningkatkan jumlah sumbu simetri kisi, yang menghasilkan sebagian besar perubahan yang menguntungkan pada pengaturan pseudolucky:

Kesalahan absolut RMS dalam pengaturan pseudolucky untuk kisi persegi non-persegi dengan koefisien penskalaan sqrt (3)
Gambar 6. Kesalahan kuantisasi absolut RMS terendah yang mungkin dalam osilator IQ kompleks untuk berbagai kedalaman bit osilator, menggunakan kisi kuantisasi persegi panjang dengan salah satu sumbu diskalakan oleh3.

Khususnya, untuk osilator 8-bit dengan 30 titik pada lingkaran, kesalahan absolut RMS terkecil yang mungkin adalah -51,3 dB pada kotak persegi dan -62,5 dB pada kotak persegi panjang non-persegi, di mana terendah-RMS-absolut-kesalahan urutan pseudolucky memiliki kesalahan:

Kesalahan di urutan kedua
Gambar 7. Nilai-nilai kesalahan pada bidang IQ dengan urutan pseudolucky 8-bit panjang 30 mengambil keuntungan dari sumbu simetri yang ditemukan di grid kuantisasi yang diregangkan oleh faktor 3secara horizontal. Poin datang dari hanya tiga bilangan kompleks pseudolucky, membalik-balik sumbu simetri.

Saya tidak punya pengalaman praktis dengan sinyal jam IQ, jadi saya tidak yakin apa yang penting. Dengan generasi sinyal clock, menggunakan digital-to-analog converter (DAC), saya menduga bahwa kecuali pengaturan pseudolucky yang baik digunakan, lebih baik untuk memiliki white noise floor yang lebih rendah daripada memiliki spektrum noise harmonik dengan lebih tinggi paku yang berasal dari urutan berulang kesalahan kuantisasi (lihat Koheren Sampling Dan Distribusi Kebisingan Kuantisasi) ). Lonjakan spektral ini, seperti halnya white noise, dapat bocor melalui kapasitansi parasit dan memiliki efek yang tidak diinginkan di bagian lain sistem atau memengaruhi kompatibilitas elektromagnetik (EMC) perangkat. Sebagai analogi, teknologi spread spectrum meningkatkan EMC dengan mengubah lonjakan spektral ke tingkat kebisingan puncak yang lebih rendah.

Kode sumber untuk pencarian pengaturan pseudolucky lengkap di C ++ berikut. Anda dapat menjalankannya dalam semalam untuk menemukan pengaturan terbaik untuk setidaknya hingga osilator 16-bit1M.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));
    }
  }
}

Output sampel yang menggambarkan urutan contoh pertama ditemukan dengan IScale = 1:

bits,M,N,fundamentalI,fundamentalQ,I,Q,rms
8,12,112.0029761113937,112.0029761113937,0.0000000000000,112,0,0.0000265717171

Output sampel yang menggambarkan urutan contoh kedua ditemukan dengan IScale = sqrt(3):

8,30,200.2597744568315,199.1627304588310,20.9328464782995,115,21,0.0007529202390

Kode oktaf untuk menguji urutan contoh pertama:

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

Kode oktaf untuk menguji urutan contoh kedua:

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))))
Olli Niemitalo
sumber
Sangat bagus. Setiap sumbu I dan Q yang besarnya diperkirakan sama sebagai seragam; Saya ingin tahu apakah kita melihat konvolusi dari dua distribusi yang seragam - sudahkah Anda mencoba mengambil histogram dari hasil Anda? Saya akan berasumsi juga dengan logika yang tidak diverifikasi ini yang saya gunakan bahwa distribusi amplitudo untuk sinyal kompleks mungkin juga berbentuk segitiga? Apakah Anda memiliki wawasan tentang ini apa yang mungkin terjadi ketika jam sampling sepadan?
Dan Boschen
Namun saya akan memperbarui pertanyaan untuk tidak menyarankan itu seragam!
Dan Boschen
lihat pembaruan saya - saya mensimulasikan dan mengkonfirmasi kecurigaan saya dengan distribusi segitiga. Menurut saya distribusi akan bervariasi antara seragam dan segitiga tergantung pada sudut (lihat pembaruan saya untuk penjelasan); jadi jika sudut kita terdistribusi secara merata kita harus berakhir dengan distribusi bulat secara keseluruhan.
Dan Boschen
1
@OlloNiemitalo Sangat keren. Apakah Anda memiliki wawasan lebih lanjut tentang apa yang akan terjadi (khususnya pada komponen kesalahan fase) jika kami membatasi lokasi pada lingkaran unit menjadi sampel yang sepadan; yang berarti kelipatan tetap dari tingkat rotasi nada kompleks tunggal? Tentu saja ketika laju sampling meningkat, ini akan mendekati apa yang telah Anda tunjukkan. Tetapi bagaimana kita bisa secara matematis menggambarkan komponen fase versus laju itu ketika kita membatasi pilihan yang sepadan?
Dan Boschen
1
Terima kasih telah mengunyah ini, dan memberikan arahan lebih lanjut di mana jawabannya. Perhatikan jika rasionya adalah kelipatan bilangan bulat genap, pola akan berulang dua kali per siklus, dan kemudian lebih cepat mengalikan untuk kelipatan yang dapat dibagi oleh daya 2 yang lebih tinggi. Pola itu sebagaimana ditentukan dari teori bilangan modulo adalah tempat jawabannya memang benar
Dan Boschen