bị cản trở bởi phổ pha fft!


9

Một thí nghiệm MATLAB rất đơn giản:

f = 200;  
fs = 1000;  
t = 0: 1/fs : 1;
x = cos(2*pi*f*t);  
plot(angle(fftshift(fft(x))));  

Và đây là đầu ra: nhập mô tả hình ảnh ở đây

Bây giờ, đã thực hiện một thay đổi nhỏ cho đoạn mã trên; giảm thời lượng chỉ bằng 1 mẫu, như sau:

f = 200;  
fs = 1000;  
t = 0: 1/fs : 1 - 1/fs;
x = cos(2*pi*f*t);  
plot(angle(fftshift(fft(x)))); 

Và phổ pha hoàn toàn điên rồ:

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

Câu hỏi:

  1. Trong âm mưu đầu tiên, tôi đã hy vọng nhìn thấy pha 0 ở bin 700 tương ứng với tần số dương 200 trong ví dụ này. Điều đó dường như không phải là trường hợp. Thứ hai, tôi không hiểu các phần tuyến tính của đồ thị trong biểu đồ 1. Tôi đánh giá cao các thành phần pha có khả năng tồn tại do cái gọi là nhiễu số, nhưng sau đó làm thế nào tiếng ồn đó có thể là "tuyến tính" theo pha?

  2. Trong âm mưu thứ hai, tại sao loại bỏ chỉ một mẫu sẽ có tác động mạnh mẽ như vậy đối với âm mưu pha?

  3. Tôi đang làm một cái gì đó sai về cơ bản ở đây?

Câu trả lời:


18

Bạn không làm gì sai, nhưng bạn cũng không suy nghĩ cẩn thận về những gì bạn sẽ thấy, đó là lý do tại sao bạn ngạc nhiên với kết quả. Đối với câu hỏi 1, phỏng đoán của bạn là gần, nhưng bạn thực sự có những điều ngược lại; đó là tiếng ồn số gây khó chịu cho cái thứ hai của bạn, không phải cái đầu tiên của bạn.

Hình ảnh có thể giúp đỡ. Đây là âm mưu của cường độ và giai đoạn cho thử nghiệm đầu tiên:

x = Cos[2.0 \[Pi] 200 Range[0, 1, 1/1000]];
fx = Fourier[x];
ListLinePlot[Abs[fx], PlotRange -> All]
ListLinePlot[Arg[fx], PlotRange -> All]

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

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

Và cái thứ hai:

x = Cos[2.0 \[Pi] 200 Range[0, 1 - 1/1000, 1/1000]];
fx = Fourier[x];
ListLinePlot[Abs[fx], PlotRange -> All]
ListLinePlot[Arg[fx], PlotRange -> All]

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

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

Vậy chuyện gì đang xảy ra ở đây? Điều thứ hai là dễ nhất để giải thích. Đầu tiên, FFT của cái thứ hai có biên độ bằng không ở mọi nơi ngoại trừ tại hai đỉnh có thể nhìn thấy trong phổ cường độ; điều này diễn ra do định nghĩa của FFT sử dụng 1.000 điểm dữ liệu trả về tần số có dạng cho và do đó tín hiệu của bạn rơi chính xác vào thùng tần số. Kết quả là, ở 998 điểm khác, tín hiệu của bạn hoàn toàn do nhiễu máy do lỗi dấu phẩy động và do đó phổ pha của bạn là vô nghĩa, bởi vì nó thực sự là pha của các số giả ngẫu nhiên.k/10000k999

Tuy nhiên, đối với lần đầu tiên, định nghĩa của FFT bao gồm các tần số có dạng cho , trong khi tần số tín hiệu của bạn là , không phải là dạng . Kết quả là, tín hiệu của bạn được mở rộng do rò rỉ quang phổ , và sẽ không khác nhau ở hầu hết mọi nơi. Tôi sẽ không bình luận về hình thức vật lý của cốt truyện pha, nhưng tôi sẽ nói rằng nó thừa nhận một hình thức phân tích khép kín.k/10010k1000200/1000k/1001

Nói chung, tôi nghĩ rằng đồ thị của góc pha một mình là một ý tưởng thực sự tồi để truyền đạt thông tin, chính xác là vì lý do này; Đầu tiên, bạn không thể biết nếu bạn đang xem pha của rác có biên độ thấp hoặc tín hiệu thực tế, và thứ hai, nó không phải là bất biến dịch, và thật dễ dàng để có được các biểu đồ gây hoang mang cho các đầu vào đơn giản. Tốt hơn nhiều, nếu bạn vẫn đang tìm kiếm thứ gì đó truyền tải thông tin pha, là một biểu đồ mô tả đồng thời thông tin về pha và biên độ theo cách trực quan, chẳng hạn như một âm mưu trong đó pha được mã hóa thành màu sắc và cường độ được mã hóa thành độ sáng.

ĐỊA CHỈ: Dưới đây là một vài hình ảnh từ Mathematica minh họa cho nguyên tắc tôi đã nêu trong đoạn trước:

hue = Compile[{{z, _Complex}}, {(1.0 Arg[-z] + \[Pi])/(2 \[Pi]), 
Exp[1 - Max[Abs[z], 1]], Min[Abs[z], 1]}, 
CompilationTarget -> "C", RuntimeAttributes -> {Listable}];
L = 500;
data = Table[Boole[x <= 11 && y <= 11], {x, L}, {y, L}];
Image[hue@
RotateRight[
10 RotateRight[Fourier[RotateRight[data, {-5, -5}]], {L/2, L/2}]], 
ColorSpace -> Hue, Magnification -> 1]
Image[hue@
RotateRight[
10 RotateRight[Fourier[RotateRight[data, {-4, -4}]], {L/2, L/2}]], 
ColorSpace -> Hue, Magnification -> 1]
Image[hue@
RotateRight[
10 RotateRight[Fourier[RotateRight[data, {0, 0}]], {L/2, L/2}]], 
ColorSpace -> Hue, Magnification -> 1]

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

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

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

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

Tất cả ba hình ảnh đều là các biến đổi 2D Fourier của cùng một tín hiệu đầu vào (một hình vuông đệm với các số 0 đến độ dài ), nhưng các đầu vào đã được xoay theo chu kỳ 5, 4 và 0 và 200 điểm dữ liệu. Phổ độ lớn (được mã hóa bằng độ sáng pixel) giống hệt nhau, nhưng phổ pha hoàn toàn khác nhau! Mã hóa pha được thực hiện sao cho 1 ánh xạ sang màu đỏ, ánh xạ sang màu xanh lục, ánh xạ sang màu lục lam và11×11500×500Tôi-1-Tôibản đồ sang màu tím. Đây là những gì tôi muốn nói khi tôi nói rằng phổ pha là bất biến không dịch chuyển, và do đó không thể chấp nhận được đối với sự hiểu biết thị giác của con người. Ví dụ, với sự dịch chuyển theo chu kỳ 200 điểm dữ liệu, hoàn toàn không thể biết được chuyện gì đang xảy ra trong pha, vì nó trông giống như tĩnh, nhưng tín hiệu đầu vào không phức tạp hơn các trường hợp đầu vào khác.


0

Nếu bạn muốn thay đổi tần số của tín hiệu hoặc độ dài FFT để tín hiệu thay đổi giữa chính xác định kỳ và không chính xác theo định kỳ trong khẩu độ FFT và không muốn thấy pha của thùng cường độ cực đại cho thay đổi tín hiệu đó, người ta có thể tham chiếu pha ban đầu của tín hiệu đến trung tâm nếu khẩu độ FFT thay vì bắt đầu (đối với sin (t) được tạo, đặt t = 0 vào trung tâm của mảng FFT).


-1

Trang web Sóng Gauss chi tiết phần về pha và hành vi giống như ngẫu nhiên của nó: chỉ là vấn đề lỗi dấu phẩy động như DumpsterDoustus đã nói

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.