Tại sao tôi bị rò rỉ tần số trong DFT sau khi đệm bằng 0 nếu độ phân giải tần số tốt?


12

Hãy xem xét ví dụ này:

Fs=1000; 
Ns=500;
t=0:1/Fs:(Ns-1)*1/Fs;
f1=10;
f2=400;
x=5+5*sin(2*pi*f1*t)+2*sin(2*pi*f2*t);
X=fft(x);

Trong trường hợp này, độ phân giải tần số là 2 và tất cả các thành phần tần số được ghi lại chính xác. Tuy nhiên, nếu tôi làm điều này:

  X=fft(x,1000);

độ phân giải tần số là 1, nhưng có rò rỉ quang phổ. Hiệu ứng tương tự được nhìn thấy ở đây . Dường như với tôi, biến đổi Fourier của cả hai cửa sổ (một cửa sổ có chiều dài 500 và một cửa sổ có chiều dài 1000) có các số không ở tần số được trình bày trong tín hiệu, vì vậy tôi không hiểu tại sao rò rỉ sẽ xảy ra?


không đệm không làm giảm rò rỉ quang phổ rõ ràng, nhưng sẽ chỉ làm cho các vết rò rỉ quang phổ xuất hiện trơn tru hơn.
robert bristow-johnson

Câu trả lời:


18

Hiện tượng này không liên quan gì đến rò rỉ quang phổ. Những gì bạn đang quan sát là ảnh hưởng của đệm không. Đưa ra một số mẫu N , có một khả năng tối đa độ phân giải tần số Δf có thể đạt được:

Δf=fsN

Trong trường hợp của bạn Δf là chính xác 2Hz . Nếu bạn không đệm tín hiệu của bạn, không có thêm thông tin để truy xuất - bạn sẽ chỉ giảmkhoảng cách tần số.

Trong ví dụ trên, khi bạn tăng N lên 1000 , bạn sẽ có khoảng cách tần số là 1Hz . Tất cả các mẫu quan sát thêm chỉ là một phép nội suy, được thực hiện bởi hàm window (sinc trong trường hợp của bạn). Bạn sẽ bắt đầu quan sát thùy bên của phổ cửa sổ. Vì bạn đã nhân tín hiệu của mình với một cửa sổ hình chữ nhật, điều này sẽ dẫn đến sự kết hợp phổ của tín hiệu của bạn (hai Dirac's + DC) vớichức năngsinc .


sincsinc

nhập mô tả hình ảnh ở đây

sinc0sinc


N=1000N=10000

nhập mô tả hình ảnh ở đây

Và một phần phóng to:

nhập mô tả hình ảnh ở đây

Những điều cần chú ý:

  • N=500

  • Chúng ta cũng có thể quan sát tiếng ồn FFT ở phía dưới cùng.

  • N=10000sinc


Và rõ ràng là mã để tái tạo kết quả:

Fs=1000; 
Ns=500;
Ns2=1000;
Ns3=10000;
t=0:1/Fs:(Ns-1)*1/Fs;
f1=10;
f2=400;
x=5+5*sin(2*pi*f1*t)+2*sin(2*pi*f2*t);

X1 = abs(fft(x))/length(x);
X2 = abs(fft(x, Ns2))/Ns;
X3 = abs(fft(x, Ns3))/Ns;

F1 = 0:Fs/Ns:Fs-Fs/Ns;
F2 = 0:Fs/Ns2:Fs-Fs/Ns2;
F3 = 0:Fs/Ns3:Fs-Fs/Ns3;

plot(F1, 20*log10(X1))
hold on
plot(F2, 20*log10(X2))
plot(F3, 20*log10(X3))
xlim([0, Fs/2])
grid on
legend({'N=500', 'N=1000', 'N=10000'})

1
Câu trả lời rất đầy đủ +1. "[...] bạn sẽ chỉ tăng khoảng cách tần số." Tôi nên giảm nó .
Matt L.

2

Rò rỉ quang phổ thường là một tên gọi khác của hiệu ứng tích chập hoặc tạo hình của cửa sổ hình chữ nhật trong miền khác (t hoặc thời gian trong trường hợp của bạn). Và phần đệm bằng 0 được thực hiện bằng cách thêm một cửa sổ hình chữ nhật (là dữ liệu gốc khác không của bạn) vào một FFT dài hơn.

Giả thuyết của bạn rằng FT hoàn toàn nên bằng 0 nhưng nói chung một tần số là sai. Bất kỳ tín hiệu có độ dài hữu hạn (và khác không) sẽ có một phạm vi phổ vô hạn. Phạm vi phổ vô hạn đó (hình dạng chân thực hoặc biến đổi của Windows khác) sẽ vô hình trong kết quả DFT / FFT chỉ dành cho các hình sin thuần túy hơn trải rộng toàn bộ chiều rộng FFT với độ chính xác số nguyên theo chiều rộng đó. Không đệm không cho phép điều đó.


1

Rò rỉ phát sinh đáng chú ý với các cửa sổ có chiều dài hữu hạn, mà bạn luôn có trong thực tế. Tuy nhiên, nếu bạn có chính xác số lượng chu kỳ của các thành phần hình sin, thì định kỳ vốn có của FFT hoạt động như thể các sin là "vô hạn" và tần số của nó rơi chính xác vào các thùng rời rạc. Và do đó, rò rỉ bằng cách nào đó đã bị hủy bỏ, vì may mắn thuần túy: nếu bạn biết trước thời hạn tín hiệu của mình, bạn sẽ không cần phải phân tích nó bằng các công cụ Fourier.

Với phần đệm không, bạn không còn có hình sin thuần túy nữa. Không có nhiều cửa sổ thời gian không nguyên. Bạn đang ghép các khối của sin có những thay đổi đột ngột ở ranh giới cửa sổ. Vì vậy, toàn bộ tín hiệu định kỳ không phải là "sin vô hạn" nữa. Do đó, bạn có thể nhận được những gì bạn đồng hóa với rò rỉ, nhưng đó là hiệu ứng đệm không, như được giải thích hoàn hảo bởi @jojek.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.