Mengapa ada bukit seperti sisir dalam periodogram?

8

Saya bermain dengan periodogramMATLAB. Saya membuat skrip sederhana untuk mengamati bagaimana perilakunya:

rng(1);  %# initialize the random number generator

Fs = 1000;  %# Sampling frequency
duration = 0.1; %# seconds

A = 1; %# Sinusoid amplitude
f = 150; %# Sinusoid frequency
eps = 0.01;

t = 0:1/Fs:duration;
x = A * sin(2*pi*f*t) + eps * randn(size(t));

periodogram(x,[],1024,Fs);

masukkan deskripsi gambar di sini

Saya tidak punya masalah dengan kode dan dapat menulis periodogramfungsi saya sendiri menggunakan algoritma yang diberikan dalam dokumentasi tapi saya bertanya-tanya alasan teoretis di balik bukit sisir seperti yang tidak 150 Hz. Apa yang saya dapatkan daripada mendapatkan lonjakan tunggal lebih dari 150 Hz? Adakah yang istimewa dari jarak puncak bukit-bukit ini?

petrichor
sumber

Jawaban:

5

Saya tidak sepenuhnya puas dengan jawaban Itamar Katz, jadi inilah penjelasan saya.

DFT dari sinyal kompleks panjang , adalahNx[n]=eı2πfn/N

X[k]=F{x[n]}=eı2π(fk)1eı2π(fk)/N1

Jadi, kekuatan atau besarnya respon kuadrat diberikan oleh

|X[k]|2=(sin(π(fk))sin(π(fk)/N))2

Seperti yang Anda lihat, ekspresi di atas adalah nol setiap kali adalah bilangan bulat. Anda dapat meyakinkan diri sendiri bahwa penyebutnya nol pada satu titik saja, dan pada titik ini, mengambil batasan memberi Anda nilai untuk rasio. Oleh karena itu, tidak ada titik di mana ungkapan itu meledak.fkN2

Sekarang ketika Anda mengambil log dari ekspresi di atas, adalah (atau dalam hal ini, dalam basis apa pun) dan karenanya Anda mendapatkan nol di mana pun Anda memiliki nol. Inilah yang menghasilkan "sisir seperti bukit" di plot Anda.log10(0)

Berikut ilustrasi singkat dalam Mathematica:

Clear@X
X[f_, n_] := (Sin[π (f - #)]/Sin[π (f - #)/n])^2 &
Plot[X[3, 10][k], {k, -5, 5}, PlotRange -> All]

masukkan deskripsi gambar di sini

Frekuensi berada pada sumbu x dan daya (linier) ada pada sumbu y. Anda dapat melihat bahwa nol terjadi pada nilai integer dan puncaknya adalah 3, yang merupakan frekuensi yang saya pilih. Sekarang mengambil dari yang di atas, Anda mendapatkan nol yang menimbulkan struktur seperti sisirlog10

masukkan deskripsi gambar di sini

Inilah contoh lain dengan lebih besar , yang menunjukkan lebih banyak nol.N

masukkan deskripsi gambar di sini

Lorem Ipsum
sumber
12

Satu lonjakan (seperti Anda menyebutnya) muncul secara teoritis hanya untuk sinusoid panjang tak terbatas. Karena panjang sinyal Anda 100 sampel, itu tidak terbatas. Anda sebenarnya mengalikan sinyal tak terbatas Anda dengan jendela yang memiliki nilai 1 lebih dari 100 sampel, dan 0 di tempat lain. Karena perkalian dalam domain waktu sama dengan konvolusi dalam domain frekuensi, spektrum Anda adalah konvolusi lonjakan tunggal dan respons frekuensi jendela (tetapi disebut jendela persegi panjang). Ini adalah fungsi yang Anda dapatkan.

Saya sarankan Anda membaca tentang windowing: http://en.wikipedia.org/wiki/Window_function

Itamar Katz
sumber
+1 Oh, saya tahu tentang windowing tetapi tidak bisa membuat tautan. Terima kasih!
petrichor
1
Satu lonjakan muncul terlepas dari jendela yang digunakan, jika frekuensinya tepat untuk panjang jendela. gist.github.com/236567
endolith
1
Itu tidak benar. Untuk jendela persegi panjang ini benar, karena Anda mencicipi fungsi jendela di domain frekuensi tepat di nolnya, jadi Anda 'buta' ke lobus samping. Namun itu tidak benar untuk fungsi jendela umum.
Itamar Katz
lihat contoh git: //gist.github.com/1403819.git
Itamar Katz
@ ItamarKatz: Ya Anda benar. Maksud saya "tanpa jendela".
endolith