Tôi muốn viết một số mã có thể chấp nhận một số loại đầu vào và nhận dạng nó dưới dạng sóng vuông, sóng tam giác hoặc một loại dạng sóng nào đó. Tôi cũng cần một số cách để tạo ra làn sóng nói trên.
Tôi có kinh nghiệm với C/C++, tuy nhiên, tôi không chắc mình sẽ mô phỏng tất cả những điều này như thế nào. Cuối cùng, tôi muốn chuyển đổi chương trình này thành chương trình MicroController để đọc đầu vào tương tự của nó nhằm xác định dạng sóng.
EDIT: Xin lỗi; lẽ ra tôi nên đề cập rằng nó sẽ ở tần số đã biết và biên độ thì không xác định.
Việc tạo ra sóng dễ dàng hơn nhiều so với việc xác định chúng. Tôi có một dự án nhỏ để tạo ra một số làn sóng. Đây là từ dự án của tôi Ví dụ:
biên độ phao;
chuyển đổi (âm thanh-> kiểu sóng)
{
trường hợp LA_SQUARE:
biên độ = âm thanh->theta > .5 ?
phá vỡ;
trường hợp LA_SINE:
biên độ = sin(2 * PI * sound->theta);
phá vỡ;
trường hợp LA_TRIANGLE:
biên độ = âm thanh->theta > .5 ? 4 * âm thanh->theta - 3 : -4 * âm thanh->theta + 1;
phá vỡ;
trường hợp LA_SAWOOTH:
biên độ = 2 * âm thanh->theta - 1,0;
phá vỡ;
trường hợp LA_NOISE:
biên độ = ((float)rand() / RAND_MAX);
phá vỡ;
default:
;
}
theta
Cập nhật mọi khung hình của dạng sóng và phụ thuộc vào tần số của dạng sóng bạn tạo.
Đối với việc xác định các sóng, nếu bạn biết mình sẽ có được một sóng hình vuông, hình tam giác hoặc hình sin đơn giản, không trộn lẫn, bạn chỉ cần thực hiện một số phép thử đơn giản. Xem sự thay đổi biên độ tại hai điểm bất kỳ trong sóng. Nếu chúng giống nhau thì đó là sóng vuông. Nếu chúng thay đổi tuyến tính (nghĩa là nếu biên độ thay đổi không đổi), bạn sẽ nhận được sóng tam giác (hoặc sóng răng cưa, nếu bạn muốn phân biệt). Nếu không thì đó là sóng hình sin. Hãy nhớ rằng việc kiểm tra này chỉ hoạt động nếu bạn chỉ mong đợi những loại sóng này và chúng không trộn lẫn với nhau hoặc bất kỳ loại sóng nào khác. Tôi có thể nghĩ ra một số trường hợp khó khăn khác, nhưng tôi sẽ để bạn lo lắng về điều đó.
Nếu bạn đang làm điều gì đó thú vị hơn, bạn có thể muốn tìm một cuốn sách dành riêng cho chủ đề này, giống như cuốn sách được đề xuất trong phần bình luận.
Tôi là một lập trình viên xuất sắc, rất giỏi!