Python tổng của sóng hình sin

nhập numpy dưới dạng np

nhập matplotlib. pyplot như cốt truyện

# Nhận giá trị x của sóng hình sin

thời gian        = np. sắp xếp (0, 10, 0. 1);

# Biên độ của sóng hình sin là hình sin của một biến như thời gian

biên độ   = np. tội lỗi (thời gian)

# Vẽ một sóng hình sin sử dụng thời gian và biên độ thu được cho sóng hình sin

kịch bản. cốt truyện (thời gian, biên độ)

# Đặt tiêu đề cho biểu đồ sóng hình sin

kịch bản. title('Sóng sin')

# Đặt nhãn trục x cho biểu đồ sóng hình sin

kịch bản. xlabel('Thời gian')

# Đặt nhãn trục y cho biểu đồ sóng hình sin

kịch bản. ylabel('Biên độ = sin(thời gian)')

kịch bản. grid(True, which='cả hai')

kịch bản. đường trục (y=0, màu='k')

kịch bản. chỉ()

# Hiển thị sóng hình sin

kịch bản. chỉ()

\[sq(t) = \frac{4}{\pi}\sum_{\text{$k=1$, $k$ lẻ}}^\infty \frac{\sin(2\pi k f t)}{

Các tần số khác nhau được gọi là sóng hài. Điều hòa đầu tiên còn được gọi là cơ bản. Chú ý chuỗi này chỉ có các thuật ngữ lẻ. Tôi. e. , tất cả các hài chẵn là 0. (Các chuỗi Fourier khác có thể có các số hạng chẵn khác 0. )

Chúng tôi sử dụng Python cùng với các mảng Numpy và Matplotlib trong Máy tính xách tay Jupyter để tạo ra một sóng kết hợp bao gồm hai sóng hình sin ở 50Hz và 100Hz trong 2 khoảng thời gian. Sau đó, chúng tôi vẽ biểu đồ miền thời gian của sóng kết hợp, rồi tính toán Biến đổi Fourier nhanh rời rạc bằng thư viện Python. Dữ liệu miền thời gian sau đó được xuất thành một tệp và được sử dụng làm đầu vào cho chương trình DFFT Fortran để tính toán DFFT và vẽ sơ đồ đầu ra của nó bằng GNUPlot


Giới thiệu.
Đầu tiên, chúng tôi bắt đầu với một tập lệnh Python được viết trong Jupyter Notebook để tạo sóng bao gồm sự kết hợp giữa sóng hình sin 50Hz và 100Hz, được lấy mẫu ở tần số 10000Hz, trong 2 khoảng thời gian và lưu các dữ liệu thô này . Máy tính xách tay Jupyter được hiển thị bên dưới.

Python+Numpy+Matplotlib trên mã Jupyter Notebook để tạo sóng kết hợp gồm hai sóng hình sin ở
50Hz và 100Hz được lấy mẫu ở 10kHz.

Tải xuống mã bằng cách nhấp vào liên kết bên dưới.
Tập lệnh Python trong Jupyter Notebook

Sau đó, chúng tôi chạy mã và thu được biểu đồ miền thời gian và biểu đồ miền tần số. Các kết quả được vẽ bằng GNUPlot

Hình ảnh về sóng hình sin 50Hz được tạo bằng Python+Numpy trên Jupyter Notebook và được vẽ bằng GNUPlot

Python tổng của sóng hình sin

Tải xuống hình ảnh bằng cách nhấp vào liên kết bên dưới.
Hình ảnh sóng kết hợp

Python tổng của sóng hình sin

Tải xuống hình ảnh bằng cách nhấp vào liên kết bên dưới.
Hình ảnh FFT của sóng kết hợp

Nhận được Biến đổi Fourier nhanh rời rạc của tệp dữ liệu thô
Giờ đây, tập lệnh Python+Numpy trên Jupyter Notebook đã xuất các phần tử dữ liệu miền thời gian thành một tệp, các phần tử này
data elements can now be fed into the FFTW3 DFFT algorithm. The algorithm is used within a Fortran 2003 program.
Nhấp vào liên kết này để xem mã DFFT của Fortran 2003.

Chạy chương trình Fortran 2003 DFFT và lấy tệp đầu ra
Mã Fortran 2003 được biên dịch và chạy với tệp văn bản dữ liệu thô làm đầu vào. Các tệp kết quả
bao gồm cường độ và pha của DFFT.

Biên dịch bằng cách gõ. gfortran -o a. ra data_file_FFTW_ver6. F03 -lfftw3
Chạy bằng cách nhập. . /một. outfile. dat DFFT_mag_file. dat DFFT_phase_file. dat sample_rate num_periods
nơi gửi tệp ra ngoài. dat là đầu ra của tập lệnh Python, DFFT_mag_file. dat là tệp cường độ DFFT,
DFFT_phase_file. dat là tệp giai đoạn DFFT,sample_rate là tốc độ lấy mẫu của tệp dữ liệu đầu vào và num_periods
là số khoảng thời gian của dữ liệu trong tệp dữ liệu đầu vào.
Có thể lấy số dòng bằng cách nhập. tệp ngoài wc -l. dữ liệu

Tệp đầu ra từ chương trình DFFT Fortran 2003
Sau khi chương trình DFFT Fortran 2003 được chạy chính xác, các tệp cường độ và pha sẽ
xuất hiện. Đầu ra của chương trình dài dòng (dành cho mục đích gỡ lỗi) và đầu ra màn hình được hiển thị bên dưới.

Toàn văn có thể tải về tại đây

Các biểu đồ của tệp đầu ra cường độ bằng GNUPlot
Tệp đầu ra cường độ được vẽ bằng GNUPlot. Tệp tập lệnh GNUPlot đã được tạo
để tạo điều kiện vẽ đồ thị chất lượng.
Tệp tập lệnh GNUPlot

Có thể tải xuống tệp tập lệnh GNUPlot bằng cách nhấp vào đây.
Chạy bằng cách nhập gnuplot 2sine_wv_gnuplot_macro. txt hoặc bắt đầu GNUPlot và nhập
load "2sine_wv_gnuplot_macro. txt" tại dấu nhắc lệnh gnuplot

Âm mưu cường độ

Python tổng của sóng hình sin

Thảo luận

Dường như có sự giảm nhẹ về đỉnh của cường độ của biểu đồ DFFT. Do các đầu vào dữ liệu thô khác vào chương trình Fortran tạo ra kết quả như mong đợi, nên độ lệch có thể liên quan đến cách tạo dữ liệu trong Python+Numpy hoặc cách dữ liệu được lưu vào tệp văn bản. Dường như cũng có một số đỉnh phụ lăn nhanh về hai phía của đỉnh chính. Điều này rất có thể là do thuật toán FFTW3 phản ứng với sự không liên tục của dữ liệu đầu vào. Cần nhiều nghiên cứu hơn để tìm ra nguyên nhân

Bạn có thể thêm các hình sin với các tần số khác nhau không?

Việc thêm các hình sin có tần số khác nhau dẫn đến tín hiệu không còn là hình sin nữa . Nhưng nó có định kỳ không? . Hình 2. Thêm các hình sin ở 3, 6, 9 Hz sẽ tạo ra tín hiệu tuần hoàn ở 3 Hz.

Điều gì xảy ra khi bạn thêm hai hình sin?

Chúng ta đã thấy rằng việc cộng hai hình sin có cùng tần số và cùng pha (sao cho hai tín hiệu tỷ lệ với nhau) sẽ cho một hình sin có tổng của hai biên độ< . .

Tổng của hai hình sin có phải là một hình sin không?

Tổng của hai hàm số thực hình sin . the sum of two equal-frequency real sinusoids is itself a single real sinusoid.