İçindekiler:

Ayarlayıcı: 9 Adım
Ayarlayıcı: 9 Adım

Video: Ayarlayıcı: 9 Adım

Video: Ayarlayıcı: 9 Adım
Video: Apple Watch Series 9 inceleme! - 14.999 TL'ye değer mi? 2024, Temmuz
Anonim
Image
Image
Ekipman Listesi (Yönetim Kurulu ve Kevin's Comp'un bir resmini çekin)
Ekipman Listesi (Yönetim Kurulu ve Kevin's Comp'un bir resmini çekin)

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

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

Wav Dosyası
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ı

Python- Pylab ve Scipy'nin Kullanımları
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ı)

Vivado (Karşılaştırıcı)
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İ

BASYS 3 Board RESİMLERİ
BASYS 3 Board RESİMLERİ

Adım 8: Vivado (Çoğullamalı 7 Segment Dekoder)

Vivado (Çoğullamalı 7 Segment Dekoder)
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: