Სარჩევი:
- ნაბიჯი 1: აღჭურვილობის სია (გადაიღეთ დაფისა და კევინის კომპის სურათი)
- ნაბიჯი 2: მიმოხილვა
- ნაბიჯი 3: Wav ფაილი
- ნაბიჯი 4: პითონი- Pylab და Scipy გამოყენება
- ნაბიჯი 5: პითონის შერჩევა და FFT (აჩვენეთ კოდი და მისი შედეგები)
- ნაბიჯი 6: Vivado (შედარება)
- ნაბიჯი 7: BASYS 3 სურათები დაფა
- ნაბიჯი 8: Vivado (7 სეგმენტის დეკოდირება მულტიპლექსით)
- ნაბიჯი 9: Vivado (კომპონენტების გაერთიანება)
ვიდეო: ტიუნერი: 9 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:20
ეს პროექტი შეიქმნა გიტარის ტიუნერის შესაქმნელად 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 ფაილი. ამ მაგალითში ჩვენ გამოვიყენებთ 16 ბიტიან სტერეო wav ფაილს შერჩევის სიჩქარით 44.1 კჰც. ეს შეიძლება შეიქმნას DAW– ში, როგორიცაა Garageband ან გადმოწერილი. ამ მაგალითისთვის, Garageband– ზე ჩვენს მიერ წარმოქმნილი A4 440Hz სინუსური ტალღა შეგიძლიათ გადმოწეროთ აქ.
ნაბიჯი 4: პითონი- 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 (შედარება)
პროცესის ამ ნაწილში ჩვენ გვჭირდება შედარება, რომ შევადაროთ ორი შეყვანის სიხშირე.
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 სურათები დაფა
ნაბიჯი 8: Vivado (7 სეგმენტის დეკოდირება მულტიპლექსით)
ყველაფერს სჭირდება ჩვენება. ეს არის მნიშვნელოვანი ფაქტორი, რომელიც განსაზღვრავს დიზაინის ღირებულებას. ამიტომ, ჩვენ უნდა შევქმნათ ეკრანი შვიდი სეგმენტის დეკოდერის გამოყენებით, რაც საშუალებას მოგვცემს გამოვავლინოთ B დაფაზე ტიუნერის დიზაინის ჩვენი უნარი. ასევე, ეს დაგვეხმარება ტესტირებასა და გამართვაში.
შვიდი სეგმენტის დეკოდირება შეიცავს შეყვანას სახელწოდებით Note, დაბალი, მაღალი და CLK, ხოლო SSEG, AN და Fiz_Hz გამოყვანისას. ზემოთ არის ბლოკ დიაგრამის სურათი, რომელიც დაგვეხმარება დიზაინის გაგებაში.
ორი განსხვავებული დაბალი და მაღალი შეყვანის მიზანია უზრუნველყოს შემფასებლის დიზაინერი მანიპულირების თავისუფლებით, ხმის (ტალღის) სიხშირე უფრო მაღალია თუ დაბალი ვიდრე შეყვანის სიხშირეზე (Fix_Hz), რომლის შედარებაც მომხმარებელს სურს. გარდა ამისა, გამომავალი SSEG წარმოადგენს შვიდი სეგმენტის ჩვენებას და წერტილი მომდევნო, ხოლო AN წარმოადგენს ანოდებს, რომლისთვისაც შვიდი სეგმენტის კომპლექტი ნათდება.
ამ შვიდ სეგმენტიანი დეკოდერში, საათი (CLK) მნიშვნელოვან როლს ასრულებს ორი ან მეტი განსხვავებული ანოდის ორი განსხვავებული მნიშვნელობის ჩვენებაში. ვინაიდან დაფა არ გვაძლევს ერთდროულად ორი განსხვავებული მნიშვნელობის ჩვენების საშუალებას, ჩვენ უნდა გამოვიყენოთ მულტიპლექსირება მნიშვნელობის საჩვენებლად ერთდროულად, ხოლო სხვა მნიშვნელობაზე სწრაფად გადავიყვანოთ ისე, რომ ჩვენი თვალები მას ვერ იპყრობს. ეს არის ის, სადაც CLK შეყვანა ძალაში შედის.
დამატებითი ინფორმაციისათვის მიმართეთ წყაროს კოდს.
ნაბიჯი 9: Vivado (კომპონენტების გაერთიანება)
ყველა მოდულის (პითონის მიმღები, შედარებითი, შვიდი სეგმენტის დეკოდირების და ა.შ.) დასრულების შემდეგ, ჩვენ ერთად ვათავსებთ უფრო დიდი მოდულის გამოყენებით. ისევე, როგორც ნაჩვენებია სურათზე "ხედიდან", ჩვენ თითოეულ სიგნალს შესაბამისად ვუკავშირდებით. ცნობისთვის, გთხოვთ, შეამოწმოთ ჩვენი საწყისი კოდი "SW_Hz.vhd".
Გმადლობთ. იმედია ისიამოვნებთ.
გირჩევთ:
როგორ გააკეთოთ არდუინოს გიტარის ტიუნერი: 4 ნაბიჯი
როგორ გააკეთოთ არდუინოს გიტარის ტიუნერი: ეს არის ინსტრუქცია არტუინოსგან და რამდენიმე სხვა კომპონენტისგან გიტარის ტიუნერის შესაქმნელად. ელექტრონიკისა და კოდირების საბაზისო ცოდნით თქვენ შეძლებთ გიტარის ტიუნერის დამზადებას. უპირველეს ყოვლისა, თქვენ უნდა იცოდეთ რა მასალებია. დედა
ნახევარი ნაბიჯი: 5 ნაბიჯი (სურათებით)
სემინარი: IntroduçãoNeste projeto, você construirá um an sistema de semáforos: არსებობს 3 LED ნათურები სხვადასხვა ბირთვით (verde, amarelo e vermelho) para imitar os semáforos dos carros; არსებობს 2 LED ნათურები სხვადასხვა ბირთვით (verde და vermelho) იმისთვის, რომ გააკეთოთ
Arduino Uno თევზის მიმწოდებელი 6 იაფი და მარტივი ნაბიჯი!: 6 ნაბიჯი
Arduino Uno თევზის მიმწოდებელი 6 იაფი და მარტივი ნაბიჯი! შინაური ცხოველების მქონე ადამიანებს, ალბათ, იგივე პრობლემა ჰქონდათ, როგორც მე: შვებულება და დავიწყება. მე მუდმივად მავიწყდებოდა ჩემი თევზის გამოკვება და ყოველთვის ვცდილობდი ასე გამეკეთებინა სანამ ის წავიდოდა
არდუინოს გიტარის ტიუნერი: 3 ნაბიჯი
Arduino Guitar Tuner: აქ არის გიტარის ტიუნერი, რომელიც მე გავაკეთე Arduino Uno– სთან ერთად და რაღაცეები, რაც მე გარშემო მქონდა. ის ასე მუშაობს: თითოეული არის 5 ღილაკი, რომლებიც წარმოქმნიან განსხვავებულ ნოტს სტანდარტული გიტარის პარამეტრებში EADGBE. ვინაიდან მე მხოლოდ 5 ღილაკი მქონდა, კოდი ისე დავწერე
Ukelele ტიუნერი LabView და NI USB-6008 გამოყენებით: 5 ნაბიჯი
Ukelele Tuner გამოყენებით LabView და NI USB-6008: როგორც პრობლემაზე დაფუძნებული სწავლების პროექტი ჩემი LabVIEW & ინსტრუმენტული კურსი ჰამბერის კოლეჯში (ელექტრონიკის საინჟინრო ტექნოლოგია), მე შევქმენი უკულეს ტიუნერი, რომელიც მიიღებს ანალოგიურ შეყვანას (უკულელის სიმებიანი ტონი), იპოვის ფუნდამენტურ სიხშირეს