ዝርዝር ሁኔታ:

QuickFFT: ለአርዱዲኖ ከፍተኛ ፍጥነት FFT 3 ደረጃዎች
QuickFFT: ለአርዱዲኖ ከፍተኛ ፍጥነት FFT 3 ደረጃዎች

ቪዲዮ: QuickFFT: ለአርዱዲኖ ከፍተኛ ፍጥነት FFT 3 ደረጃዎች

ቪዲዮ: QuickFFT: ለአርዱዲኖ ከፍተኛ ፍጥነት FFT 3 ደረጃዎች
ቪዲዮ: QuickFFT: High Speed FFT for Arduino 2024, ህዳር
Anonim
QuickFFT: ለአርዱዲኖ ከፍተኛ ፍጥነት FFT
QuickFFT: ለአርዱዲኖ ከፍተኛ ፍጥነት FFT

የተለመደው አርዱዲኖ ውስን ራም እና የማቀናበር ኃይል አለው ፣ እና ኤፍኤፍቲ ስሌት-ተኮር ሂደት ነው። ለብዙ የእውነተኛ ጊዜ ትግበራዎች ብቸኛው መስፈርት ከከፍተኛው ስፋት ጋር ድግግሞሽ ማግኘት ወይም የድግግሞሽ ጫፎችን መለየት ያስፈልጋል።

በአንዱ አስተማሪዬ ውስጥ ፣ እዚህ ሊገኝ የሚችል ለ FFT ኮድ አዘጋጀሁ - EasyFFT

ይህ ኮድ በአርዱዲኖ ናኖ ላይ እስከ 128 ናሙናዎችን FFT ማከናወን ችሏል። በአርዱዲኖ ውስን ማህደረ ትውስታ ምክንያት ከዚህ ከፍ ያለ የናሙና ቁጥር አይቻልም። ፍጥነትን ለማሻሻል እና የማህደረ ትውስታ ፍጆታን ለመቀነስ ተግባሩን ትንሽ ቀይሬዋለሁ። ይህ ማሻሻያ አርዱዲኖ FFT ን አምስት ጊዜ በፍጥነት እንዲያከናውን ያስችለዋል እና ግማሽ ማህደረ ትውስታን ያጠፋል። ይህ አስተማሪ የ FFT ሥራን አይሸፍንም ፣ ለእሱ ማጣቀሻዎች በ EasyFFT ላይ ሊገኙ ይችላሉ።

ደረጃ 1: መሥራት

በመስራት ላይ
በመስራት ላይ
በመስራት ላይ
በመስራት ላይ
በመስራት ላይ
በመስራት ላይ
በመስራት ላይ
በመስራት ላይ

በአነስተኛ ትክክለኛነት ፍጥነቱን ለማሻሻል የተለመደው የ FFT ተግባር ተስተካክሏል። በምስሉ ላይ እንደሚታየው የሙከራ ምልክት በሲን ወይም በኮሲን ሞገድ ቅርጾች ማባዛት ያስፈልጋል። እነዚህ እሴቶች ከ 0 እስከ 1 ሊሆኑ ይችላሉ ፣ ስለዚህ ተንሳፋፊ ማባዛት የግድ አስፈላጊ ነው። በአርዱዲኖ ውስጥ ተንሳፋፊ ማባዛት ከ ኢንቲጀር ሥራዎች ጋር ሲነፃፀር ቀርፋፋ ነው።

በዚህ ተግባር ውስጥ የሲን/ኮሲን ሞገድ በካሬ ሞገድ ይተካል። እሴት 0 ፣ 1 ወይም -1 ሊኖረው በሚችል የካሬ ሞገድ የሙከራ ምልክት ማባዛት ስላለብን። በዚያ ምክንያት ተንሳፋፊ ማባዛትን በቀላሉ ወደ ኢንቲጀር መደመር ወይም መቀነስ መተካት እንችላለን። ለ Arduino ኢንቲጀር መደመር ወይም መቀነስ በ 5 እጥፍ ያህል ፈጣን ነው። ይህ 5 ጊዜ አካባቢ መፍታት ፈጣን ያደርገዋል።

በዚህ ማሻሻያ ምክንያት አሁን የድግግሞሽ ማጠራቀሚያ እሴቶች እንደ ኢንቲጀር (ቀደም ሲል ተንሳፋፊ የነበረው) ሊከማች ይችላል እና እኛ ዝቅተኛ የማስታወስ ፍጆታ ሌላ ጥቅም እናገኛለን። በአርዱዲኖ ናኖ ፣ ኢንተር 2 ባይት ማህደረ ትውስታን ይጠቀማል ፣ ተንሳፋፊ ደግሞ 4 ባይት ማህደረ ትውስታን ይጠቀማል። በአዲሱ ኮድ በዚህ ጥቅም ምክንያት ለ 256 ናሙናዎች (ከዚህ ቀደም 128 ናሙናዎች) ኤፍኤፍቲ ማከናወን ችለናል።

በመደበኛ ኤፍኤፍቲ ውስጥ መፍትሄን በፍጥነት ለማድረግ የኃጢአትን እሴት ማከማቸት ነበረብን። በአዲስ ተግባር ፣ እኛ የኃጢያት/ኮሲን እሴቶችን ስለማንፈልግ እሱን ማስወገድ እና አንዳንድ ማህደረ ትውስታን ማዳን እንችላለን።

ትግበራ -

ይህንን ተግባር መተግበር በቀጥታ ወደ ፊት ነው። እኛ በቀላሉ በኮድ ዋን ላይ ተግባሩን መገልበጥ እንችላለን። ከዚህ በታች ያለውን ትእዛዝ በመጠቀም ይህ ተግባር ሊከናወን ይችላል-

ተንሳፋፊ f = Q_FFT (ውሂብ ፣ 256 ፣ 100) ፤ በተግባር Q_FFT ፣

ውሂብ - ይህ ቃል የምልክት እሴቶች ያለው ድርድር ነው ፣ የሚመከረው የናሙና መጠን 2 ፣ 4 ፣ 8 ፣ 32 ፣ 64 ፣ 128 ፣ 256 ፣ 512 ፣… የናሙና መጠኑ የእነዚህ እሴቶች ካልሆነ በአቅራቢያው ወደሚገኙት ዝቅተኛ እሴቶች ጎን ይቆረጣል። ለምሳሌ ፣ የናሙና መጠኑ ከ FFT 75 ከሆነ ለ 64 የናሙና ቁጥሮች ይከናወናል። ከፍተኛው የናሙና መጠን በአርዱዲኖ ላይ ባለው ራም የተገደበ ነው።

ሁለተኛው ቃል በአንድ ድርድር ውስጥ የናሙናዎችን ብዛት ይገልጻል እና የመጨረሻው ቃል በ Hz ውስጥ የናሙና ድግግሞሽ ነው።

ደረጃ 2 ኮድ

ይህ ክፍል በኮድ ውስጥ ማሻሻያ በሚደረግበት ጊዜ ሊታወስ የሚገባውን በ EasyFFT ኮድ ውስጥ የተደረገውን ማሻሻያ ያብራራል ፣

1. ቀደም ሲል እንደተገለፀው እዚህ ኢንቲጀሮች FFT ን ለመሥራት ያገለግላሉ። Int ውስጥ በአርዱዲኖ ባለ 16 ቢት ቁጥር ሲሆን ከ -32768 እስከ 32768 ድረስ እሴቶችን ሊይዝ ይችላል። የዚህ int ዋጋ ከዚህ ክልል በወጣ ቁጥር ችግሩን ያስከትላል። ከመደበኛ ስሌት በኋላ ይህንን ችግር ለማስወገድ። ማናቸውም እሴቱ ከ 15000 የተሟሉ ድርድሮች በ 100 የሚበልጥ ከሆነ ይህ int እንዳይፈስ ይከላከላል።

2. ስፋቱ ስሌት - ስፋትን ለማስላት እውነተኛው እና ምናባዊው ክፍል አራት ማዕዘን መሆን እና የድምር ካሬ ሥር ያስፈልጋል። ስኩዊድ እና የተግባሩ ካሬ ሥሩ ጊዜ ይወስዳል። ሂደቱን በበለጠ ፍጥነት ለማድረግ ፣ ይህ ኮድ አንዳንድ የእውነተኛ እና ምናባዊ ክፍሎችን መጠኖች በቀላሉ ያደርጋል። ይህ በእርግጠኝነት ያነሰ ትክክለኛ እና በአንዳንድ ሁኔታዎች ወደ የተሳሳተ መደምደሚያ ሊያመራ ይችላል። ለትልቅ ስሌት ወደ መደበኛው ዘዴ ለመመለስ ሊመርጡ ይችላሉ ፣ ግን የበለጠ ጊዜ ይወስዳል እና እነዚህን ቁጥሮች ለማከማቸት አንዳንድ ዝግጅቶችን ማድረግ ያስፈልግዎታል።

3. ይህ ኮድ ለበርካታ ከፍተኛ ማወቂያ ሞዱል የለውም። በቀላሉ ዋጋውን በከፍተኛ ስፋት (ዲሲ ማካካሻ የሆነውን የመጀመሪያውን ቁጥር ሳይጨምር) ይመርጣል። ብዙ ጫፎች ከፈለጉ የ EasyFFT ኮድን መጥቀስ እና እዚህ ላይ አስፈላጊውን ማሻሻያ ማድረግ ይችላሉ። በዚያ ሁኔታ ፣ አንዳንድ ድርድር/ተለዋዋጭ እንዲሁ እንደ ዓለም አቀፍ ተለዋዋጭ መገለጽ አለበት።

4. ተግባሩ የሚከተለውን መስመር ይ containsል

ያልተፈረመ int Pow2 [13] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048};

ከላይ የተጠቀሱትን ተለዋዋጮች እንደ ዓለም አቀፍ ተለዋዋጭ (በኮድ መጀመሪያ ላይ መለጠፍ) ማወጅ በእያንዳንዱ አፈፃፀም 1 ሚሊሰከንዶች ጊዜ ይቆጥባል።

5. ከላይ ከተጠቀሱት ድርድር ውስጥ ከፍተኛዎቹ 5 ጫፎች ከተከማቹበት ከ EasyFFT ተግባር በተቃራኒ። ይህ ተግባር ተንሳፋፊ እሴት ይመልሳል። ይህ እሴት በ Hz ውስጥ ከፍተኛውን ስፋት ያለው ድግግሞሽ ይወክላል። ስለዚህ የኮዱ ውክልና እንደዚህ ያለ ነገር ይመስላል።

ተንሳፋፊ f = Q_FFT (ውሂብ ፣ 256 ፣ 100);

6. Peak Detection - አንዴ ከፍተኛ መጠን ያለው ድግግሞሽ ከተገኘ በኋላ ይህ ተግባር ትክክለኛውን ውጤት ለማስላት ከእሱ በፊት እና በኋላ የተደጋጋሚነት ስፋት ይጠቀማል። በዚህ ስሌት ውስጥ ጥቅም ላይ የዋለው ስፋት የሞዱል ድምር ነው (የካሬዎች ድምር ካሬ ሥር አይደለም)

Fn ድግግሞሽ ከከፍተኛው ስፋት ጋር ከሆነ ድግግሞሹ ከዚህ በታች ካለው ቀመር ሊሰላ ይችላል።

ትክክለኛ ኤፍ = (A n-1 *Fn-1+An-1 *Fn-1+An-1 *Fn-1) / (አን -1+አን+አንድ+1)

የት ኤ የ n ድግግሞሽ እና Fn-1 ድግግሞሽ እሴት ነው።

ደረጃ 3 ውጤቶች

ውጤቶች
ውጤቶች
ውጤቶች
ውጤቶች

የመፍትሄ ጊዜ ከ EasyFFT ጋር ከላይ ባለው የምስል ንፅፅር ውስጥ ይታያል። በንፅፅሩ የታየው የእሱ ፍጥነት።

ለናሙና መረጃ ከተለያዩ ድግግሞሽ ጋር 3 የ sinusoidal ሞገዶች አሉት። ከ QuickFFT ያለው ውጤት ከ Scilab ውፅዓት ጋር ይነፃፀራል። በምስሉ ላይ እንደምንመለከተው ከፍተኛው ስፋት ያላቸው 3 ጫፎች ከ Scilab ውፅዓት ጋር ይዛመዳሉ። ሆኖም ፣ ውጤቱ ብዙ ጫጫታዎችን ያቀፈ ነው ፣ ይህም ለአንዳንድ መተግበሪያዎች አሳሳች ሊሆን ይችላል። ስለዚህ ለማመልከቻዎ ከማመልከትዎ በፊት ኮዱን በትክክል መፈተሽ ይመከራል።

ይህ ኮድ ለፕሮጀክትዎ ጠቃሚ ሆኖ እንዳገኙት ተስፋ አደርጋለሁ። ማንኛውም ጥያቄ ወይም አስተያየት ካለ እባክዎን አስተያየት ይስጡ።

የሚመከር: