Სარჩევი:

ტიუნერი: 9 ნაბიჯი
ტიუნერი: 9 ნაბიჯი

ვიდეო: ტიუნერი: 9 ნაბიჯი

ვიდეო: ტიუნერი: 9 ნაბიჯი
ვიდეო: ტიფლისი I სზეონი 1, სერია 2 2024, ნოემბერი
Anonim
Image
Image
აღჭურვილობის სია (გადაიღეთ დაფისა და კევინის კომპის სურათი)
აღჭურვილობის სია (გადაიღეთ დაფისა და კევინის კომპის სურათი)

ეს პროექტი შეიქმნა გიტარის ტიუნერის შესაქმნელად Vivado- ს და 7 სეგმენტიანი დისპლეის გამოყენებით. მას შემდეგ, რაც ტიუნერი აღმოაჩენს შეყვანილი ხმის სიხშირეს, ტიუნერი შეადარებს ამ მნიშვნელობას მყარი კოდირებული მნიშვნელობების სიას ზუსტი სიხშირეებისთვის, რომლებიც ცნობილია როგორც სტანდარტული სიხშირე შენიშვნის სწორი სიმაღლისთვის. შემდეგ ტიუნერი აჩვენებს რამდენად ახლოს ან შორს არის თქვენი შეყვანილი ხმა სასურველი ნოტიდან. საინტერესოა ის, რომ ბგერითი ტალღა არის სინუსოიდური ტალღების მრავალგვარი კომბინაცია რეალურ და წარმოსახვით კომპონენტებთან. მიუხედავად იმისა, რომ ეს შეიძლება რთულად ჩანდეს უცნობებისთვის, არსებობს რამდენიმე გზა, რომლითაც ჩვენ შეგვიძლია გავაანალიზოთ ტალღა რეალური და წარმოსახვითი ღირებულებებით.

დემო:

ნაბიჯი 1: აღჭურვილობის სია (გადაიღეთ დაფისა და კევინის კომპის სურათი)

პირველ რიგში ჩვენ გვჭირდება Basys 3 დაფა და კომპიუტერი, რომელიც მხარს უჭერს შემდეგ პროგრამებს. Garageband/Audacity ან სხვა DAW - მიკროფონის ჩაწერა და wavfiles ექსპორტი

პითონი - შეუძლია გამოიყენოს pylab და scipy შერჩევისთვის და fft

Vivado - დაკავშირება Basys 3 დაფაზე და ვიზუალურად დაინახავთ შედეგებს

ნაბიჯი 2: მიმოხილვა

მიმოხილვა
მიმოხილვა

ტიუნერი შედგება რამდენიმე მნიშვნელოვანი კომპონენტისგან: მიკროფონი, სინჯერი, FFT (სწრაფი ფურიეს ტრანსფორმაცია), შედარება, დეკოდი და დისპლეი. მიკროფონის დანიშნულებაა შეყვანის ტალღის ფორმის დაჭერა. ამომრჩევი იღებს მიკროფონის გამომავალ სიგნალს და იყენებს FFT- ს, რომ სიგნალი გარდაქმნას სიდიდეების სიდიდის გამომუშავებად. შემდეგ გამოვიყენოთ FFT და გამოვიყენოთ მაქსიმალური სიდიდე და მასთან დაკავშირებული სიხშირე გაყოფილი 2 -ზე, სიხშირე, რომელიც დაკავშირებულია ტალღის ფორმასთან. ეს მნიშვნელობა შეიძლება შემდგომში შევიდეს შედარებაში. მას შემდეგ ადარებენ საძიებო ცხრილს, რომელმაც უკვე დაადგინა სიხშირის მნიშვნელობები ყველა ჩანაწერის სრულყოფილ მოედანზე. შემდარებელს ეძლევა შენიშვნა სასურველი ნოტისთვის, რომელიც მას შემდეგ შეუსაბამებს სასურველ ჩანაწერს მის სწორ სიხშირეზე მოსაძიებელი ცხრილიდან. შემდეგ შედარება აირჩევს ნოტს მაქსიმალურ სიხშირეზე უახლოესი სიხშირით. შედარება შეადარებს ორ მნიშვნელობას და დაინახავს, რომ სიხშირის სიდიდე არის სასურველთან და შემდეგ ეს მონაცემები სიგნალში მოაქვს. შედარება გაუგზავნის ამ სიგნალს დეკოდერს, სადაც დეკოდირებელი ირჩევს 7 სეგმენტიანი ეკრანის ანოდების შეყვანას შენიშვნის სიზუსტის საჩვენებლად.

