Mundarija:

Tyuner: 9 qadam
Tyuner: 9 qadam

Video: Tyuner: 9 qadam

Video: Tyuner: 9 qadam
Video: Caller Tune | Humshakals | Saif Ali Khan ,Tamannaah, Bipasha Basu, Riteish Deshmukh ,Neeraj Shridhar 2024, Iyul
Anonim
Image
Image
Uskunalar ro'yxati (boshqaruv kengashi va Kevinning kompozitsiyasini oling)
Uskunalar ro'yxati (boshqaruv kengashi va Kevinning kompozitsiyasini oling)

Ushbu loyiha Vivado va 7 segmentli displey yordamida gitara sozlagichini yaratish uchun mo'ljallangan. Tyuner kiritilgan tovush chastotasini topgach, tyuner bu qiymatni notaning to'g'ri balandligi uchun standart chastota sifatida ma'lum bo'lgan aniq chastotalar uchun qattiq kodlangan qiymatlar ro'yxati bilan solishtiradi. Keyin tyuner sizning kiritgan ovozingiz kerakli yozuvdan qanchalik yaqin yoki uzoq ekanligini ko'rsatadi. Qizig'i shundaki, tovush to'lqini - bu sinusoidal to'lqin shakllarining haqiqiy va xayoliy komponentlar bilan birikmasidir. Garchi notanishlarga bu bilan ishlash qiyin bo'lib tuyulsa -da, biz haqiqiy va xayoliy qadriyatlarga ega bo'lgan to'lqinni tahlil qilishning bir necha usullari mavjud.

Demo:

1 -qadam: Uskunalar ro'yxati (Kengashning rasmini va Kevinning kompozitsiyasini oling)

Birinchidan, bizga Basys 3 taxtasi va quyidagi dasturlarni qo'llab -quvvatlaydigan kompyuter kerak bo'ladi: Garageband/Audacity yoki boshqa DAW - mikrofon orqali yozib olish va wavf fayllarini eksport qilish.

Python - namuna olish va fft uchun pylab va scipy -dan foydalana oladi

Vivado - Basys 3 taxtasiga ulanish va natijalarni ingl

2 -qadam: umumiy nuqtai

Sharh
Sharh

Tyuner bir nechta muhim komponentlardan iborat: mikrofon, namuna oluvchi, FFT (Fast Fourier Transform), taqqoslagich, dekoder va displey. Mikrofonning maqsadi kirish to'lqin shaklini olishdir. Namuna oluvchi mikrofonning chiqish signalini oladi va FFT yordamida signalni chastotali kattalikdagi chiqishga aylantiradi. Keyin FFT chiqishidan foydalanib, maksimal kattalik va u bilan bog'liq chastotani 2 ga bo'linib, to'lqin shakli balandligi bilan bog'liq chastotani topish mumkin. Keyin bu qiymat taqqoslagichga o'tishi mumkin. Keyin u barcha yozuvlarning mukammal balandligi uchun chastota qiymatlarini allaqachon o'rnatilgan jadval bilan taqqoslanadi. Taqqoslagichga kerakli eslatmani kiritish imkoniyati beriladi, u kerakli yozuvni qidirish jadvalidan to'g'ri chastotaga mos kelishi mumkin. Keyin taqqoslovchi maksimal chastotaga eng yaqin chastotali eslatmani tanlaydi. Taqqoslovchi ikkita qiymatni taqqoslaydi va chastotaning kerakli qiymatga yaqinligini ko'radi va keyin bu ma'lumotni signalga o'tkazadi. Taqqoslovchi bu signalni dekoderga yuboradi, bu erda dekoder yozuvning to'g'riligini ko'rsatish uchun 7 segmentli displeyning anodlari uchun kirishni tanlaydi.

3 -qadam: Wav fayli

Wav fayl
Wav fayl

Bu bosqichda biz maydonning wav faylini olamiz va shu chastotani chiqarishga harakat qilamiz.

Birinchidan, sizga notaning wav fayli kerak. Ushbu misolda biz 44.1 kHz namuna olish tezligiga ega 16 bitli stereo wav faylini ishlatamiz. Buni DAW -da, masalan, Garageband -da yaratish yoki yuklab olish mumkin. Bu misol uchun, Garageband -da biz yaratgan A4 440Hz sinus to'lqinni bu erda yuklab olish mumkin.

4-qadam: Python- Pylab va Scipy-dan foydalanish

Python- Pylab va Scipy-dan foydalanish
Python- Pylab va Scipy-dan foydalanish

Biz "Fast Fourier konvertatsiyasi" uchun Python kutubxonasidan foydalandik. Internet -resurs bizga taqlid qilishga va pylab va skipyda nima foydali ekanligini ko'rishga imkon berdi.

1. Agar siz pylab yoki scipy -ni o'rnatmagan bo'lsangiz, buni qilishingiz kerak. Yoki Pycharm juda yaxshi xususiyatga ega, agar siz pylab yoki scipy -ni import qilishga urinib ko'rsangiz, siz kutubxonani hali o'rnatmaganligingizni ko'rsatib berasiz. Siz ularni qizil lampochkani bosib to'g'ridan-to'g'ri o'rnatishingiz mumkin (u kursorni pastki chiziq ostiga qo'yganingizda paydo bo'ladi).

2. scipy.io.wavfile.read funktsiyasidan foydalanib, namuna wav faylidan ma'lumotlarni o'qing va chiqarib oling. Ma'lumotlarni pylab.fft orqali ishga tushiring, u sizga kuch uchun kattalik ro'yxatini qaytaradi.

3. Keyin ro'yxatdan chiqarilgan maksimal quvvatni toping. Maksimal quvvat paydo bo'ladigan ro'yxat indeksini qidiring, chunki bu chastota bilan bog'liq bo'lgan chastotani topishning tezroq usuli. Nihoyat, maksimal chastotani qaytaring. Keyinchalik biz VHDL kodiga ikkilik chastotali signalni kiritishimiz kerak bo'lgani uchun, biz floatdagi chastotani ikkilikka aylantirishimiz va qaytarishimiz mumkin.

5-qadam: Python-Sampling va FFT (Kod va uning natijalarini ko'rsatish)

Bu bosqichda to'liq kreditlar namuna olish va FFT uchun quyidagi havolaga o'tadi.

samcarcagno.altervista.org/blog/basic-sound… Bizning kod:

Pylab va scipy o'rnatilgandan so'ng, wav fayllarini import qilish va o'qish mumkin.

pylab import*dan scipy.io import wavfile

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

Keyin snd.shape namuna nuqtalarini va kanallar sonini ifodalaydi. Bizning holatimizda, namuna nuqtalari wavfile qancha vaqtga bog'liq va kanallar soni 2 ga bog'liq, chunki u stereo.

Keyin snd = snd / (2. ** 15) …… xlabel ('Vaqt (ms)')

vaqt signalini massivga ajratadi.

Keyin FFT chastota va kattalikdagi massivni yaratadi (Quvvat)

Vaqt oralig'ida maksimal kattalik va u bilan bog'liq chastota topiladi, bu chastota/2 wavfile pitchini ifodalaydi.

Keyin o'z kodimiz yordamida chastotani ifodalovchi butun son 12 bitli ikkilik raqamga aylantirildi va shu raqam bilan matnli fayl yaratildi.

6 -qadam: Vivado (solishtiruvchi)

Vivado (solishtiruvchi)
Vivado (solishtiruvchi)

Jarayonning bu qismida bizga ikkita kirish chastotasini solishtirish uchun taqqoslagich kerak.

1. Kirish (qabul qiluvchi) chastotasi yuqori, pastroq yoki 2 Gts chegarali diapazonda aniqlangan eslatmani solishtirish uchun taqqoslagich yaratildi. (odatiy gitara tyuneri e2 dan g5 gacha, 82 Gts dan 784 Gts gacha).

2. 2 Gts chegarani yaratishda biz RCA yordamida qabul qilgich chastotasiga "000000000010" ni qo'shdik va foydalanuvchi kiritishi uchun u hali juda past bo'lgan joyni tekshirdik. Agar shunday bo'lsa, bitta bitli signal "yuqori" <= "0", "past" <= "1". Keyin biz "000000000010" ni kiritamiz va qabul qiluvchining kirishi bundan ham yuqori ekanligini tekshiramiz. Agar shunday bo'lsa, "yuqori" <= '1', "past" <= '0'. Ikkala holatda ham "0" qaytmaydi.

3. Modulning keyingi qismiga qabul qiluvchining eslatmasi nima ekanligini aytib berish uchun 4 bitli aniq ma'lumotlar kerak bo'lgani uchun, faqat 2 ta qiyosiy natijani (past va yuqori) qaytaribgina qolmay, biz kod bilan bog'langan sherikni qaydga qaytarishimiz kerak. chastota. Iltimos, quyidagi jadvalga qarang:

C | 0011

C# | 1011

D | 0100

D# | 1100

E | 0101

F | 0110

F# | 1110

G | 0111

G# | 1111

A | 0001

A# | 1001

B | 0010

Etti segmentli dekoder uchun kerak bo'ladigan narsalarni kodga kiritish va kodlash uchun bir nechta if iboralaridan foydalanish.

7 -qadam: BASYS 3 -rasmlari

BASYS RASMLARI 3 taxta
BASYS RASMLARI 3 taxta

8 -qadam: Vivado (Multipleksli 7 segmentli dekoder)

Vivado (Multipleksli 7 segmentli dekoder)
Vivado (Multipleksli 7 segmentli dekoder)

Hamma narsaga ekran kerak. Bu dizayn qiymatini belgilaydigan muhim omil. Shuning uchun, biz 7-segmentli dekoder yordamida displey yaratishimiz kerak, bu bizga B taxtasida tyunerni yaratish qobiliyatimizni namoyish etish imkonini beradi. Bundan tashqari, bu sinov va disk raskadrovka qilishda bizga yordam beradi.

Etti segmentli dekoder SSEG, AN va Fiz_Hz chiqishda Note, past, yuqori va CLK nomli kirishni o'z ichiga oladi. Dizaynni tushunishga yordam berish uchun yuqoridagi blok -diagrammaning rasmi bor.

Ikkita past va yuqori kirishning maqsadi - taqqoslagich dizayneriga ovoz (to'lqin) chastotasi foydalanuvchi solishtirmoqchi bo'lgan kirish chastotasidan (Fix_Hz) yuqori yoki pastroq bo'lishini boshqarish erkinligini ta'minlash. Bundan tashqari, SSEG chiqishi etti segmentning displeyini va keyingi nuqtani ko'rsatadi, AN esa etti segmentning to'plami yonib turadigan anodlarni ifodalaydi.

Etti segmentli dekoderda soat (CLK) ikki yoki undan ortiq turli anodlarda ikki xil qiymatni ko'rsatishda muhim rol o'ynaydi. Kengash bizga bir vaqtning o'zida ikki xil qiymatni ko'rsatishga ruxsat bermagani uchun, biz bir vaqtning o'zida qiymatni ko'rsatish uchun multiplekslashdan foydalanishimiz kerak, shu bilan birga boshqa qiymatga o'tishimiz kerakki, ko'zlarimiz uni ushlay olmaydi. Bu erda CLK usuli ishga tushadi.

Qo'shimcha ma'lumot olish uchun manba kodiga murojaat qiling.

9 -qadam: Vivado (komponentlarni birlashtirish)

Har bir modul (piton qabul qilgich, taqqoslagich, etti segmentli dekoder va boshqalar) tugallangach, biz kattaroq modul yordamida birlashtiramiz. Xuddi "Ko'rinish" bo'limidagi rasmda bo'lgani kabi, biz har bir signalni shunga mos ravishda ulaymiz. Malumot uchun "SW_Hz.vhd" manba kodimizni tekshiring.

Rahmat. Umid qilamanki, sizga yoqadi.

Tavsiya: