Chuyển đổi sóng hình sin thành sóng tam giác

lập trình


Vì lý do, tôi không thể đơn giản tạo ra Sóng tam giác có tần số tôi cần, nhưng tôi có sóng hình sin và sóng vuông ở tần số đó.

Tôi không thể giữ trạng thái bổ sung.

Tôi cần một thuật toán để tính sóng tam giác từ sóng hình sin hoặc sóng vuông

Sóng tam giác – HandWiki[^]

Phần này chứa các hình thức toán học cho nó, nhưng tôi không hiểu các hình thức toán học.

Tôi đã hy vọng ai đó có thể áp dụng các khái niệm liên quan có trong đó vào một số mã. Tôi không quan tâm ngôn ngữ nào, miễn là nó có thể chuyển sang ngôn ngữ khác.

Những gì tôi đã thử:

Tôi đã thử tự tạo sóng tam giác, nhưng tôi cần tạo sóng theo từng phần một và giữ pha liên tục giữa các phần để tôi không nhận được nhấp chuột. Tôi có một sóng hình sin theo dõi bằng cách sử dụng số nguyên ngày càng tăng nhân với giá trị delta dựa trên tần số, nhưng đó không phải là chuyển động lên xuống – nó giống như một chiếc răng cưa hơn nếu tôi áp dụng một modulo cho nó, nhưng một lần nữa, Tôi cần hình tam giác.

Giải pháp 2

Nếu bạn có một sóng vuông mà bạn biết biên độ và chu kỳ, bạn có thể tạo ra sóng tam giác từ đó bằng cách sử dụng hình học đơn giản không?
Sóng tam giác – HandWiki[^]

Nếu điểm bắt đầu tăng của TW được đồng bộ hóa với điểm tăng của SW thì tất cả những gì bạn đang làm là vẽ đường chéo từ BL đến TR, sau đó TL đến BR, điều này không đáng kể và sẽ nhanh và tiết kiệm không gian.

Nếu quá trình đồng bộ hóa được “bước” theo sơ đồ trong liên kết thì đó chỉ là điểm bắt đầu bù đắp mà bạn cần phục vụ – lại là hình học đơn giản.

Giải pháp 1

Từ Wikipedia:

Có thể tính gần đúng một sóng tam giác bằng phương pháp tổng hợp cộng bằng cách tính tổng các hài lẻ của sóng cơ bản trong khi nhân mọi hài lẻ khác với −1 (hoặc, tương đương, thay đổi pha của nó với π) và nhân biên độ của các hài đó với một trên bình phương số chế độ của họ, N (tương đương với một trên bình phương tần số tương đối của chúng so với tần số cơ bản).

Đó là một thuật toán đơn giản và bài báo cho biết nó hội tụ trên một sóng tam giác khá nhanh. (BIÊN TẬP: Sóng cơ bản là sóng hình sin, nhưng có lẽ bạn cũng biết điều đó.)

Giải pháp 4

Tôi có lẽ sẽ áp dụng cách tiếp cận dựa trên bảng.
Chỉ cần lưu trữ các giá trị của hàm bạn muốn trên miền quan tâm.
Điều này thường mang lại tốc độ thực thi nhanh nhất mà không gặp bất kỳ vấn đề về thời gian nào, tuy nhiên sẽ gây tốn kém một số dung lượng lưu trữ.

コメント

タイトルとURLをコピーしました