FFT của sóng hình sin không đến như mong đợi, tức là một điểm


14

Biểu đồ màu lục lam là phổ 50 Hz và màu đỏ tươi là sóng hình sin 50,1 Hz (có biên độ 0,7). Cả hai đều được lấy mẫu ở 1024 mẫu / s. Tôi đã thực hiện FFT 1024 điểm để có được phổ này.

Tại sao chỉ có phổ 50Hz là một giá trị duy nhất? Tại sao sin 50,1 Hz bao gồm các tần số khác ngoài 50,1 Hz; những tần số mới này đến từ đâu?

Tôi không thực hiện bất kỳ xử lý phi tuyến tính nào trên tín hiệu 50,1 Hz! Ngoài ra, 50,1 Hz dường như có biên độ cực đại nhỏ hơn, tức là không phải là 0,7, trong khi thực tế, sóng hình sin tôi tạo ra có biên độ 0,7.

Tại sao lại thế này?

Hai phổ, tương ứng cho 50Hz và 50.1Hz Thu được bằng lệnh MATALB fft ();


Bạn có thể vui lòng gửi mã bạn đã sử dụng để sản xuất cốt truyện này? Tôi đoán tốt nhất, là bởi vì các tín hiệu của bạn rất gần nhau, fft không thể giải quyết chúng một cách chính xác. Điều đó, hoặc một số bôi nhọ quang phổ vì các mẫu không khớp với tần số.
Tom Kealy

4
Các câu trả lời dưới đây là chính xác. Thuật ngữ cho những gì bạn quan sát được gọi là rò rỉ quang phổ và được quan sát thấy khi bạn phân tích một hình sin có tần số không nằm chính xác ở trung tâm của một trong các thùng đầu ra DFT của bạn.
Jason R

xin vui lòng tôi có thể biết những gì bạn đã âm mưu chống lại những gì cho bạn để có thể tăng đột biến ở mốc 50Hz
Nazario_Jnr

Xem câu trả lời này để biết mô tả chi tiết về vấn đề là gì và cách khắc phục.
Dilip Sarwate

Câu trả lời:


14

Trên thực tế, câu trả lời của Matt đã đưa ra một quan điểm về vấn đề ở đây: DFT hoàn toàn định kỳ theo cả hai miền thời gian và tần số (xem câu hỏi này ). Từ các tham số của bạn, chúng tôi có thể tính toán rằng thời gian quan sát của bạn là 1 s. Điều đó có nghĩa là bạn quan sát 50 giai đoạn của âm 50 Hz. Định kỳ kéo dài khoảng thời gian quan sát đó sẽ luôn dẫn đến một làn sóng hình sin dường như. Nếu bạn lấy âm 50,1 Hz, bạn đang chuyển đổi 50,1 chu kỳ dao động. Định kỳ kéo dài tín hiệu đó sẽ dẫn đến các bước nhảy pha gây ra các nhánh quang phổ bổ sung.

fS/NDFT= =1024Hz/1024= =1Hz

Cả hai hiệu ứng được mô tả ở trên đều góp phần vào phổ bạn đang quan sát.


1
Điều đó có ý nghĩa. Nhưng để rõ hơn sự rò rỉ quang phổ mà bạn mô tả là một vấn đề với công cụ (FFT) để quan sát quang phổ. Nó không phải là một khiếm khuyết trong tín hiệu. Có nghĩa là nếu tôi 'nghe' tín hiệu âm thanh 50,1 Hz, nó sẽ xuất hiện bên tai tôi dưới dạng một âm và không phải là một loại 'nhiễu'. Tôi có đúng không
gpuguy

1
Bạn hoàn toàn đúng. Nó cho thấy tầm quan trọng của việc hiểu DFT thực sự đang làm gì để có thể diễn giải nó một cách chính xác. Là một sidenote: những gì bạn sẽ "nghe" trong một triển khai thực tế cũng phụ thuộc vào cách bạn chuyển đổi tín hiệu rời rạc thành tín hiệu tương tự.
Deve

11

Đây là hiệu ứng cắt hoặc cửa sổ tín hiệu sin. Bạn cần cắt bớt theo cách mà nếu bạn thêm tín hiệu đã dịch chuyển vào tín hiệu bị cắt, nó vẫn sẽ là sóng hình sin ban đầu.


6

Bạn sẽ chỉ nhận được một điểm FFT kết quả duy nhất cho tần số hình sin không điều chế thuần túy chính xác là định kỳ nguyên trong khẩu độ hoặc chiều rộng FFT. Bất kỳ tần số hình sin nào khác sẽ xuất hiện dưới dạng được tích hợp với biến đổi (một định kỳ định kỳ) của cửa sổ mặc định (một hình chữ nhật).

50,1 Hz không chính xác định kỳ trong cửa sổ 1 giây của FFT của bạn.

Các thùng hoặc tần số kết quả FFT "rò rỉ" khác là cần thiết để thể hiện sự gián đoạn được tạo ra giữa các ranh giới cửa sổ bởi bất kỳ tín hiệu nào không chính xác là số nguyên định kỳ theo chiều rộng FFT. Điều này là do tất cả các vectơ cơ sở của DFT chính xác là định kỳ nguyên trong phạm vi chiều rộng của DFT và do đó không có sự gián đoạn đột ngột giữa điểm cuối và điểm bắt đầu của vectơ cơ sở. Vì vậy, bất kỳ tín hiệu nào không có các đặc điểm đó không thể được biểu thị chỉ bằng một vectơ cơ sở DFT (và liên hợp phức tạp của nó), vì vậy thông tin về phần còn lại của tín hiệu phải đi đâu đó.

Vì tổng năng lượng được bảo toàn bằng biến đổi FFT (định lý Parseval'a), năng lượng trong các thùng "rò rỉ" sẽ lấy đi từ thùng đỉnh. Do đó độ lớn của thùng đỉnh phải thấp hơn.


5

Tôi đặt cược sóng hình sin của bạn bằng không ở mẫu đầu tiên và cuối cùng? Nó không nên Nó nên được xếp thành hàng sao cho mẫu tiếp theo sau mẫu cuối cùng bằng 0, để bạn có thể sao chép và dán các bản sao của tín hiệu lần lượt và chúng sẽ trông liên tục, không có mẫu trùng lặp. Có thể nghĩ về nó giống như hình nền máy tính lát gạch, trong đó một cạnh phải liền mạch đáp ứng cạnh đối diện khi lát gạch. :)

Xem https://gist.github.com/endolith/236567 để biết ví dụ về con trăn:

# Sampling rate
fs = 128 # Hz

# Time is from 0 to 1 seconds, but leave off the endpoint, so that 1.0 seconds is the first sample of the *next* chunk
length = 1 # second
N = fs * length
t = linspace(0, length, num = N, endpoint = False)

# Generate a sinusoid at frequency f
f = 10 # Hz
a = cos(2 * pi * f * t)

# Use FFT to get the amplitude of the spectrum
ampl = 1/N * abs(fft(a))

Xem cách hai bản sao tín hiệu khớp với nhau từ đầu đến cuối để tạo sóng liên tục:

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

Khi điều này xảy ra, năng lượng FFT được chứa hoàn toàn trong một thùng:

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


1
Tôi đã có vấn đề tương tự như OP. Nó đã được giải quyết nhờ cài đặt điểm cuối = cờ sai. Tôi nghĩ không gian dòng là (đóng, mở) theo mặc định nhưng hóa ra là (đóng, đóng). Tôi tìm thấy lỗi nhờ mã của bạn.
Trismegistos

-1

Điều này xảy ra do rò rỉ quang phổ và cửa sổ. Đáp ứng lý tưởng tức là hàm xung là cho sóng hình sin thời gian liên tục. Khi bạn lấy DFT của một sóng hình sin rời rạc trong một máy tính kỹ thuật số, về cơ bản, bạn đang sử dụng Biến đổi Fourier của hình sin và cửa sổ lấy mẫu và sau đó lấy mẫu nó trong miền tần số. Điều này gây ra sự rò rỉ quang phổ. Tham khảo: http : //w.astro.ber siêu.edu / ~ jrg / ngst / ff / leakage.html

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.