Verilog project for a 8 Band Audio Equalizer implement on FPGAs
Thiết kế bộ cân bằng âm thanh.
Chi tiết về bộ Equalizer: Audio equalizer based on FIR filters. | controlpaths.com
Đầu vào: Âm thanh được lấy mẫu với tần số 16Khz, độ rộng bit là 16 bit.
Đầu vào: 8 hệ số khuếch đại cho 8 băng tần số cần cân bằng
Đầu ra: Tín hiệu âm thanh ra.
Kết quả cần báo cáo:
Độ trễ từ đầu vào đến đầu ra.
Số cell FPGA cần sử dụng.
1)Cách mô phỏng chứng minh mạch hoạt động đúng
a. Dùng python đọc file wav, vẽ đồ thị phổ của file wav
b. Tạo file đầu vào là file text với mỗi hàng là 1 mẫu âm thanh lưu là 1 số HEX 16 bit
c. Testbench đọc file text âm thanh đầu vào vào mảng bộ nhớ 16bit và đưa vào mạch.
d. Testbench lấy đầu ra của mạch và lưu vào file text output.txt mỗi hàng 1 là giá trị mẫu âm thanh
e.Dùng python đọc file output.txt và chuyển thành file wav, vẽ đồ thị phổ
f. Dùng python tạo file outout_python.txt bằng cách dùng các hàm của python để tạo ra bộ Equalizer. So sánh kết quả output.txt với file output_python.txt
2)Tổng hợp mạch bằng FPGA báo cáo các resource cần sử dụng: số cell logic, số LUT, số DSP, số RAM
Audio equalizer based on FIR filters. | controlpaths.com
Trong dự án lần này thì chúng tôi sẽ thực hiện chủ yếu trên file nhạc dưới đây:
Rick.Astley.-.Never.Gonna.Give.You.Up.Official.Music.Video.mp4
Ta đi tìm hiểu về phần sóng (wave) trong WAV trước. Một sóng âm thanh có thể được biểu diễn bởi ba tham số:
- Biên độ: là độ mạnh của sóng âm, ta hay coi nó là độ to của âm thanh.
- Tần số: là nghịch đảo của bước sóng hoặc số dao động mỗi giây, tương ứng với âm sắc (độ trầm bổng - cao thấp).
- Pha: là điểm trong chu kỳ mà sóng bắt đầu, thường tai người không thể để ý được. Dạng sóng của file nhạc trên trong phần mềm Audacity có dạng như sau:
Tài liệu tham khảo:
1.Reading and Writing WAV Files in Python
Ảnh dưới đây là cấu trúc dữ liệu cơ bản của WAV theo bytes:
Và ảnh dưới đây cũng là cấu trúc nhưng được trìu tượng hoá cho dễ hiểu:
Qua hai ảnh trên thì chúng ta cùng nhìn qua file nhạc bằng mã hex:
Các bạn có thể đọc tài liệu tham khảo 2 để hiểu thêm về phần mã hex ở header file WAV. Dưới đây tôi sẽ trình bày về một vài tham số đặc trưng phải quan tâm khi làm dự án này:
- encoding: Cách mã hoá (0x10 tại 00000010-0) => PCM
- NumChannels: Số kênh âm thanh (0x10 tại 00000010-6) => mono (Đơn âm sắc)
- BitsPerSample: Số byte cho mỗi mẫu âm thanh (chưa xác định trong mã hex) => 2 bytes (16 bit)
- frame_rate: Tần số mẫu (số mẫu âm thanh trên giây) => 16 KHz (16000 mẫu/giây)
- num_frames: Số frame âm thanh => Tuỳ file
- duration = num_frames / frame_rate: Thời lượng (giây) => Tuỳ file
- is_signed: Giá trị có dấu hay không có dấu => Có dấu
- is_integer: Giá trị nguyên hay thực => Nguyên
- is_fixedpoint: Giá trị dấu phẩy tĩnh hay dấu phẩy động (nếu là số thực) => Không tĩnh không động
- ...
Lorem ipsum
Lorem ipsum
Lorem ipsum
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.