Агуулгын хүснэгт:

Atmega1284: 9 алхамыг ашиглан 1024 дээжийн FFT спектрийн анализатор
Atmega1284: 9 алхамыг ашиглан 1024 дээжийн FFT спектрийн анализатор

Видео: Atmega1284: 9 алхамыг ашиглан 1024 дээжийн FFT спектрийн анализатор

Видео: Atmega1284: 9 алхамыг ашиглан 1024 дээжийн FFT спектрийн анализатор
Видео: Double Your Stable Diffusion Inference Speed with RTX Acceleration TensorRT: A Comprehensive Guide 2024, Долдугаар сарын
Anonim
Atmega1284 ашиглан 1024 дээж FFT спектрийн анализатор
Atmega1284 ашиглан 1024 дээж FFT спектрийн анализатор
Atmega1284 ашиглан 1024 дээж FFT спектрийн анализатор
Atmega1284 ашиглан 1024 дээж FFT спектрийн анализатор

Энэхүү харьцангуй хялбар заавар (энэ сэдвийн нарийн төвөгтэй байдлыг харгалзан үзсэний үндсэн дээр) Arduino төрлийн самбар (1284 нарийн) болон цуваа плоттер ашиглан 1024 дээжийн спектрийн анализаторыг хэрхэн яаж хийхийг танд харуулах болно. Arduino -тэй нийцтэй бүх төрлийн самбар хийх болно, гэхдээ RAM -ийн хэмжээ их байх тусам давтамжийн нарийвчлалыг олж авах болно. FFT -ийг 1024 дээжээр тооцоолохын тулд 8 КБ -аас их RAM шаардлагатай болно.

Спектрийн шинжилгээг дохионы үндсэн давтамжийн бүрэлдэхүүн хэсгүүдийг тодорхойлоход ашигладаг. Олон дуу чимээ (хөгжмийн зэмсэгээр бүтээгдсэн дуу гэх мэт) нь үндсэн давтамжийн бүхэл тооны олон тооны давтамжтай үндсэн давтамж, зарим гармоникоос бүрддэг. Спектрийн анализатор нь эдгээр бүх спектрийн бүрэлдэхүүн хэсгүүдийг харуулах болно.

Та энэ тохиргоог давтамжийн тоолуур болгон ашиглах эсвэл таны цахилгаан хэлхээнд ямар нэгэн чимээ гаргадаг гэж сэжиглэж буй дохиог шалгахыг хүсч болно.

Энд бид програм хангамжийн хэсэгт анхаарлаа хандуулах болно. Хэрэв та тодорхой програмын байнгын хэлхээ хийхийг хүсч байвал дохиог олшруулж, шүүх шаардлагатай болно. Энэхүү урьдчилсан тохируулга нь түүний далайц, эсэргүүцэл, хамгийн их давтамж гэх мэт байдлаас хамааран судлахыг хүсч буй дохионоос бүрэн хамаардаг. Та https://www.instructables.com/id/Analog-Sensor-Sig… шалгаж болно.

Алхам 1: Номын санг суулгах

Бид Enrique Condes -ийн бичсэн ArduinoFFT номын санг ашиглах болно. Бид RAM -ийг аль болох их нөөцлөхийг хүсч байгаа тул түүвэрлэсэн болон тооцоолсон өгөгдлийг хадгалахын тулд хөвөх өгөгдлийн төрлийг (давхар биш) ашиглах боломжийг олгодог энэхүү репозиторын хөгжүүлэлтийн салбарыг ашиглах болно. Тиймээс бид үүнийг гараар суулгах ёстой. Санаа зоволтгүй, архивыг татаж аваад Arduino номын сангийн фолдер дээрээ задлаарай (жишээ нь Windows 10 -ийн анхдагч тохиргоон дээр: C: / Хэрэглэгчид / хэрэглэгчийн_ нэр_ / Баримт бичиг / Arduino / номын сан)

Та "FFT_01.ino" гэх мэт өгсөн жишээнүүдийн аль нэгийг эмхэтгэн номын санг зөв суулгасан эсэхийг шалгаж болно.

Алхам 2: Фурье хувиргалт ба FFT -ийн ойлголтууд

Анхааруулга: Хэрэв та ямар нэгэн математик тэмдэглэлийг харахгүй байгаа бол 3 -р алхам руу орохыг хүсч магадгүй, гэхдээ хэрэв та бүгдийг нь аваагүй бол хэсгийн төгсгөлд байгаа дүгнэлтийг анхаарч үзээрэй.

Давтамжийн спектрийг Fast Fourier Transform алгоритмаар олж авдаг. FFT бол Фурье хувиргалтын математик ойлголтыг ойролцоогоор илэрхийлсэн дижитал хэрэгжилт юм. Энэхүү үзэл баримтлалын дагуу та цагийн тэнхлэгийг дагаж дохионы хувьслыг олж авсны дараа түүний цогц (бодит + төсөөлөлтэй) утгуудаас бүрдэх давтамжийн домэйны дүрслэлийг мэдэх боломжтой. Энэхүү ойлголт нь харилцан хамааралтай тул та давтамжийн домэйны дүрслэлийг мэдэж байхдаа үүнийг цагийн домэйнд буцааж хувиргаж, хувиргалтын өмнөх шиг дохиог буцааж авах боломжтой.

Гэхдээ цаг хугацааны домэйны тооцоолсон цогц утгуудын багцыг бид юу хийх гэж байна вэ? Яахав ихэнхийг нь инженерүүдэд үлдээх болно. Бидний хувьд бид эдгээр нарийн төвөгтэй утгуудыг спектрийн нягтралын өгөгдөл болгон хувиргах өөр нэг алгоритмыг дуудах болно. Давтамжийн зурвасын тоо нь дээжийн тоотой ижил байх болно.

Та эквалайзерын үзэл баримтлалыг 1980 -аад онд буцаж ирсэн график EQ -тэй адил мэддэг байх нь дамжиггүй. За, бид ижил төрлийн үр дүнд хүрэх болно, гэхдээ 16 биш 1024 хамтлаг, илүү нарийвчлалтай нягтралтай. Эквалайзер нь хөгжмийн талаар дэлхийн өнцгөөс харах боломжийг олгодог бол нарийн спектрийн шинжилгээ нь 1024 хамтлаг бүрийн эрчмийг нарийн тооцоолох боломжийг олгодог.

Төгс ойлголт, гэхдээ:

  1. FFT нь Фурье хувиргалтын дижитал хувилбар тул дижитал дохиог ойролцоо болгож, зарим мэдээллийг алддаг. Тиймээс хатуу хэлэхэд, FFT -ийн үр дүнг урвуу FFT алгоритмаар буцааж өөрчилсөн тохиолдолд анхны дохиог өгөхгүй болно.
  2. Түүнчлэн онол нь төгсгөлгүй биш, харин мөнхийн дохио гэж үздэг. Бид үүнийг зөвхөн тодорхой хугацаанд (жишээ нь дээж) дижитал хэлбэрт шилжүүлэх тул зарим алдааг оруулах болно.
  3. Эцэст нь аналогийг тоон руу хөрвүүлэх нь тооцоолсон утгын чанарт нөлөөлнө.

Практикт

1) Дээж авах давтамж (тэмдэглэгдсэн fs)

Бид 1/fs секунд тутамд дохионы дээж авах болно, өөрөөр хэлбэл түүний далайцыг хэмжих болно. fs бол дээж авах давтамж юм. Жишээлбэл, хэрэв бид 8 кГц давтамж дээр дээж авбал чип дээрх ADC (дижитал хөрвүүлэгч) нь 1/8000 секунд тутамд хэмжилт хийх болно.

2) Дээжийн тоо (кодонд N буюу дээжийг тэмдэглэсэн)

Бид FFT -ийг ажиллуулахаас өмнө бүх утгыг авах ёстой тул тэдгээрийг хадгалах ёстой бөгөөд ингэснээр бид дээжийн тоог хязгаарлах болно. FFT алгоритм нь 2 -ийн хүчин чадалтай хэд хэдэн дээж авах шаардлагатай. Бидэнд илүү их дээж байх тусам илүү сайн боловч санах ой маш их шаардагддаг тул бид өөрчилсөн өгөгдлийг хадгалах шаардлагатай болно. Arduino FFT номын сан нь зарим орон зайг хэмнэдэг

  • "VReal" нэртэй нэг массив нь дээжлэгдсэн өгөгдлийг хадгалах бөгөөд дараа нь хувиргасан өгөгдлийн бодит хэсгийг хадгалах болно
  • Хувиргасан өгөгдлийн төсөөллийн хэсгийг хадгалах "vImag" нэртэй нэг массив

Шаардлагатай RAM хэмжээ нь 2 (массив) * 32 (бит) * N (дээж) -тэй тэнцэнэ.

16 KB RAM -тэй Atmega1284 дээр бид хамгийн ихдээ N = 16000*8/64 = 2000 утгыг хадгалах болно. Утга тоо 2 байх ёстой тул бид хамгийн ихдээ 1024 утгыг хадгалах болно.

3) Давтамжийн нарийвчлал

FFT нь дээжийн тооны давтамжийн зурвасын утгыг тооцоолох болно. Эдгээр зурвасууд нь 0 Гц -ээс дээж авах давтамж (fs) хүртэл үргэлжилнэ. Тиймээс давтамжийн нарийвчлал нь:

Fresolution = fs / N

Бага байх үед нарийвчлал нь илүү дээр юм. Тиймээс илүү сайн нарийвчлалтай болгохын тулд бид дараахь зүйлийг хүсч байна.

  • илүү олон дээж ба/эсвэл
  • бага fs

Гэхдээ…

4) Хамгийн бага fs

Бид маш олон давтамжийг харахыг хүсч байгаа тул тэдгээрийн зарим нь "үндсэн давтамж" -аас хамаагүй өндөр байгаа тул бид fs -ийг хэтэрхий бага болгож чадахгүй. Үнэндээ Nyquist -Shannon дээж авах теорем байдаг бөгөөд энэ нь биднийг сорьц авах давтамжийг туршихыг хүссэн дээд давтамжаасаа хоёр дахин илүү байхыг шаарддаг.

Жишээлбэл, хэрэв бид 0 Гц -ээс эхлэн 15 КГц хүртэлх бүх спектрийг шинжлэхийг хүсч байгаа бол энэ нь ихэнх хүмүүсийн сонсдог хамгийн дээд давтамж юм. Үнэн хэрэгтээ цахилгаанчид үүнийг ихэвчлэн 2.5 (эсвэл бүр 2.52) * хамгийн их давтамжаар тогтоодог. Энэ жишээнд энэ нь 2.5 * 15 КГц = 37.5 КГц байх болно. Мэргэжлийн аудионы ердийн дээж авах давтамж нь 44.1 КГц (аудио CD бичлэг), 48 КГц ба түүнээс дээш.

Дүгнэлт:

1 -ээс 4 хүртэлх цэгүүд нь: бид аль болох олон дээж ашиглахыг хүсч байна. Манай тохиолдолд 16 КБ хэмжээтэй RAM төхөөрөмжтэй бол бид 1024 дээжийг авч үзэх болно. Бид дохиогоороо хүлээж буй хамгийн өндөр давтамжид дүн шинжилгээ хийхэд хангалттай өндөр байвал (хамгийн багадаа 2.5 * энэ давтамжтай) дээж авах боломжтой хамгийн бага давтамжтайгаар дээж авахыг хүсч байна.

Алхам 3: Сигналын загварчлал

Дохиог дуурайж байна
Дохиог дуурайж байна

Анхны оролдлогыг хийхийн тулд бид номын санд өгсөн TFT_01.ino жишээг бага зэрэг өөрчилж дохиог шинжлэх болно.

  • Үндсэн давтамж, 440 Гц (хөгжмийн А)
  • 3-р гармоник нь үндсэн чадлын тэн хагас ("-3 дБ")
  • Үндсэн хүчийн 1/4 дэх 5 дахь гармоник ("-6 дБ)

Үр дүнгийн дохиог дээрх зурган дээрээс харж болно. Энэ нь синусоидаль дохионы хайчилбар байгаа тохиолдолд осциллограф дээр (би үүнийг "Батман" гэж нэрлэх болно) харж болох бодит дохио шиг харагдаж байна.

Алхам 4: Зохиомол дохионы дүн шинжилгээ - Кодлох

0) Номын санг оруулах

#"arduinoFFT.h" -ийг оруулна уу

1) Тодорхойлолт

Тунхаглалын хэсэгт бидэнд байна

const байт adcPin = 0; // А0

const uint16_t дээж = 1024; // Энэ утга нь үргэлж 2 const uint16_t samplelingFrequency = 8000 байх ёстой. // timer_setup () SYSCLOCK/8/sampleling дэх таймерын хамгийн их утгад нөлөөлөх Давтамж нь бүхэл тоо байх ёстой

Дохио нь 5 -р гармониктай тул (энэхүү гармоник давтамж = 5 * 440 = 2200 Гц) бид дээж авах давтамжийг 2.5 * 2200 = 5500 Гц -ээс дээш тохируулах хэрэгтэй. Энд би 8000 Гц -ийг сонгосон.

Бид мөн түүхий болон тооцоолсон өгөгдлийг хадгалах массивуудыг зарлаж байна

float vReal [дээж];

float vImag [дээжүүд];

2) Шуурхай байдал

Бид ArduinoFFT объект үүсгэдэг. ArduinoFFT -ийн dev хувилбар нь загварыг ашигладаг тул бид float эсвэл давхар өгөгдлийн төрлийг ашиглаж болно. Float (32 бит) нь манай програмын ерөнхий нарийвчлалын хувьд хангалттай юм.

ArduinoFFT FFT = ArduinoFFT (vReal, vImag, дээж, түүвэрлэх давтамж);

3) ADC утгуудаар дүүргэхийн оронд vReal массивыг бөглөх замаар дохиог дуурайх.

Loop -ийн эхэнд бид vReal массивыг дараах байдлаар дүүргэдэг.

хөвөх мөчлөг = (((дээжүүд) * дохионы давтамж) / түүвэрлэх давтамж); // Дээжийг унших дохионы мөчлөгийн тоо

for (uint16_t i = 0; i <sample; i ++) {vReal = float ((далайц * (sin ((i * (TWO_PI * цикл)) / дээж))))); / * Эерэг ба сөрөг утгууд */ vReal += float ((далайц * (нүгэл ((3 * i * (TWO_PI * цикл))/ дээж)))/ 2.0);/ * Эерэг ба сөрөг утгатай өгөгдлийг бий болгох */ vReal += float ((далайц * (sin ((5 * i * (TWO_PI * цикл)) / дээж))) / 4.0); / * Эерэг ба сөрөг утгатай өгөгдөл үүсгэх * / vImag = 0.0; // Буруу тооцоолол, халихаас зайлсхийхийн тулд гогцоо хийх тохиолдолд төсөөллийн хэсгийг тэглэх ёстой}

Бид үндсэн долгион ба далайц багатай хоёр гармоникийг дижитал хэлбэрт оруулах болно. Бид төсөөллийн массивыг тэгээр эхлүүлдэг. Энэ массивыг FFT алгоритмаар дүүргэсэн тул бид шинэ тооцоолол бүрийн өмнө дахин цэвэрлэх хэрэгтэй.

4) FFT тооцоолол

Дараа нь бид FFT ба спектрийн нягтыг тооцоолно

FFT.windowing (FFTWindow:: Hamming, FFTDirection:: Forward);

FFT.compute (FFTDirection:: Forward); / * FFT тооцоолох */ FFT.complexToMagnitude (); / * Томъёог тооцоолох */

FFT.windowing (…) үйлдэл нь хязгаарлагдмал тооны дээж дээр FFT ажиллуулдаг тул түүхий өгөгдлийг өөрчилдөг. Эхний болон сүүлчийн дээжүүд тасалдалтай байдаг (тэдний нэг талд "юу ч байхгүй"). Энэ бол алдааны эх үүсвэр юм. "Цонхжуулах" ажиллагаа нь энэ алдааг багасгах хандлагатай байна.

"Forward" чиглэлтэй FFT.compute (…) нь цаг хугацааны домайнаас давтамжийн домэйн руу шилжихийг тооцоолно.

Дараа нь бид давтамжийн зурвас тус бүрийн хэмжээг (өөрөөр хэлбэл эрч хүч) тооцоолно. VReal массивыг одоо магнитудын утгуудаар дүүргэв.

5) Цуваа плоттер зураг

PrintVector функцийг дуудаж цуваа плоттер дээрх утгыг хэвлэцгээе (…)

PrintVector (vReal, (дээж >> 1), SCL_FREQUENCY);

Энэ бол өгөгдлийг цагийн тэнхлэг эсвэл давтамжийн тэнхлэгээр хэвлэх боломжийг олгодог ерөнхий функц юм.

Бид мөн хамгийн их утга бүхий хамтлагийн давтамжийг хэвлэдэг

float x = FFT.majorPeak ();

Serial.print ("f0 ="); Цуваа.хэвлэх (x, 6); Serial.println ("Гц");

Алхам 5: Зохиомол дохионы дүн шинжилгээ - Үр дүн

Зохиомол дохионы дүн шинжилгээ - Үр дүн
Зохиомол дохионы дүн шинжилгээ - Үр дүн

Хүлээгдэж буй дагуу f0 магнитудын хагас ба 1/4 -тэй, үндсэн давтамж (f0), 3 ба 5 -р гармониктай тохирох 3 хошуу харагдаж байна. Бид цонхны дээд хэсэгт уншиж болно f0 = 440.430114 Гц. Дээр дурдсан бүх шалтгааны улмаас энэ утга яг 440 Гц биш, гэхдээ энэ нь бодит утгатай маш ойрхон байна. Үнэхээр өчүүхэн өчүүхэн аравтын бутархай тоог харуулах шаардлагагүй байсан.

Алхам 6: Бодит дохионы дүн шинжилгээ - ADC -ийг холбох

Бодит дохионы дүн шинжилгээ - ADC -ийг холбох
Бодит дохионы дүн шинжилгээ - ADC -ийг холбох

Бид онолын хувьд хэрхэн яаж явахаа мэддэг тул бодит дохиог шинжлэхийг хүсч байна.

Цахилгааны утас нь маш энгийн. 1 KOhm -аас 10 KOhm хүртэлх утгатай цуваа резистороор дамжуулан газардуулгыг болон дохионы шугамыг самбарын A0 зүү рүү холбоно уу.

Энэхүү цуврал резистор нь аналог оролтыг хамгаалж, дуугарахаас зайлсхийх болно. Энэ нь дуугарахаас зайлсхийхийн тулд аль болох өндөр байх ёстой бөгөөд ADC -ийг хурдан цэнэглэх хангалттай гүйдлийг хангах ёстой. ADC оролт дээр холбогдсон дохионы хүлээгдэж буй эсэргүүцлийг мэдэхийн тулд MCU мэдээллийн хүснэгтийг үзнэ үү.

Энэхүү демо дээр би 440 Гц давтамжтай, 5 вольтын далайцтай синусоид дохиог тэжээх функц генераторыг ашигласан (хэрэв далайц нь 3-5 вольтын хооронд байвал ADC -ийг бүрэн хэмжээгээр ашиглахад тохиромжтой), 1.2 КОм эсэргүүцэл дамжуулагчаар.

Алхам 7: Бодит дохионы дүн шинжилгээ - Кодлох

0) Номын санг оруулах

#"arduinoFFT.h" -ийг оруулна уу

1) Тунхаглал ба эхлэл

Тунхаглалын хэсэгт бид өмнөх жишээн дээрх шиг ADC оролт (A0), дээжийн тоо, түүвэрлэх давтамжийг тодорхойлдог.

const байт adcPin = 0; // А0

const uint16_t дээж = 1024; // Энэ утга нь үргэлж 2 const uint16_t samplelingFrequency = 8000 байх ёстой. // timer_setup () SYSCLOCK/8/sampleling дэх таймерын хамгийн их утгад нөлөөлөх Давтамж нь бүхэл тоо байх ёстой

Бид ArduinoFFT объектыг бий болгодог

ArduinoFFT FFT = ArduinoFFT (vReal, vImag, дээж, түүвэрлэх давтамж);

2) Таймер ба ADC -ийн тохиргоо

Бид таймер 1 -ийг тохируулсан тул түүврийн давтамж (8 КГц) дээр эргэлдэж, гаралтын харьцуулалтыг тасалдуулдаг.

хүчингүй timer_setup () {

// Таймер 1 -ийг дахин тохируулах TCCR1A = 0; TCCR1B = 0; TCNT1 = 0; TCCR1B = бит (CS11) | бит (WGM12); // CTC, урьдчилсан тооцоолуур 8 TIMSK1 = бит (OCIE1B); OCR1A = ((16000000 /8) / түүвэрлэх давтамж) -1; }

ADC -ийг ийм байдлаар тохируулаарай

  • A0 -ийг оролт болгон ашигладаг
  • Таймер бүрт 1 гаралтыг харьцуулах тохиргоог автоматаар идэвхжүүлдэг
  • Хөрвүүлэлт дууссаны дараа тасалдал үүсгэдэг

ADC цагийг 1 МГц -т тохируулж, системийн цагийг (16 МГц) 16 -аар урьдчилан тохируулснаар хөрвүүлэлт бүр ойролцоогоор 13 цагийг бүрэн хэмжээгээр хийдэг тул хөрвүүлэлтийг 1/13 = 0.076 МГц = 76 КГц давтамжтайгаар хийх боломжтой. ADC нь өгөгдлийг түүвэрлэх цаг гаргахын тулд дээж авах давтамж нь 76 KHz -ээс хамаагүй бага байх ёстой. (бид fs = 8 KHz -ийг сонгосон).

хүчингүй adc_setup () {

ADCSRA = бит (ADEN) | бит (ADIE) | бит (ADIF); // ADC -ийг асаах, дуусгахад ADCSRA тасрахыг хүсч байна | = бит (ADPS2); // 16 ADMUX -ийн урьдчилсан тооцоолуур = бит (REFS0) | (adcPin & 7); // ADC оролтыг тохируулах ADCSRB = бит (ADTS0) | бит (ADTS2); // Таймер/Тоолуур1 Match B гох эх үүсвэрийг харьцуулах ADCSRA | = бит (ADATE); // автоматаар асаахыг асаах}

Бид хөрвүүлсэн өгөгдлийг vReal массивт хадгалах, тасалдлыг арилгахын тулд ADC хөрвүүлэлт бүрийн дараа дуудагдах тасалдлын зохицуулагчийг зарлаж байна.

// ADC бүрэн ISR

ISR (ADC_vect) {vReal [resultNumber ++] = ADC; if (resultNumber == дээж) {ADCSRA = 0; // ADC -г унтраах}} EMPTY_INTERRUPT (TIMER1_COMPB_vect);

Та Arduino (analogRead) дээр ADC хөрвүүлэх талаар дэлгэрэнгүй тайлбар авах боломжтой.

3) Тохиргоо

Тохиргооны функц дээр бид төсөөллийн өгөгдлийн хүснэгтийг арилгаж, таймер болон ADC тохируулгын функцуудыг дууддаг

тэг I (); // бүх төсөөллийн өгөгдлийг 0 болгож тохируулсан функцийг өмнөх хэсэгт тайлбарласан болно

timer_setup (); adc_setup ();

3) Гогцоо

FFT.dcRemoval (); // ADC -ийг газардуулсан тул энэ дохионы DC бүрэлдэхүүн хэсгийг устгана уу

FFT.windowing (FFTWindow:: Hamming, FFTDirection:: Forward); // Өгөгдлийг жинлэх FFT.compute (FFTDirection:: Forward); // тооцоолох FFT FFT.complexToMagnitude (); // Тоо хэмжээг тооцоолох // спектр ба үндсэн давтамжийг хэвлэх f0 PrintVector (vReal, (дээж >> 1), SCL_FREQUENCY); float x = FFT.majorPeak (); Serial.print ("f0 ="); Цуваа.хэвлэх (x, 6); Serial.println ("Гц");

ADC -ийг газардуулж, дохио нь ойролцоогоор 2.5 вольт орчим төвлөрсөн тул бид DC бүрэлдэхүүн хэсгийг устгадаг.

Дараа нь бид өмнөх жишээн дээр тайлбарласны дагуу өгөгдлийг тооцоолно.

Алхам 8: Бодит дохионы дүн шинжилгээ - Үр дүн

Бодит дохионы дүн шинжилгээ - Үр дүн
Бодит дохионы дүн шинжилгээ - Үр дүн

Үнэндээ бид энэ энгийн дохион дээр ганцхан давтамжийг хардаг. Тооцоолсон үндсэн давтамж нь 440.118194 Гц байна. Энд дахин утга нь бодит давтамжийн ойролцоо ойролцоо утга юм.

Алхам 9: Синусоид дохионы талаар юу хэлэх вэ?

Синусоид дохионы талаар юу хэлэх вэ?
Синусоид дохионы талаар юу хэлэх вэ?

Одоо дохионы далайцыг 5 вольтоос дээш нэмэгдүүлэх замаар ADC -ийг бага зэрэг хэтрүүлээрэй. ADC -ийн оролтыг устгахгүйн тулд хэт их бүү шахаарай!

Зарим гармоникууд гарч ирж байгааг бид харж байна. Дохио хайчлах нь өндөр давтамжийн бүрэлдэхүүн хэсгүүдийг бий болгодог.

Та Arduino самбар дээр FFT шинжилгээний үндсэн зарчмуудыг үзсэн. Одоо та дээж авах давтамж, дээжийн тоо, цонхны параметрийг өөрчлөхийг оролдож болно. Номын сан нь FFT -ийг илүү нарийвчлалтай хурдан тооцоолохын тулд зарим параметрийг нэмж өгдөг. Хэрэв та дээж авах давтамжийг хэтэрхий бага болговол спектрийн нугалаас болж тооцоолсон хэмжээ нь бүрэн алдаатай харагдах болно.

Зөвлөмж болгож буй: