Mündəricat:

Tuner: 9 addım
Tuner: 9 addım

Video: Tuner: 9 addım

Video: Tuner: 9 addım
Video: Настройка спутникового тв: азербайджанские каналы, турецкие каналы azerspace yeni kanallar 2024, Iyul
Anonim
Image
Image
Avadanlıqların siyahısı (İdarə Heyətinin şəklini və Kevin Kompasını çəkin)
Avadanlıqların siyahısı (İdarə Heyətinin şəklini və Kevin Kompasını çəkin)

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ış

Baxış
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

Wav Fayl
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

Python- Pylab və Scipy istifadələri
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)

Vivado (Müqayisəçi)
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İ

BASYS -in ŞƏKİLLƏRİ 3 Board
BASYS -in ŞƏKİLLƏRİ 3 Board

Addım 8: Vivado (Multiplexing ilə 7 Segment Dekoder)

Vivado (Multiplexing ilə 7 Segment Dekoder)
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ə: