Mục lục:
- Bước 1: Danh sách thiết bị (lấy Pic của Board và Kevin's Comp)
- Bước 2: Tổng quan
- Bước 3: Tệp Wav
- Bước 4: Python- Sử dụng Pylab và Scipy
- Bước 5: Lấy mẫu Python và FFT (Hiển thị mã và kết quả của nó)
- Bước 6: Vivado (Bộ so sánh)
- Bước 7: HÌNH ẢNH CỦA board BASYS 3
- Bước 8: Vivado (Bộ giải mã 7 đoạn với ghép kênh)
- Bước 9: Vivado (Kết hợp các thành phần)
Video: Bộ dò: 9 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:36
Dự án này được thiết kế để tạo ra một bộ chỉnh guitar bằng Vivado và một màn hình 7 đoạn. Khi bộ chỉnh tìm thấy tần số của âm thanh đầu vào, bộ chỉnh sẽ so sánh giá trị đó với danh sách các giá trị được mã hóa cứng cho các tần số chính xác được gọi là tần số chuẩn cho cao độ chính xác của nốt nhạc. Sau đó, bộ chỉnh sẽ hiển thị âm thanh bạn nhập gần hay xa so với ghi chú mong muốn của bạn. Điều thú vị là sóng âm là sự kết hợp của nhiều dạng sóng hình sin với các thành phần thực và ảo. Mặc dù điều này có vẻ khó thực hiện đối với những người không quen thuộc, nhưng có một số cách mà chúng ta vẫn có thể phân tích sóng với các giá trị thực và tưởng tượng.
Bản giới thiệu:
Bước 1: Danh sách thiết bị (lấy Pic của Board và Kevin's Comp)
Đầu tiên, chúng ta cần một bo mạch Basys 3 và một máy tính hỗ trợ các chương trình sau.
Python - có thể sử dụng pylab và scipy để lấy mẫu và fft
Vivado - để kết nối với bảng Basys 3 và xem kết quả một cách trực quan
Bước 2: Tổng quan
Bộ chỉnh được tạo thành từ một số thành phần quan trọng: micrô, bộ lấy mẫu, FFT (Biến đổi Fourier nhanh), bộ so sánh, bộ giải mã và màn hình. Mục đích của micrô là thu nhận dạng sóng đầu vào. Bộ lấy mẫu nhận tín hiệu đầu ra của micrô và sử dụng FFT để chuyển đổi tín hiệu thành đầu ra có cường độ theo tần số. Sau đó, sử dụng đầu ra của FFT và tìm độ lớn tối đa và tần số liên quan đến nó chia cho 2, tần số liên quan đến cao độ của dạng sóng có thể được tìm thấy. Giá trị đó sau đó có thể đi vào bộ so sánh. Sau đó, nó được so sánh với một bảng tra cứu, bảng này đã thiết lập các giá trị tần số cho các cao độ hoàn hảo của tất cả các nốt. Bộ so sánh được cung cấp một đầu vào cho ghi chú mong muốn, sau đó nó có thể khớp ghi chú mong muốn với tần số chính xác của nó từ bảng tra cứu. Sau đó bộ so sánh sẽ chọn nốt nhạc có tần số gần nhất với tần số lớn nhất. Bộ so sánh sẽ so sánh hai giá trị và xem giá trị của tần số gần với giá trị mong muốn và sau đó đưa dữ liệu đó thành tín hiệu. Bộ so sánh sẽ gửi tín hiệu đó đến bộ giải mã, tại đây bộ giải mã sẽ chọn các đầu vào cho cực dương của màn hình 7 đoạn để hiển thị độ chính xác của nốt nhạc.
Bước 3: Tệp Wav
Trong bước này, chúng tôi sẽ lấy một tệp wav của một cao độ và cố gắng xuất ra tần số của cao độ đó.
Trước tiên, bạn cần một tệp wav của một ghi chú. Trong ví dụ này, chúng tôi sẽ sử dụng tệp wav âm thanh nổi 16 bit với tốc độ lấy mẫu là 44,1kHz. Điều này có thể được tạo trong DAW chẳng hạn như Garageband hoặc tải xuống. Đối với ví dụ này, sóng A4 440Hz Sine do chúng tôi tạo ra trên Garageband có thể được tải xuống tại đây.
Bước 4: Python- Sử dụng Pylab và Scipy
Chúng tôi đã sử dụng thư viện Python để thực hiện “Biến đổi Fourier nhanh”. Tài nguyên trực tuyến cho phép chúng tôi bắt chước và xem những gì hữu ích trong pylab và scipy.
1. Nếu bạn chưa cài đặt pylab hoặc scipy, bạn cần phải làm như vậy. Hoặc, Pycharm có một tính năng rất hay, khi thử nhập pylab hoặc scipy, có một gạch dưới nguệch ngoạc cho bạn biết rằng bạn chưa cài đặt thư viện. Sau đó, bạn có thể cài đặt chúng trực tiếp bằng cách nhấn vào bóng đèn màu đỏ (nó sẽ xuất hiện khi bạn đặt con trỏ gần gạch dưới nguệch ngoạc).
2. Sử dụng hàm scipy.io.wavfile.read, đọc và lấy dữ liệu ra từ tệp wav mẫu. Chạy qua dữ liệu bằng pylab.fft, nó sẽ trả về cho bạn một danh sách độ lớn của sức mạnh.
3. Sau đó tìm giá trị lớn nhất của công suất phát ra từ danh sách. Tìm chỉ mục danh sách nơi công suất tối đa xảy ra vì cách nhanh hơn để tìm tần số nào kết hợp với công suất đó. Cuối cùng trả về tần số tối đa. Vì sau này chúng ta cần nhập tín hiệu tần số nhị phân vào mã VHDL, chúng ta có thể chuyển đổi tần số trong float thành nhị phân và trả về.
Bước 5: Lấy mẫu Python và FFT (Hiển thị mã và kết quả của nó)
Trong bước này, các khoản tín dụng đầy đủ truy cập liên kết này bên dưới để lấy mẫu và FFT.
samcarcagno.altervista.org/blog/basic-sound… Mã của chúng tôi:
Sau khi đã cài đặt xong pylab và scipy, các tệp wav có thể được nhập và đọc.
from pylab import * from scipy.io import wavfile
sampFreq, snd = wavfile.read ('440_sine.wav')
Sau đó, snd.shape đại diện cho các điểm mẫu và số lượng kênh. Trong trường hợp của chúng tôi, các điểm mẫu phụ thuộc vào thời lượng của tệp wav và số kênh là 2 vì nó là âm thanh nổi.
Sau đó snd = snd / (2. ** 15) …… xlabel ('Thời gian (mili giây)')
tổ chức tín hiệu thời gian thành một mảng.
Sau đó, FFT tạo ra một mảng về tần số và cường độ (Công suất)
Sau đó, thông qua một vòng lặp while, độ lớn tối đa và tần số liên quan đến nó được tìm thấy. Tần số đó / 2 đại diện cho cao độ của wavfile.
Sau đó, sử dụng mã riêng của chúng tôi, số nguyên đại diện cho tần số được chuyển đổi thành số nhị phân 12 bit và một tệp văn bản được tạo với số đó trong đó.
Bước 6: Vivado (Bộ so sánh)
Trong phần này của quy trình, chúng ta cần một bộ so sánh để so sánh hai tần số đầu vào.
1. Đã tạo bộ so sánh để so sánh xem tần số đầu vào (máy thu) cao hơn, thấp hơn hoặc trong phạm vi lề 2 Hz đã xác định ở ghi chú. (bộ chỉnh guitar điển hình nằm trong khoảng từ e2 đến g5, 82 Hz đến 784 Hz).
2. Khi tạo biên độ 2 Hz, chúng tôi đã sử dụng RCA để thêm “000000000010” vào tần số máy thu và kiểm tra xem nó vẫn còn quá thấp đối với đầu vào của người dùng. Nếu đúng như vậy, tín hiệu bit đơn “cao” <= ‘0’, “thấp” <= ‘1’. Sau đó, chúng tôi thêm “000000000010” vào đầu vào của người dùng để xem liệu đầu vào của máy thu có cao hơn thế không. Nếu đúng như vậy, “high” <= ‘1’, “low” <= ‘0’. Cả hai trường hợp đều không trả về "0".
3. Vì phần tiếp theo của mô-đun cần một dữ liệu 4 bit cụ thể để cho biết ghi chú của người nhận là gì, không chỉ trả về 2 đầu ra so sánh (thấp và cao), chúng tôi cần trả về liên kết mã cần lưu ý, liên kết với tần số. Vui lòng tham khảo biểu đồ dưới đây:
C | 0011
C # | 1011
D | 0100
D # | 1100
E | 0101
F | 0110
F # | 1110
G | 0111
G # | 1111
A | 0001
A # | 1001
B | 0010
Sử dụng một số câu lệnh if để phân loại chúng thành ghi chú và mã hóa chúng thành những gì cần thiết cho bộ giải mã bảy đoạn.
Bước 7: HÌNH ẢNH CỦA board BASYS 3
Bước 8: Vivado (Bộ giải mã 7 đoạn với ghép kênh)
Mọi thứ đều cần có màn hình hiển thị. Nó là một yếu tố quan trọng quyết định giá trị của một thiết kế. Do đó, chúng tôi cần tạo một màn hình hiển thị sử dụng bộ giải mã bảy đoạn, điều này sẽ cho phép chúng tôi chứng minh khả năng thiết kế bộ chỉnh sóng trên B Board. Ngoài ra, nó sẽ giúp chúng tôi kiểm tra và gỡ lỗi.
Bộ giải mã bảy đoạn chứa các đầu vào có tên là Lưu ý, thấp, cao và CLK, trong khi xuất ra SSEG, AN và Fiz_Hz. Có một hình ảnh của sơ đồ khối ở trên để giúp chúng tôi hiểu thiết kế.
Mục đích của việc có hai đầu vào thấp và cao riêng biệt là để cung cấp cho người thiết kế bộ so sánh quyền tự do thao tác xem tần số âm thanh (sóng) cao hơn hay thấp hơn tần số đầu vào (Fix_Hz) mà người dùng muốn so sánh. Ngoài ra, SSEG đầu ra đại diện cho màn hình hiển thị bảy phân đoạn và dấu chấm bên cạnh trong khi AN đại diện cho các cực dương mà bộ bảy phân đoạn hiển thị sẽ sáng lên.
Trong bộ giải mã bảy đoạn này, đồng hồ (CLK) đóng một vai trò quan trọng trong việc hiển thị hai giá trị khác nhau trên hai hoặc nhiều cực dương khác nhau. Vì Board không cho phép chúng tôi hiển thị hai giá trị khác nhau cùng một lúc, chúng tôi phải sử dụng ghép kênh để hiển thị một giá trị cùng một lúc, trong khi chuyển sang một giá trị khác đủ nhanh để mắt chúng tôi không thể nắm bắt được. Đây là lúc đầu vào CLK phát huy tác dụng.
Để biết thêm thông tin, vui lòng tham khảo mã nguồn.
Bước 9: Vivado (Kết hợp các thành phần)
Với mỗi mô-đun (bộ thu python, bộ so sánh, bộ giải mã bảy đoạn, v.v.) được hoàn thành, sau đó chúng tôi kết hợp với nhau bằng cách sử dụng mô-đun lớn hơn. Cũng giống như hình dưới phần "Over view" được hiển thị, chúng tôi kết nối từng tín hiệu cho phù hợp. Để tham khảo, vui lòng kiểm tra mã nguồn của chúng tôi "SW_Hz.vhd".
Cảm ơn bạn. Hy vọng bạn thích.
Đề xuất:
Động cơ bước Điều khiển động cơ bước Không cần vi điều khiển !: 6 bước
Động cơ bước Điều khiển động cơ bước Không cần vi điều khiển !: Trong phần Hướng dẫn nhanh này, chúng tôi sẽ tạo một bộ điều khiển động cơ bước đơn giản bằng cách sử dụng động cơ bước. Dự án này không yêu cầu mạch phức tạp hoặc vi điều khiển. Vì vậy, không cần thêm ado, chúng ta hãy bắt đầu
Động cơ bước được điều khiển Động cơ bước không có vi điều khiển (V2): 9 bước (có hình ảnh)
Động cơ bước được điều khiển bằng động cơ bước Không cần vi điều khiển (V2): Trong một trong những Hướng dẫn trước đây của tôi, tôi đã chỉ cho bạn cách điều khiển động cơ bước bằng cách sử dụng động cơ bước mà không cần vi điều khiển. Đó là một dự án nhanh chóng và thú vị nhưng nó đi kèm với hai vấn đề sẽ được giải quyết trong Có thể hướng dẫn này. Vì vậy, hóm hỉnh
Đầu máy mô hình điều khiển động cơ bước - Động cơ bước như một bộ mã hóa quay: 11 bước (có hình ảnh)
Đầu máy mô hình điều khiển động cơ bước | Động cơ bước làm bộ mã hóa quay: Trong một trong những phần Hướng dẫn trước, chúng ta đã học cách sử dụng động cơ bước làm bộ mã hóa quay. Trong dự án này, bây giờ chúng ta sẽ sử dụng bộ mã hóa quay động cơ bước đó để điều khiển đầu máy mô hình bằng vi điều khiển Arduino. Vì vậy, không có fu
Âm thanh bay bổng với Arduino Uno Từng bước (8 bước): 8 bước
Acoustic Levitation With Arduino Uno Step-by-by-by (8 bước): bộ chuyển đổi âm thanh siêu âm L298N Dc cấp nguồn cho bộ chuyển đổi âm thanh nữ với chân cắm một chiều nam Arduino UNOBreadboard Cách hoạt động: Đầu tiên, bạn tải mã lên Arduino Uno (nó là một vi điều khiển được trang bị kỹ thuật số và các cổng tương tự để chuyển đổi mã (C ++)
Động cơ bước Điều khiển động cơ bước Động cơ bước - Động cơ bước như một bộ mã hóa quay: 11 bước (có hình ảnh)
Động cơ bước Điều khiển động cơ bước Động cơ bước | Động cơ bước như một bộ mã hóa quay: Có một vài động cơ bước nằm xung quanh và muốn làm điều gì đó? Trong Có thể hướng dẫn này, hãy sử dụng động cơ bước làm bộ mã hóa quay để điều khiển vị trí của động cơ bước khác bằng vi điều khiển Arduino. Vì vậy, không cần phải quảng cáo thêm, chúng ta hãy