İçindekiler:
- Adım 1: Ekipman Listesi (Yönetim Kurulunun ve Kevin's Comp'in bir resmini çekin)
- 2. Adım: Genel Bakış
- Adım 3: Wav Dosyası
- Adım 4: Python- Pylab ve Scipy'nin Kullanımları
- Adım 5: Python-Örnekleme ve FFT (Kodu ve Sonuçlarını Göster)
- Adım 6: Vivado (Karşılaştırıcı)
- Adım 7: BASYS 3 Board RESİMLERİ
- Adım 8: Vivado (Çoğullamalı 7 Segment Dekoder)
- Adım 9: Vivado (Bileşenleri Birleştirme)
Video: Ayarlayıcı: 9 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:21
Bu proje, Vivado ve 7 segmentli bir ekran kullanarak bir gitar tuner yapmak için tasarlandı. Tuner girilen sesin frekansını bulduğunda, tuner bu değeri, bir notanın doğru perdesi için standart frekans olarak bilinen kesin frekanslar için sabit kodlanmış değerler listesiyle karşılaştıracaktır. Ardından tuner, girdiğiniz sesin istediğiniz notaya ne kadar yakın veya uzak olduğunu gösterecektir. İlginç olan, bir ses dalgasının, gerçek ve hayali bileşenlerle çoklu sinüzoidal dalga biçimlerinin bir kombinasyonu olmasıdır. Tanıdık olmayanlar için bununla çalışmak zor görünse de, bir dalgayı gerçek ve hayali değerlerle analiz etmenin birkaç yolu vardır.
Demo:
Adım 1: Ekipman Listesi (Yönetim Kurulunun ve Kevin's Comp'in bir resmini çekin)
Öncelikle bir Basys 3 kartına ve aşağıdaki programları destekleyen bir bilgisayara ihtiyacımız var. Garageband/Audacity veya başka bir DAW - mikrofon aracılığıyla kayıt yapmak ve wav dosyalarını dışa aktarmak için
Python - örnekleme ve fft için pylab ve scipy kullanabilir
Vivado - Basys 3 kartına bağlanmak ve sonuçları görsel olarak görmek için
2. Adım: Genel Bakış
Bir tuner birkaç önemli bileşenden oluşur: mikrofon, örnekleyici, FFT (Hızlı Fourier Dönüşümü), karşılaştırıcı, kod çözücü ve ekran. Mikrofonun amacı, giriş dalga biçimini yakalamaktır. Örnekleyici mikrofonun çıkış sinyalini alır ve sinyali frekanslarda büyüklük çıkışına dönüştürmek için FFT'yi kullanır. Daha sonra FFT'nin çıktısını kullanarak ve maksimum büyüklüğü ve bununla ilişkili frekansı 2'ye bölerek bularak, dalga formunun perdesiyle ilişkili frekans bulunabilir. Bu değer daha sonra karşılaştırıcıya girebilir. Daha sonra, tüm notaların mükemmel perdeleri için önceden ayarlanmış frekans değerlerine sahip bir arama tablosuyla karşılaştırılır. Karşılaştırıcıya, istenen nota için bir girdi verilir, bu daha sonra istenen notu arama tablosundan doğru frekansıyla eşleştirebilir. Ardından karşılaştırıcı, maksimum frekansa en yakın frekansa sahip notu seçecektir. Karşılaştırıcı iki değeri karşılaştıracak ve frekansın değerinin istenen değere yakın olduğunu görecek ve ardından bu verileri bir sinyale koyacaktır. Karşılaştırıcı, bu sinyali kod çözücüye gönderecektir; burada kod çözücü, notun doğruluğunu göstermek için 7 segmentli ekranın anotları için girişleri seçecektir.
Adım 3: Wav Dosyası
Bu adımda, bir perdenin wav dosyasını alıp o perdenin frekansını çıkarmaya çalışacağız.
İlk önce bir notun wav dosyasına ihtiyacınız var. Bu örnekte, 44.1kHz örnekleme hızına sahip 16 bitlik bir stereo wav dosyası kullanacağız. Bu, Garageband gibi bir DAW'da oluşturulabilir veya indirilebilir. Bu örnek için Garageband'da tarafımızca oluşturulan bir A4 440Hz Sinüs dalgası buradan indirilebilir.
Adım 4: Python- Pylab ve Scipy'nin Kullanımları
“Hızlı Fourier dönüşümü” yapmak için Python kütüphanesini kullandık. Çevrimiçi kaynak, pylab ve scipy'de neyin yararlı olduğunu taklit etmemize ve görmemize izin verdi.
1. pylab veya scipy yüklemediyseniz, yüklemeniz gerekir. Veya Pycharm'ın çok iyi bir özelliği var, pylab veya scipy içe aktarmayı denediğinizde, kütüphaneyi henüz yüklemediğinizi söyleyen dalgalı bir altı çizili var. Daha sonra bunları doğrudan kırmızı ampule basarak kurabilirsiniz (imlecinizi dalgalı alt çizginin yanına getirdiğinizde görünecektir).
2. scipy.io.wavfile.read işlevini kullanarak, örnek wav dosyasındaki verileri okuyun ve çıkarın. Verileri pylab.fft ile çalıştırın, size güç için bir büyüklük listesi verecektir.
3. Ardından listeden yayılan gücün maksimum değerini bulun. Maksimum gücün oluştuğu liste dizinini arayın, çünkü bu güçle hangi frekansın ilişkili olduğunu bulmanın daha hızlı yolu. Son olarak maksimum frekansı döndürün. Daha sonra VHDL koduna bir ikili frekans sinyali girmemiz gerektiğinden, float'taki frekansı ikiliye çevirebilir ve geri döndürebiliriz.
Adım 5: Python-Örnekleme ve FFT (Kodu ve Sonuçlarını Göster)
Bu adımda, örnekleme ve FFT için tam kredi aşağıdaki bağlantıya gidin.
samcarcagno.altervista.org/blog/basic-sound…Kodumuz:
Pylab ve scipy yüklendikten sonra wav dosyaları içe aktarılabilir ve okunabilir.
pylab'dan import* scipy.io'dan import wavfile
sampFreq, snd = wavfile.read('440_sine.wav')
Ardından snd.shape, örnek noktaları ve kanal sayısını temsil eder. Bizim durumumuzda, örnek noktalar wavfile'ın ne kadar uzun olduğuna bağlıdır ve stereo olduğu için kanal sayısı 2'dir.
Sonra snd = snd / (2.**15)…… xlabel('Zaman (ms)')
zaman sinyalini bir dizi halinde düzenler.
Ardından FFT, frekans ve büyüklükte bir dizi oluşturur (Güç)
Daha sonra bir süre döngüsü boyunca maksimum büyüklük ve onunla ilişkili frekans bulunur. Bu frekans/2, wav dosyasının perdesini temsil eder.
Daha sonra kendi kodumuz kullanılarak frekansı temsil eden tam sayı 12 bitlik bir ikili sayıya dönüştürülmüş ve bu sayının içinde olduğu bir metin dosyası oluşturulmuştur.
Adım 6: Vivado (Karşılaştırıcı)
Sürecin bu bölümünde, iki giriş frekansını karşılaştırmak için bir karşılaştırıcıya ihtiyacımız var.
1. Giriş (alıcı) frekansının daha yüksek, daha düşük veya 2 Hz marj aralığı tanımlı not dahilinde olup olmadığını karşılaştırmak için bir karşılaştırıcı oluşturuldu. (tipik gitar tuneri e2 ila g5, 82 Hz ila 784 Hz arasındadır).
2. 2 Hz'lik bir marj oluştururken, alıcı frekansına “000000000010” eklemek için bir RCA kullandık ve kullanıcı girişi için hala çok düşük olduğu yeri kontrol ettik. Bu durumda, tek bit sinyali "yüksek" <= '0', "düşük" <= '1'. Daha sonra kullanıcı girişine “000000000010” ekliyoruz, alıcı girişinin bundan daha yüksek olup olmadığına bakın. Bu durumda, “yüksek” <= '1', “düşük” <= '0'. Her iki durum da '0' döndürmez.
3. Modülün bir sonraki parçası, alıcı notasının ne olduğunu söylemek için belirli bir 4 bitlik veriye ihtiyaç duyduğundan, yalnızca 2 karşılaştırmalı çıktıyı (düşük ve yüksek) döndürmekle kalmaz, aynı zamanda kod ilişkilendirmesini nota döndürmemiz gerekir. frekans. Lütfen aşağıdaki tabloya bakın:
C | 0011
C# | 1011
D | 0100
D# | 1100
E | 0101
F | 0110
F# | 1110
G | 0111
G# | 1111
bir | 0001
Bir# | 1001
B | 0010
Nota kategorize etmek ve yedi segmentli kod çözücü için gerekli olana kodlamak için birkaç if ifadesi kullanmak.
Adım 7: BASYS 3 Board RESİMLERİ
Adım 8: Vivado (Çoğullamalı 7 Segment Dekoder)
Her şeyin bir ekrana ihtiyacı var. Bir tasarımın değerini belirleyen önemli bir faktördür. Bu nedenle, B Kartında bir tuner tasarlama yeteneğimizi göstermemize izin verecek yedi segmentli kod çözücü kullanarak bir ekran oluşturmamız gerekiyor. Ayrıca, test etme ve hata ayıklama konusunda bize yardımcı olacaktır.
Yedi segmentli bir kod çözücü, SSEG, AN ve Fiz_Hz çıkışı verirken Note, low, high ve CLK adlı girişleri içerir. Tasarımı anlamamıza yardımcı olmak için yukarıda bir blok diyagram resmi var.
İki ayrı düşük ve yüksek girişe sahip olmanın amacı, karşılaştırıcının tasarımcısına, ses (dalga) frekansının, kullanıcının karşılaştırmak istediği giriş frekansından (Fix_Hz) daha yüksek veya daha düşük olup olmadığını değiştirme özgürlüğü sağlamaktır. Ek olarak, SSEG çıkışı yedi segmentli ekranı ve sonraki noktayı temsil ederken AN, yedi segmentten oluşan setin yanacağı anotları temsil eder.
Bu yedi segmentli kod çözücüde saat (CLK), iki veya daha fazla farklı anotta iki farklı değerin görüntülenmesinde önemli bir rol oynar. Board aynı anda iki farklı değeri göstermemize izin vermediğinden, bir değeri birer birer görüntülemek için çoğullama kullanmak zorunda kalırken, gözümüzün yakalayamayacağı kadar hızlı bir şekilde başka bir değere geçmek zorundayız. CLK girişinin devreye girdiği yer burasıdır.
Daha fazla bilgi için lütfen kaynak koduna bakın.
Adım 9: Vivado (Bileşenleri Birleştirme)
Her modül (python alıcısı, karşılaştırıcı, yedi segmentli kod çözücü vb.) tamamlandıktan sonra daha büyük bir modül kullanarak bir araya getirdik. Gösterilen "Genel görünüm" bölümünün altındaki resimde olduğu gibi, her sinyali buna göre bağlarız. Referans için lütfen "SW_Hz.vhd" kaynak kodumuzu kontrol edin.
Teşekkürler. Beğeneceğinizi umuyoruz.
Önerilen:
Akıllı Motosiklet HUD Prototipi (adım adım Navigasyon ve Çok Daha Fazlası): 9 Adım
Akıllı Motosiklet HUD Prototipi (adım adım Navigasyon ve Çok Daha Fazlası): Merhaba !Bu Talimatlar, motosiklet kasklarına monte edilmek üzere tasarlanmış bir HUD (Heads-Up Display) platformunu nasıl tasarladığımın ve inşa ettiğimin hikayesidir. "Haritalar" yarışması bağlamında yazılmıştır. Maalesef tamamen bitiremedim
Arduino Araba Geri Geri Park Uyarı Sistemi - Adım Adım: 4 Adım
Arduino Araba Geri Geri Park Uyarı Sistemi | Adım Adım: Bu projede Arduino UNO ve HC-SR04 Ultrasonik Sensör kullanarak basit bir Arduino Araba Geri Park Sensörü Devresi tasarlayacağım. Bu Arduino tabanlı Araba Ters uyarı sistemi, Otonom Navigasyon, Robot Mesafesi ve diğer menzil r
Adım Adım PC Oluşturma: 9 Adım
Adım Adım Bilgisayar Oluşturma: Sarf Malzemeleri: Donanım: AnakartCPU & CPU soğutucusuPSU (Güç kaynağı ünitesi)Depolama (HDD/SSD)RAMGPU (gerekli değil)CaseTools: TornavidaESD bilezik/aplikatörlü matstermal macun
Üç Hoparlör Devresi -- Adım Adım Eğitim: 3 Adım
Üç Hoparlör Devresi || Adım Adım Eğitim: Hoparlör Devresi, ortamdan alınan ses sinyallerini MIC'e güçlendirir ve bunu, güçlendirilmiş sesin üretildiği Hoparlöre gönderir. Burada, size bu Hoparlör Devresini kullanarak bu Hoparlör Devresini yapmanın üç farklı yolunu göstereceğim:
Adım Adım Arduino Uno ile Akustik Kaldırma (8 adım): 8 Adım
Arduino Uno ile Akustik Kaldırma Adım Adım (8 adım): ultrasonik ses dönüştürücüler L298N erkek dc pinli Dc dişi adaptör güç kaynağı Arduino UNOBreadboardBu nasıl çalışır: İlk olarak, Arduino Uno'ya kod yüklersiniz (dijital ile donatılmış bir mikrodenetleyicidir) ve kodu dönüştürmek için analog bağlantı noktaları (C++)