Cái gì ở cuối FFT của tôi trong LTSPICE?


8

Tại sao các FFT có rác ở đầu tần số cao? Giả sử tôi đi mô phỏng mạch này trong LTSPICE:

sơ đồ

mô phỏng mạch này - Sơ đồ được tạo bằng CircuitLab

Trong đó các tham số mô phỏng và sin LTSPICE là:

SINE(0 1 1K 0 0 0 1000)
.tran 1 startup

Sau đó, tôi yêu cầu LTSPICE cho tôi một FFT không có cửa sổ và 1.000.000 điểm: FFT

Tất cả những thứ linh tinh ở cuối là gì? Tôi chỉ mong đợi một đột biến ở 1KHz, không phải là một tần số bổ sung ở 3KHz, v.v. Điều này có xảy ra với tất cả các FFT không? Điều gì kiểm soát các gai mà bạn nhận được sau khi cơ bản của bạn?


Bạn thực sự có thể xác định chính xác các tần số khác? Chúng có phải là bội số lẻ của 1 kHz không? Trong trường hợp đó, một cái gì đó làm biến dạng hình sin "hoàn hảo" của bạn để trông "hình chữ nhật" hơn, và nó có thể chỉ là độ chính xác bằng số mà ltspice sử dụng trong nội bộ.
Marcus Müller

1
Tôi sẽ không nhìn dưới -100dB nhưng bắt đầu với sóng hài thứ 3, dường như không có cửa sổ nào là vấn đề
Tony Stewart Sunnyskyguy EE75

1
Có thể có một cái gì đó để làm với nén dạng sóng. Xem câu hỏi khác này để biết thêm chi tiết và làm thế nào để kiểm tra nếu đó là trường hợp. Electronics.stackexchange.com/questions/338292/ Cách
mkeith

Tôi không thể sao chép dữ liệu này, phiên bản LTspice của tôi muốn có hơn 1e6 điểm mô phỏng để có FFT 1e6 điểm, tức là bước thời gian tối đa là 1e-6.
ồn

Bạn có cần đỉnh Quasi để phù hợp với phổ âm thanh cho điều chế BW không ??
Tony Stewart Sunnyskyguy EE75

Câu trả lời:


4

Câu trả lời của @ D.Brown đã là một câu hỏi rất hay, vì vậy tôi sẽ chỉ thêm một vài điều nhỏ. Thuật toán của LTspice là tùy chỉnh và chấp nhận số điểm không có hai điểm. Điều này không có nghĩa là độ phân giải không quan trọng. Tuy nhiên, 1kHz trên 1 giây có nghĩa là số chu kỳ nguyên, do đó không cần phải làm mịn cửa sổ hoặc nhị phân để giảm nhiễu (cài đặt trong cửa sổ FFT). Mặc dù vậy, những gì @mkeith đã đề cập và theo mặc định, LTspice sử dụng nén dạng sóng (300 điểm trên mỗi màn hình, IIRC), có nghĩa là mọi điểm khác đều bị giảm và độ phân giải của dạng sóng bị giảm. Giải pháp cho điều này là dấu thời gian chặt chẽ hơn hoặc .option plotwinsize=0là cách cuối cùng loại bỏ nén dạng sóng. Đây là những gì xảy ra khi tùy chọn này được thêm vào, nhưng không có dấu thời gian nào được áp đặt:

mặc định

Đây có lẽ là những gì bạn thấy, nhiều hay ít, vậy lựa chọn cho là gì? Bạn đang mô phỏng dạng sóng 1 kHz trong khoảng thời gian 1 giây . Mạch, nếu có thể được gọi là, là một nguồn và tải đơn giản, và nguồn đó là một điều hòa, một nhiệm vụ nghiêm trọng cho bộ giải ma trận, vì vậy LTspice, giống như tất cả các động cơ SPICE, nếu nó cảm thấy đạo hàm trơn tru, nó sẽ tăng gấp đôi dấu thời gian của nó để không làm chậm quá trình mô phỏng và nó sẽ tiếp tục nhân đôi nó cho đến khi đạt được giới hạn bên trong nào đó, tại thời điểm đó nó sẽ bay qua mô phỏng. Kết quả là một dạng sóng thô, thậm chí không plotwinsizethể cải thiện quá nhiều.

μ

10u

μnumdgt

cực kỳ

Vẫn có một sàn tiếng ồn hơi chao đảo, nhưng mức độ bây giờ nhỏ hơn -250dB. Điều này gần với độ chính xác của máy. Tạo dấu thời gian 1/1048576 (2 ^ -20) không cải thiện kết quả (bạn có thể tự kiểm tra).

μ


Cảm ơn bạn đã đưa vào công việc cho câu trả lời này. Bên cạnh đó, tôi đã nhấn mạnh rằng LTspice hoạt động mạnh mẽ khác nhau trên macOS so với Windows. (Tôi cho rằng đây là phiên bản Windows)
tiếng ồn

@loudnoises Có, mặc dù dưới Wine, không phải là vấn đề. Tôi đã thấy một vài điểm, ở đây và ở đó, trong Nhóm LTspice của Yahoo, nhưng vì tôi không phải là người dùng Mac, tôi đã không nhấn mạnh vào chúng. Có thể đó cũng là vấn đề về cài đặt, ẩn dưới mui xe khác nhau, nhưng thực sự, tôi không chắc chắn.
một công dân có liên quan

Thông minh! Bây giờ, khi nhìn lại tệp trợ giúp LTSPICE, tôi đã nhận thấy điều này: "LTspice sử dụng thuật toán FFT độc quyền cho phép số lượng dữ liệu tùy ý, nghĩa là không giới hạn ở mức 2. Khi bạn muốn thực hiện mô phỏng của FFT dữ liệu, có lẽ bạn sẽ muốn tắt nén dạng sóng, quy định bước thời gian tối đa và thậm chí có thể sử dụng định dạng tệp dạng sóng chính xác kép để giảm tầng nhiễu số. "
watkipet

@ một công dân có liên quan: Khi bạn tuyên bố, "Đây là kết quả với dấu thời gian 1 giây", ý bạn là, "Đây là kết quả với dấu thời gian 10 giây"?
watkipet

@loudnoises Tôi đang sử dụng phiên bản macOS gốc. Nhưng tôi thấy kết quả tương tự như @a công dân có liên quan.
watkipet

14

Có một số phần cho câu trả lời này. Tôi dựa trên câu trả lời này dựa trên các đặc điểm của thuật toán FFT. Tôi không quen với việc triển khai LTSpice cụ thể, nhưng hành vi bạn báo cáo là chính xác những gì tôi mong đợi.

Việc triển khai FFT phổ biến nhất hoạt động dựa trên công suất nguyên gồm 2 điểm dữ liệu. Vì vậy, hầu hết các triển khai sẽ đệm 1.000.000 điểm dữ liệu của bạn lên tới 1.048.576 điểm dữ liệu và thực hiện FFT trên đó. Lưu ý rằng độ dài này không phải là số nguyên của sóng hình sin.

Có các phương pháp Biến đổi Fourier thay thế phân tách dữ liệu khác nhau. Chúng thường có tên là các phương thức Biến đổi Fourier rời rạc (DFT) và cả hai đều chậm hơn và phức tạp hơn đáng kể để thực hiện. Tôi gần như chưa bao giờ gặp chúng trong các ứng dụng thực tế. FFT là một triển khai DFT cụ thể yêu cầu số lượng điểm dữ liệu phải là công suất nguyên là 2 (hoặc đôi khi là công suất nguyên là 4).

Vì vậy, tôi giả định rằng LTSpice đang đệm dữ liệu của bạn lên tới 1.048.576 điểm dữ liệu, 48.576 giá trị dữ liệu được thêm vào ở cuối chứa một hằng số.

Bây giờ bạn có thể thấy vấn đề: bộ đệm của bạn gồm 1.048.576 mẫu có 1.000 sóng hình sin, mỗi mẫu là 1.000 mẫu, theo sau là 48.576 giá trị không đổi. Điều này không thể được biểu diễn bằng tổng sóng hình sin có tần số 1kHz. Thay vào đó, kết quả FFT hiển thị các giá trị tần số cao bổ sung cần thiết để tái tạo tín hiệu của bạn.

Để xác định xem đây có phải là sự cố không, hãy tạo bộ đệm gồm 1.048.576 mẫu có chứa sóng hình sin với chu kỳ 1.024 mẫu. Các tần số cao nên được giảm đáng kể về cường độ.

Bây giờ, như hiệu quả của việc áp dụng một cửa sổ:

Thuật toán FFT về mặt khái niệm 'bao bọc' dữ liệu, do đó, điểm cuối cùng của dữ liệu đầu vào được theo sau bởi điểm đầu tiên của dữ liệu đầu vào. Nghĩa là, FFT được tính như thể dữ liệu là vô hạn, được lặp lại theo vòng tròn, như một vectơ với chuỗi: x [0], x [1], ..., x [1048574], x [1048575], x [ 0], x [1], ...

Gói này có thể dẫn đến một bước chuyển giữa điểm cuối cùng trong bộ đệm dữ liệu và điểm đầu tiên. Bước chuyển đổi này tạo ra kết quả FFT với sự đóng góp lớn (giả) từ tần số cao. Mục đích của một cửa sổ là để loại bỏ vấn đề này. Hàm cửa sổ chuyển về 0 ở cả hai đầu, vì vậy trong trường hợp của bạn, w [0] và w [999999] đều bằng không. Khi dữ liệu được nhân với cửa sổ, các giá trị trở thành số 0 ở đầu và cuối, do đó không có bước chuyển tiếp nào ở phần bọc.

Hàm cửa sổ bạn áp dụng làm thay đổi nội dung tần số của bộ đệm, bạn chọn một hàm thể hiện sự đánh đổi chấp nhận được. Một gaussian là một điểm khởi đầu tốt. Đối với bất kỳ ứng dụng thực tế nào mà bạn không thể kiểm soát chính xác nội dung tần số của dữ liệu, bạn sẽ phải áp dụng chức năng cửa sổ để loại bỏ bước chuyển ngụ ý do độ dài dữ liệu.

Các vấn đề còn lại:

Có một nguồn tiềm năng khác của nhiễu phổ tần số cao trong FFT. Hiệu ứng tăng theo chiều dài FFT và nó có thể là thứ bạn có thể thấy trong một số trường hợp tại 1.000.000 điểm dữ liệu.

Vòng lặp bên trong thuật toán FFT sử dụng các điểm xung quanh một vòng tròn trong mặt phẳng phức: e ^ (i * theta), trong đó thuật toán lặp lại 'theta' từ 0 đến 2 * pi theo các bước tinh xảo liên tiếp, lên đến số điểm trong FFT. Nghĩa là, nếu bạn tính toán FFT trên 1.048.576 mẫu, trong một trong các lần lặp của vòng lặp bên ngoài, vòng lặp bên trong sẽ tính toán e ^ (i * theta), trong đó theta = 2 * pi * n / N, trong đó N là 1.048.576 , lặp n từ 0 đến 1,048,575. Điều này được thực hiện bằng phương pháp rõ ràng là nhân liên tiếp với e ^ (i * 2 * pi / N).

Bạn có thể thấy vấn đề: khi N trở nên lớn, e ^ (i * 2 * pi / N) trở nên rất gần với 1 và nó được nhân N lần. Với điểm nổi chính xác kép, các lỗi nhỏ, nhưng tôi nghĩ bạn có thể thấy sàn nhiễu kết quả nếu bạn xem xét kỹ. Với điểm nổi chính xác đơn, tại 1.000.000 điểm dữ liệu, chính phép tính FFT tạo ra một mức nhiễu đáng kể.

Có các kỹ thuật thay thế cho điện toán e ^ (i * theta) để loại bỏ vấn đề này, nhưng việc thực hiện phức tạp hơn. Tôi chỉ phải tạo ra một triển khai như vậy một lần.


Về DFT so với FFT, menu chuột phải trong LTSPICE gọi nó là "FFT" trong khi hộp thoại cấu hình gọi nó là "DFFT". Bây giờ, đọc tệp trợ giúp, tôi thấy những gì @a công dân quan tâm đã đề cập về LTSPICE chấp nhận số điểm không có quyền lực của hai điểm.
watkipet

0

Lý do có thể: -

Khi bạn vẽ một sóng thoáng qua trong một trình giả lập, nó sẽ nội suy giữa các tính toán thực tế để giảm thiểu công việc khó khăn được thực hiện và cho phép hiển thị kết quả nhanh hơn trên màn hình.

Cài đặt mặc định cho dấu thời gian tối đa trong LTSpice có thể là 100 chúng tôi và do đó, giữa các điểm này, bạn đã kết quả nội suy, nghĩa là chúng không hoàn hảo và góp phần làm biến dạng được coi là sóng hài trong FFT.

Hãy thử đặt dấu thời gian tối đa của bạn nhỏ hơn nhiều so với hiện tại và xem điều gì sẽ xảy ra.

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.