ნაბიჯი 3: Wav ფაილი

Wav ფაილი
Wav ფაილი

ამ ეტაპზე, ჩვენ ვიღებთ მოედანზე wav ფაილს და შევეცდებით გამოვთვალოთ ამ სიმაღლის სიხშირე.

პირველ რიგში გჭირდებათ შენიშვნის wav ფაილი. ამ მაგალითში ჩვენ გამოვიყენებთ 16 ბიტიან სტერეო wav ფაილს შერჩევის სიჩქარით 44.1 კჰც. ეს შეიძლება შეიქმნას DAW– ში, როგორიცაა Garageband ან გადმოწერილი. ამ მაგალითისთვის, Garageband– ზე ჩვენს მიერ წარმოქმნილი A4 440Hz სინუსური ტალღა შეგიძლიათ გადმოწეროთ აქ.

ნაბიჯი 4: პითონი- Pylab და Scipy გამოყენება

პითონი- Pylab და Scipy– ის გამოყენება
პითონი- Pylab და Scipy– ის გამოყენება

ჩვენ გამოვიყენეთ პითონის ბიბლიოთეკა "სწრაფი ფურიეს ტრანსფორმაციის" გასაკეთებლად. ონლაინ რესურსმა მოგვცა საშუალება მივბაძოთ და ვნახოთ რა არის სასარგებლო pylab და scipy.

1. თუ თქვენ არ გაქვთ დაინსტალირებული pylab ან scipy, ეს უნდა გააკეთოთ. ან, Pycharm– ს აქვს ძალიან კარგი თვისება, როდესაც pylab– ის ან scipy– ს შემოტანა სცადეთ, არის მკვეთრი ხაზი, რომელიც გეუბნებათ, რომ ბიბლიოთეკა ჯერ არ გაქვთ დაინსტალირებული. ამის შემდეგ შეგიძლიათ დააინსტალიროთ ისინი პირდაპირ წითელ ნათურაზე დაჭერით (ის გამოჩნდება, როდესაც კურსორს მჭიდროდ ხაზგარეშე ხაზს მიუახლოვებთ).

2. scipy.io.wavfile.read ფუნქციის გამოყენებით წაიკითხეთ და ამოიღეთ მონაცემები ნიმუში wav ფაილიდან. გაუშვით მონაცემები pylab.fft– ის საშუალებით, ის დაგიბრუნებთ სიდიდის სიდიდის სიგანეს.

3. შემდეგ იპოვნეთ სიიდან გამოსული სიმძლავრის მაქსიმუმი. მოძებნეთ სიის ინდექსი, სადაც ხდება მაქსიმალური სიმძლავრე, რადგან უფრო სწრაფი გზა იპოვოთ რა სიხშირე ასოცირდება ამ ენერგიასთან. საბოლოოდ დააბრუნეთ მაქსიმალური სიხშირე. ვინაიდან ჩვენ მოგვიანებით გვჭირდება ორობითი სიხშირის სიგნალის შეყვანა VHDL კოდში, ჩვენ შეგვიძლია float– ში სიხშირე გადავიყვანოთ ორობაში და დავუბრუნოთ იგი.

ნაბიჯი 5: პითონის შერჩევა და FFT (აჩვენეთ კოდი და მისი შედეგები)

ამ საფეხურზე, სრული კრედიტები გადადის ქვემოთ მოცემულ ბმულზე შერჩევისა და FFT– ისთვის.

samcarcagno.altervista.org/blog/basic-sound… ჩვენი კოდი:

მას შემდეგ, რაც pylab და scipy დაინსტალირდება, wav ფაილების იმპორტირება და წაკითხვა შესაძლებელია.

pylab იმპორტიდან scipy.io იმპორტი wavfile

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

შემდეგ snd.shape წარმოადგენს ნიმუშის წერტილებს და არხების რაოდენობას. ჩვენს შემთხვევაში, ნიმუშის რაოდენობა დამოკიდებულია იმაზე, თუ რამდენ ხანს არის wavfile და არხების # არის 2, რადგან ის სტერეოა.

შემდეგ snd = snd / (2. ** 15) …… xlabel ('დრო (ms)')

ორგანიზებას უწევს დროის სიგნალს მასივში.

შემდეგ FFT ქმნის მასივს სიხშირისა და სიდიდის (სიმძლავრე)

შემდეგ მარყუჟის მეშვეობით აღმოჩენილია მაქსიმალური სიდიდე და მასთან დაკავშირებული სიხშირე. ეს სიხშირე/2 წარმოადგენს wavfile– ის სიმაღლეს.

შემდეგ ჩვენივე კოდის გამოყენებით, სიხშირის ამსახველი მთელი რიცხვი გარდაიქმნა 12 ბიტიან ორობითი რიცხვით და შეიქმნა ტექსტური ფაილი მასში მითითებული რიცხვით.

ნაბიჯი 6: Vivado (შედარება)

Vivado (შედარება)
Vivado (შედარება)

პროცესის ამ ნაწილში ჩვენ გვჭირდება შედარება, რომ შევადაროთ ორი შეყვანის სიხშირე.

1. შეიქმნა შედარება შედარებისთვის, შეყვანის (მიმღების) სიხშირე უფრო მაღალია, დაბალია თუ 2 ჰც მარჟის დიაპაზონში განსაზღვრული შენიშვნა. (ტიპიური გიტარის ტიუნერი მერყეობს e2- დან g5– მდე, 82 Hz– დან 784 Hz– მდე).

2. 2 ჰც -ის ზღვრის შექმნისას, ჩვენ გამოვიყენეთ RCA, რომ მიმღების სიხშირეზე დავამატოთ „000000000010“და შევამოწმოთ, თუ სად არის ის ჯერ კიდევ ძალიან დაბალი მომხმარებლის შეყვანისთვის. თუ ასეა, ერთი ბიტიანი სიგნალი "მაღალი" <= "0", "დაბალი" <= "1". შემდეგ ჩვენ ვამატებთ "000000000010" მომხმარებლის შეყვანას, ვნახოთ, არის თუ არა მიმღების შეყვანა ამაზე მაღალი. თუ ეს ასეა, "მაღალი" <= "1", "დაბალი" <= "0". ორივე საქმე არ დააბრუნებს "0" -ს.

3. ვინაიდან მოდულის მომდევნო ნაწილს სჭირდება კონკრეტული 4 ბიტიანი მონაცემები იმის დასადგენად, თუ რა არის მიმღების შენიშვნა, არა მხოლოდ 2 შედარებითი გამოსვლის დაბრუნება (დაბალი და მაღალი), ჩვენ უნდა დავუბრუნოთ კოდის ასოცირებული შენიშვნა, რომელიც ასოცირდება სიხშირე. გთხოვთ გაეცნოთ ქვემოთ მოცემულ დიაგრამას:

C | 0011

C# | 1011 წ

დ | 0100

D# | 1100

E | 0101

F | 0110

F# | 1110

გ | 0111

G# | 1111 წ

A | 0001

A# | 1001

ბ | 0010

რამოდენიმე if განცხადების გამოყენება მათი ნოტიფიკაციისთვის და კოდირებისათვის, რაც საჭიროა შვიდი სეგმენტის დეკოდერისთვის.

ნაბიჯი 7: BASYS 3 სურათები დაფა

BASYS- ის სურათები 3 დაფა
BASYS- ის სურათები 3 დაფა

ნაბიჯი 8: Vivado (7 სეგმენტის დეკოდირება მულტიპლექსით)

Vivado (7 სეგმენტის დეკოდირება მულტიპლექსით)
Vivado (7 სეგმენტის დეკოდირება მულტიპლექსით)

ყველაფერს სჭირდება ჩვენება. ეს არის მნიშვნელოვანი ფაქტორი, რომელიც განსაზღვრავს დიზაინის ღირებულებას. ამიტომ, ჩვენ უნდა შევქმნათ ეკრანი შვიდი სეგმენტის დეკოდერის გამოყენებით, რაც საშუალებას მოგვცემს გამოვავლინოთ B დაფაზე ტიუნერის დიზაინის ჩვენი უნარი. ასევე, ეს დაგვეხმარება ტესტირებასა და გამართვაში.

შვიდი სეგმენტის დეკოდირება შეიცავს შეყვანას სახელწოდებით Note, დაბალი, მაღალი და CLK, ხოლო SSEG, AN და Fiz_Hz გამოყვანისას. ზემოთ არის ბლოკ დიაგრამის სურათი, რომელიც დაგვეხმარება დიზაინის გაგებაში.

ორი განსხვავებული დაბალი და მაღალი შეყვანის მიზანია უზრუნველყოს შემფასებლის დიზაინერი მანიპულირების თავისუფლებით, ხმის (ტალღის) სიხშირე უფრო მაღალია თუ დაბალი ვიდრე შეყვანის სიხშირეზე (Fix_Hz), რომლის შედარებაც მომხმარებელს სურს. გარდა ამისა, გამომავალი SSEG წარმოადგენს შვიდი სეგმენტის ჩვენებას და წერტილი მომდევნო, ხოლო AN წარმოადგენს ანოდებს, რომლისთვისაც შვიდი სეგმენტის კომპლექტი ნათდება.

ამ შვიდ სეგმენტიანი დეკოდერში, საათი (CLK) მნიშვნელოვან როლს ასრულებს ორი ან მეტი განსხვავებული ანოდის ორი განსხვავებული მნიშვნელობის ჩვენებაში. ვინაიდან დაფა არ გვაძლევს ერთდროულად ორი განსხვავებული მნიშვნელობის ჩვენების საშუალებას, ჩვენ უნდა გამოვიყენოთ მულტიპლექსირება მნიშვნელობის საჩვენებლად ერთდროულად, ხოლო სხვა მნიშვნელობაზე სწრაფად გადავიყვანოთ ისე, რომ ჩვენი თვალები მას ვერ იპყრობს. ეს არის ის, სადაც CLK შეყვანა ძალაში შედის.

დამატებითი ინფორმაციისათვის მიმართეთ წყაროს კოდს.

ნაბიჯი 9: Vivado (კომპონენტების გაერთიანება)

ყველა მოდულის (პითონის მიმღები, შედარებითი, შვიდი სეგმენტის დეკოდირების და ა.შ.) დასრულების შემდეგ, ჩვენ ერთად ვათავსებთ უფრო დიდი მოდულის გამოყენებით. ისევე, როგორც ნაჩვენებია სურათზე "ხედიდან", ჩვენ თითოეულ სიგნალს შესაბამისად ვუკავშირდებით. ცნობისთვის, გთხოვთ, შეამოწმოთ ჩვენი საწყისი კოდი "SW_Hz.vhd".

Გმადლობთ. იმედია ისიამოვნებთ.

გირჩევთ: