Isi kandungan:

Penala: 9 Langkah
Penala: 9 Langkah

Video: Penala: 9 Langkah

Video: Penala: 9 Langkah
Video: twenty one pilots: Stressed Out [OFFICIAL VIDEO] 2024, Julai
Anonim
Image
Image
Senarai Peralatan (ambil gambar Dewan dan Kevin's Comp)
Senarai Peralatan (ambil gambar Dewan dan Kevin's Comp)

Projek ini dirancang untuk membuat gitar tuner menggunakan Vivado dan paparan 7 segmen. Setelah penala menemui frekuensi bunyi yang dimasukkan, penala akan membandingkan nilai tersebut dengan senarai nilai keras untuk frekuensi tepat yang dikenali sebagai frekuensi standard untuk nada nada yang betul. Kemudian penala akan memaparkan seberapa dekat atau jauhnya suara yang anda masukkan dari nota yang anda inginkan. Apa yang menarik ialah gelombang bunyi adalah gabungan pelbagai bentuk gelombang sinusoidal dengan komponen nyata dan khayalan. Walaupun ini nampaknya sukar untuk ditangani oleh mereka yang tidak dikenali, ada beberapa cara yang kita masih dapat menganalisis gelombang dengan nilai nyata dan khayalan.

Demo:

Langkah 1: Senarai Peralatan (ambil Pic dari Dewan dan Kevin's Comp)

Mula-mula kita memerlukan papan Basys 3 dan komputer yang menyokong program berikut. Garageband / Audacity atau DAW lain - untuk merakam melalui mikrofon dan mengeksport wavfiles

Python - dapat menggunakan pylab dan scipy untuk pengambilan sampel dan fft

Vivado - untuk menyambung ke papan Basys 3 dan melihat hasilnya secara visual

Langkah 2: Gambaran keseluruhan

Gambaran keseluruhan
Gambaran keseluruhan

Penala terdiri daripada beberapa komponen penting: mikrofon, sampler, FFT (Fast Fourier Transform), pembanding, penyahkod dan paparan. Tujuan mikrofon adalah untuk menangkap bentuk gelombang input. Pensampel menerima isyarat output mikrofon dan menggunakan FFT untuk menukar isyarat menjadi output magnitud dalam frekuensi. Kemudian dengan menggunakan output FFT dan mencari magnitud maksimum dan frekuensi yang berkaitan dengannya dibahagi dengan 2, frekuensi yang berkaitan dengan nada gelombang dapat dijumpai. Nilai itu boleh masuk ke dalam pembanding. Ia kemudian dibandingkan dengan jadual pencarian, yang telah menetapkan nilai frekuensi untuk nada sempurna semua nota. Pembanding diberi input untuk nota yang diinginkan, yang kemudiannya dapat mencocokkan nota yang diinginkan dengan frekuensi yang betul dari jadual pencarian. Kemudian pembanding akan memilih nota dengan frekuensi terdekat dengan frekuensi maksimum. Pembanding akan membandingkan kedua-dua nilai dan melihat nilai frekuensi dekat dengan yang dikehendaki dan kemudian memasukkan data tersebut ke dalam isyarat. Pembanding akan menghantar isyarat itu ke penyahkod, di mana penyahkod akan memilih input untuk anod paparan 7 segmen untuk menunjukkan ketepatan nota.

Langkah 3: Fail Wav

Fail Wav
Fail Wav

Pada langkah ini, kita akan mengambil file wav dari nada dan berusaha mengeluarkan frekuensi nada itu.

Mula-mula anda memerlukan fail wav nota. Dalam contoh ini kita akan menggunakan fail wav stereo 16 bit dengan kadar persampelan 44.1kHz. Ini boleh dibuat dalam DAW seperti Garageband atau dimuat turun. Untuk contoh ini, gelombang sinus A4 440Hz yang dihasilkan oleh kami di Garageband boleh dimuat turun di sini.

Langkah 4: Python- Kegunaan Pylab dan Scipy

Python- Kegunaan Pylab dan Scipy
Python- Kegunaan Pylab dan Scipy

Kami menggunakan perpustakaan Python untuk melakukan "Transformasi Fourier Cepat". Sumber dalam talian membolehkan kita meniru dan melihat apa yang berguna dalam pylab dan scipy.

1. Sekiranya anda belum memasang pylab atau scipy, anda perlu melakukannya. Atau, Pycharm mempunyai ciri yang sangat baik, ketika cuba mengimpor pylab atau scipy, ada garis bawah yang bercerita yang memberitahu anda bahawa anda belum memasang perpustakaan. Anda kemudian boleh memasangnya secara langsung dengan menekan bola lampu merah (ia akan muncul semasa anda meletakkan kursor anda di dekat garis bawah yang licin).

2. Menggunakan fungsi scipy.io.wavfile.read, baca dan tarik data dari contoh fail wav. Jalankan data melalui pylab.fft, ia akan mengembalikan senarai besarnya kekuatan anda.

3. Kemudian cari maksimum kuasa yang dikeluarkan dari senarai. Cari indeks senarai di mana kuasa maksimum berlaku kerana cara yang lebih cepat untuk mencari frekuensi apa yang berkaitan dengan kuasa itu. Akhirnya pulangkan frekuensi maksimum. Oleh kerana kita kemudiannya perlu memasukkan isyarat frekuensi binari ke dalam kod VHDL, kita dapat menukar frekuensi dalam float menjadi binari, dan mengembalikannya.

Langkah 5: Python-Sampling dan FFT (Tunjukkan Kod dan Hasilnya)

Dalam langkah ini, kredit penuh pergi ke pautan ini di bawah untuk pensampelan dan FFT.

samcarcagno.altervista.org/blog/basic-sound… Kod Kami:

Setelah pylab dan scipy dipasang, fail wav dapat diimport dan dibaca.

dari pylab import * dari scipy.io import wavfile

sampFreq, snd = wavfile.read ('440_sine.wav')

Kemudian snd.shape mewakili titik sampel dan bilangan saluran. Dalam kes kami, titik sampel bergantung pada berapa lama wavfile dan # saluran adalah 2 kerana stereo.

Kemudian snd = snd / (2. ** 15) …… xlabel ('Time (ms)')

menyusun isyarat masa ke dalam tatasusunan.

Kemudian FFT membuat array dalam frekuensi dan besarnya (Kuasa)

Kemudian melalui sebentar gelung magnitud maksimum dan frekuensi yang berkaitan dengannya dijumpai. Frekuensi itu / 2 mewakili nada gelombang.

Kemudian menggunakan kod kita sendiri, bilangan bulat yang mewakili frekuensi ditukar menjadi nombor binari 12 bit dan fail teks dibuat dengan nombor di dalamnya.

Langkah 6: Vivado (Pembanding)

Vivado (Pembanding)
Vivado (Pembanding)

Di bahagian proses ini, kita memerlukan pembanding untuk membandingkan dua frekuensi input.

1. Membuat pembanding untuk membandingkan sama ada frekuensi input (penerima) lebih tinggi, lebih rendah atau dalam nota julat margin 2 Hz. (penala gitar khas berkisar antara e2 hingga g5, 82 Hz hingga 784 Hz).

2. Ketika membuat margin 2 Hz, kami menggunakan RCA untuk menambahkan "000000000010" ke frekuensi penerima, dan periksa di mana ia masih terlalu rendah untuk input pengguna. Sekiranya demikian, isyarat bit tunggal “tinggi” <= ‘0’, “rendah” <= ‘1’. Kemudian kami menambahkan "000000000010" ke input pengguna untuk melihat apakah input penerima lebih tinggi daripada itu. Sekiranya demikian, “tinggi” <= ‘1’, “rendah” <= ‘0’. Kedua-dua kes tidak akan mengembalikan ‘0’.

3. Oleh kerana bahagian modul seterusnya memerlukan data 4-bit khusus untuk memberitahu apa nota penerima, bukan hanya mengembalikan 2 output perbandingan (rendah dan tinggi), kita perlu mengembalikan kod bersekutu ke nota, yang dikaitkan dengan kekerapannya. Sila rujuk carta di bawah:

C | 0011

C # | 1011

D | 0100

D # | 1100

E | 0101

F | 0110

F # | 1110

G | 0111

G # | 1111

A | 0001

A # | 1001

B | 0010

Menggunakan beberapa pernyataan if untuk mengkategorikannya menjadi nota dan mengekodkannya kepada apa yang diperlukan untuk penyahkod tujuh segmen.

Langkah 7: GAMBAR DASAR 3 Papan

GAMBAR DASAR 3 Papan
GAMBAR DASAR 3 Papan

Langkah 8: Vivado (7 Segmen Decoder With Multiplexing)

Vivado (7 Segmen Decoder Dengan Multiplexing)
Vivado (7 Segmen Decoder Dengan Multiplexing)

Semuanya memerlukan paparan. Ini adalah faktor penting yang menentukan nilai reka bentuk. Oleh itu, kita perlu membuat paparan menggunakan penyahkod tujuh segmen, yang memungkinkan kita menunjukkan kemampuan kita untuk merancang penala pada Papan B. Juga, ini akan membantu kita dalam menguji dan melakukan debug.

Decoder tujuh segmen mengandungi input bernama Note, low, high, dan CLK, sambil mengeluarkan SSEG, AN, dan Fiz_Hz. Terdapat gambar rajah blok di atas untuk membantu kita memahami reka bentuknya.

Tujuan untuk mempunyai dua input rendah dan tinggi yang terpisah adalah untuk memberi kebebasan kepada pereka pembanding untuk memanipulasi sama ada frekuensi suara (gelombang) lebih tinggi atau lebih rendah daripada frekuensi input (Fix_Hz) yang ingin dibandingkan oleh pengguna. Di samping itu, output SSEG mewakili paparan tujuh segmen dan titik seterusnya sementara AN mewakili anod yang mana set tujuh segmen dipaparkan untuk menyala.

Dalam penyahkod tujuh segmen ini, jam (CLK) memainkan peranan penting dalam memaparkan dua nilai yang berbeza pada dua atau lebih anod yang berbeza. Oleh kerana Dewan tidak membenarkan kita menampilkan dua nilai yang berbeza pada waktu yang sama, kita harus menggunakan multiplexing untuk menampilkan nilai satu per satu, sementara beralih ke nilai lain cukup cepat sehingga mata kita tidak dapat menangkapnya. Di sinilah input CLK dimainkan.

Untuk maklumat lebih lanjut, sila rujuk kod sumber.

Langkah 9: Vivado (Menggabungkan Komponen)

Dengan setiap modul (penerima python, pembanding, penyahkod tujuh segmen, dll.) Selesai, kami kemudian mengumpulkan menggunakan modul yang lebih besar. Sama seperti gambar di bahagian "Over view" yang ditunjukkan, kami menghubungkan setiap isyarat dengan sewajarnya. Untuk rujukan, sila periksa kod sumber kami "SW_Hz.vhd".

Terima kasih. Semoga anda menikmati.

Disyorkan: