Mündəricat:
- Addım 1: Avadanlıq siyahısı
- Addım 2: Baxış
- Addım 3: Wav Fayl
- Addım 4: Python- Pylab və Scipy istifadələri
- Addım 5: Python-Sampling və FFT (Kodu və nəticələrini göstər)
- Addım 6: Vivado (Müqayisəçi)
- Addım 7: BASYS 3 lövhəsinin ŞƏKİLLƏRİ
- Addım 8: Vivado (Multiplexing ilə 7 Segment Dekoder)
- Addım 9: Vivado (Komponentləri birləşdirmək)
Video: Tuner: 9 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:48
Bu layihə Vivado və 7 seqmentli displeydən istifadə edərək gitara tuneri etmək üçün hazırlanmışdır. Tuner daxil edilən səsin tezliyini tapdıqdan sonra, tuner bu dəyəri bir notun düzgün səslənməsi üçün standart tezlik olaraq bilinən dəqiq tezliklər üçün sabit kodlu dəyərlər siyahısı ilə müqayisə edəcək. Sonra tuner, daxil etdiyiniz səsin istədiyiniz nota nə qədər yaxın və ya uzaq olduğunu göstərəcək. Maraqlısı odur ki, səs dalğası real və xəyali komponentlərlə çoxlu sinusoidal dalğa formalarının birləşməsidir. Tanış olmayanlara işləmək çətin görünsə də, real və xəyali dəyərləri olan bir dalğanı hələ də təhlil edə bilərik.
Demo:
Addım 1: Avadanlıq siyahısı
Əvvəlcə bir Basys 3 lövhəsinə və aşağıdakı proqramları dəstəkləyən bir kompüterə ehtiyacımız var.
Python - nümunə və fft üçün pylab və scipy istifadə edə bilir
Vivado - Basys 3 lövhəsinə qoşulmaq və nəticələrini əyani olaraq görmək
Addım 2: Baxış
Bir tuner bir neçə vacib komponentdən ibarətdir: mikrofon, nümunə götürmə cihazı, FFT (Fast Fourier Transform), müqayisə, dekoder və ekran. Mikrofonun məqsədi giriş dalğa formasını tutmaqdır. Nümunə götürən mikrofonun çıxış siqnalını alır və FFT -dən istifadə edərək siqnalı tezliklərin böyüklüyündə çıxışa çevirir. Sonra FFT çıxışını istifadə edərək və maksimum böyüklüyünü və onunla əlaqəli tezliyi 2 -yə bölməklə dalğa formasının pitch ilə əlaqəli tezliyi tapa bilərsiniz. Bu dəyər daha sonra müqayisə cihazına daxil ola bilər. Daha sonra bütün qeydlərin mükəmməl sahələri üçün tezlik dəyərlərini təyin etmiş bir axtarış cədvəli ilə müqayisə olunur. Müqayisəyə istədiyiniz qeyd üçün bir giriş verilir, sonra istədiyiniz notu axtarış cədvəlindən düzgün tezliyinə uyğunlaşdıra bilər. Sonra müqayisəçi maksimum tezliyə ən yaxın olan notu seçəcək. Müqayisəçi iki dəyəri müqayisə edəcək və tezliyin dəyərinin istədiyiniz dəyərə yaxın olduğunu görəcək və sonra bu məlumatları bir siqnala qoyacaq. Müqayisəçi bu siqnalı dekoderə göndərəcək, burada dekoder notun düzgünlüyünü göstərmək üçün 7 seqmentli ekranın anodları üçün girişləri seçəcək.
Addım 3: Wav Fayl
Bu addımda, bir meydançanın bir wav faylını alacağıq və bu tezliyin tezliyini çıxarmağa çalışacağıq.
Əvvəlcə bir notun wav sənədinə ehtiyacınız var. Bu nümunədə nümunə götürmə sürəti 44.1kHz olan 16 bitlik stereo wav faylından istifadə edəcəyik. Bu ya Garageband kimi bir DAW -da yaradıla bilər və ya endirilə bilər. Bu nümunə üçün, Garageband -da istehsal etdiyimiz A4 440Hz Sinüs dalğasını buradan yükləyə bilərsiniz.
Addım 4: Python- Pylab və Scipy istifadələri
"Fast Fourier çevrilməsi" üçün Python kitabxanasından istifadə etdik. Onlayn qaynaq təqlid etməyə və pylab və scipy -də nəyin faydalı olduğunu görməyə imkan verdi.
1. Pylab və ya scipy yükləməmisinizsə, bunu etməlisiniz. Ya da Pycharm -ın çox yaxşı bir xüsusiyyəti var, pylab və ya scipy idxal etməyə çalışdıqda, kitabxananı hələ quraşdırmadığınızı söyləyən çox incə bir xətt var. Daha sonra qırmızı ampulə basaraq onları birbaşa quraşdıra bilərsiniz (kursorunuzun altından xətt çəkildikdə görünəcək).
2. scipy.io.wavfile.read funksiyasından istifadə edərək nümunə wav faylından məlumatları oxuyun və çıxarın. Pylab.fft ilə məlumatları işlədin, güc üçün böyüklüyün siyahısını sizə qaytaracaq.
3. Sonra siyahıdan çıxarılan gücün maksimumunu tapın. Maksimum gücün meydana gəldiyi siyahı indeksini axtarın, çünki hansı gücün bu tezliklə əlaqəli olduğunu tapmağın daha sürətli yolu. Nəhayət, maksimum tezliyi qaytarın. Daha sonra VHDL koduna ikili tezlik siqnalı daxil etməli olduğumuz üçün, floatdakı tezliyi ikilikə çevirib geri qaytara bilərik.
Addım 5: Python-Sampling və FFT (Kodu və nəticələrini göstər)
Bu addımda, tam kreditlər nümunə götürmə və FFT üçün aşağıdakı linkə daxil olur.
samcarcagno.altervista.org/blog/basic-sound… Kodumuz:
Pylab və scipy quraşdırıldıqdan sonra wav faylları idxal oluna və oxuna bilər.
pylab idxalından*scipy.io -dan idxal wavfile
sampFreq, snd = wavfile.read ('440_sine.wav')
Sonra snd.shape nümunə nöqtələrini və kanal sayını təmsil edir. Bizim vəziyyətimizdə, nümunə nöqtələri wavfile -in nə qədər uzunluğundan asılıdır və kanalların sayı 2 -dir, çünki stereo.
Sonra snd = snd / (2.. ** 15) …… xlabel ('Zaman (ms)')
zaman siqnalını bir sıra halına gətirir.
Sonra FFT tezlik və böyüklükdə bir sıra yaradır (Güc)
Sonra bir müddət döngəsi ilə maksimum böyüklük və onunla əlaqəli tezlik tapılır.
Sonra öz kodumuzdan istifadə edərək, tezliyi təmsil edən tam ədəd 12 bitlik ikili rəqəmə çevrildi və bu rəqəmlə bir mətn faylı yaradıldı.
Addım 6: Vivado (Müqayisəçi)
Prosesin bu hissəsində iki giriş tezliyini müqayisə etmək üçün bir müqayisəçiyə ehtiyacımız var.
1. Giriş (qəbuledici) tezliyinin daha yüksək, aşağı və ya 2 Hz aralığında müəyyən edilmiş qeyd daxilində olub olmadığını müqayisə etmək üçün müqayisə aparatı yaradıldı. (tipik gitara alıcısı e2 - g5, 82 Hz - 784 Hz arasında dəyişir).
2. 2 Hz -lik bir marja yaratarkən, alıcı tezliyinə “000000000010” əlavə etmək və istifadəçi girişi üçün hələ də çox aşağı olduğunu yoxlamaq üçün RCA istifadə etdik. Əgər belədirsə, tək bit siqnalı “yüksək” <= ‘0’, “aşağı” <= ‘1’. Sonra qəbuledicinin ondan daha yüksək olub olmadığını görmək üçün istifadəçi girişinə "000000000010" əlavə edirik. Əgər belədirsə, “yüksək” <= ‘1’, “aşağı” <= ‘0’. Hər iki halda da "0" qaytarılmayacaq.
3. Modulun növbəti hissəsində qəbuledici qeydin nə olduğunu söyləmək üçün xüsusi 4 bitlik məlumatlara ehtiyac olduğu üçün, yalnız 2 müqayisəli çıxışı (aşağı və yüksək) geri qaytarmaqla deyil, əlaqələndirən kod ortağını qeydə qaytarmalıyıq. tezlik. Zəhmət olmasa aşağıdakı qrafikə baxın:
C | 0011
C# | 1011
D | 0100
D# | 1100
E | 0101
F | 0110
F# | 1110
G | 0111
G# | 1111
A | 0001
A# | 1001
B | 0010
Yeddi seqmentli dekoder üçün lazım olanları qeyd etmək və kodlaşdırmaq üçün bir neçə if ifadəsindən istifadə edin.
Addım 7: BASYS 3 lövhəsinin ŞƏKİLLƏRİ
Addım 8: Vivado (Multiplexing ilə 7 Segment Dekoder)
Hər şeyin ekrana ehtiyacı var. Bir dizaynın dəyərini təyin edən vacib bir amildir. Buna görə də, B lövhəsində tuner dizayn etmək qabiliyyətimizi nümayiş etdirməyə imkan verən yeddi seqmentli dekoderdən istifadə edərək bir ekran yaratmalıyıq. Ayrıca, test və ayıklama işlərində bizə kömək edərdi.
Yeddi seqmentli dekoder, SSEG, AN və Fiz_Hz çıxarkən, aşağı, yüksək və CLK adlı girişləri ehtiva edir. Dizaynı anlamağımıza kömək etmək üçün yuxarıdakı blok diaqramının bir şəkli var.
İki ayrı aşağı və yüksək girişə sahib olmaqdakı məqsəd, müqayisə cihazının dizaynerinə səsin (dalğa) tezliyinin istifadəçinin müqayisə etmək istədiyi giriş tezliyindən (Fix_Hz) daha yüksək və ya daha aşağı olub olmadığını manipulyasiya etmək azadlığı verməkdir. Əlavə olaraq, SSEG çıxışı yeddi seqmentin görüntüsünü və sonrakı nöqtəni, AN isə yeddi seqmentdən ibarət olan dəstənin işıqlandığı anodları təmsil edir.
Bu yeddi seqmentli dekoderdə, saat (CLK) iki və ya daha çox fərqli anodda iki fərqli dəyərin göstərilməsində əhəmiyyətli rol oynayır. İdarə Heyəti eyni anda iki fərqli dəyər göstərməyimizə icazə vermədiyindən, gözümüzün tuta bilməyəcəyi qədər sürətli bir şəkildə başqa bir dəyərə keçərkən, birdən -birə dəyər göstərmək üçün multipleksdən istifadə etməliyik. CLK girişinin işə düşdüyü yer budur.
Ətraflı məlumat üçün mənbə koduna müraciət edin.
Addım 9: Vivado (Komponentləri birləşdirmək)
Hər modul (python alıcı, müqayisə, yeddi seqment dekoder və s.) Tamamlandıqdan sonra daha böyük bir moduldan istifadə edərək bir araya gətirdik. Göstərilən "Overview" bölməsindəki şəkildəki kimi, hər bir siqnalı buna uyğun olaraq bağlayırıq. İstinad üçün "SW_Hz.vhd" mənbə kodumuzu yoxlayın.
Çox sağ ol. Ümid edirəm zövq alırsınız.
Tövsiyə:
Arduino Avtomobil Ters Park Diqqət Sistemi - Addım -addım: 4 addım
Arduino Avtomobil Ters Park Diqqət Sistemi | Addım-addım: Bu layihədə, Arduino UNO və HC-SR04 Ultrasonik Sensoru istifadə edərək sadə bir Arduino Car Reverse Park Sensor Dövrü dizayn edəcəyəm. Bu Arduino əsaslı Avtomobil Ters siqnal sistemi Avtonom Naviqasiya, Robot Aralığı və digər diapazonlarda istifadə edilə bilər
Arduino Uno ilə Akustik Levitasiya Addım-addım (8 addım): 8 addım
Arduino Uno ilə Akustik Levitasiya Adım Adım (8 addım): ultrasəs səs ötürücüləri L298N Dc dişi qadın adapteri kişi dc pinli Arduino UNOBreadboard Bu necə işləyir: Əvvəlcə Arduino Uno-ya kod yükləyirsiniz (rəqəmsal ilə təchiz edilmiş bir mikro nəzarətçidir) və kodu çevirmək üçün analog portlar (C ++)
Arduino Gitar Tuner: 3 addım
Arduino Guitar Tuner: Budur bir Arduino Uno ilə hazırladığım gitara tuneri və ətrafında yatdığım bəzi əşyalar. Bu kimi işləyir: Hər biri standart gitar tənzimləmə EADGBE -də fərqli bir not istehsal edəcək 5 düymə var. Cəmi 5 düyməm olduğundan kod yazdım
LabView və NI USB-6008 istifadə edərək Ukelele Tuner: 5 addım
LabView və NI USB-6008 istifadə edərək Ukelele Tuner: LabVIEW & amp üçün problemə əsaslanan öyrənmə layihəsi olaraq; Humber Kollecində (Elektronika Mühəndisliyi Texnologiyası) alətlər kursu, analoq girişi (ukulele simli ton) götürəcək, əsas tezliyi tapacaq bir ukulele tuner yaratdım
Vintage Radio Tuner Stringini düzəldin: 11 addım (şəkillərlə birlikdə)
Vintage Radio Tuner Stringini düzəlt: Vintaj radiolarında artıq çox gözəl dərslər var, amma xüsusi bir problemim var idi: radio açılır radionun səsi çıxır və səs düyməsi ilə daha yüksək səslənir, amma tənzimləmə düyməsini çevirmək iynəni və ya çanı tərpətmir