Сигналдарды өңдеу үшін Фурье түрлендіруінің практикалық қолданылуы. ARM7 микроконтроллерлерінде цифрлық сигналды өңдеу Фурье трансформациясы авр

Фурье теоремасы кез келген сигналды периодтық функциялардың (мысалы, синустар мен косинустар) периодтық сигнал жиілігіне еселік болатын жиіліктері бар ортонормальдық жиынындағы қатарға кеңейтуге болатынын айтады. Осылайша, сигналдың спектрлік талдауы салмақтық коэффициенттерді (жалпы жағдайда, кешенді) іздеуге негізделген, оның модулі барлық гармоникалардың жалпы суперпозициясына енгізілген сәйкес гармониканың тербеліс қуатының үлесіне сәйкес келеді.

Жылдам Фурье түрлендіруі

Жылдам Фурье түрлендіруі - бұл дискретті Фурье түрлендіруінде (DFT) қажетсіз есептеулерді болдырмау үшін тригонометриялық функциялардың мерзімділік қасиеттерін сәтті пайдаланатын есептеу алгоритмі, осылайша Фурье кеңеюіндегі коэффициенттерді табуды тездетеді. Дискретті түрлендіруден басты айырмашылығы сигналды өңдеудің өзінде емес, тек сандық мәндерді (алгоритм) есептеу әдісінде. FFT жағдайында да, DFT жағдайында да есептеулердің нәтижесі бірдей. FFT алгоритміне қойылатын жалғыз талап - N = 2L еселігі болатын үлгі өлшемі, мұнда L кез келген натурал сан. Ең көп таралған базалық-2 FFT алгоритмдері: уақыт бойынша азайтылған және жиілікпен азайтылған.

Бұл жұмыста уақытты жұқартумен radix-2 FFT алгоритмі (Кули-Туки алгоритмі) жүзеге асырылады. Кейбір DFT заңдарын оқу арқылы оны алу оңай. Айналу коэффициентін енгізейік:

Бұл жағдайда DFT-те сигнал мәндерінің саны (f0,f1,…,fN-1) үшін Фурье коэффициенттері мына қатынаспен өрнектеледі:

4 мәннен тұратын сигналдар қатарын қарастырайық: (f0,f1,f2,f3). Фурье түрлендіруін матрицалық түрде көрсетейік (1/N нормалдау коэффициенті өрнектің оң жағындағы Cij баған векторына кіреді):

Эйлер формуласы арқылы айналу коэффициенттерін жазып, олардың k = 0, 1, 2,.. 9 мәндерін анықтап, диаграмманы (2-сурет) құруға болады, одан қайталанатын коэффициенттердің үлгісін көруге болады.

Сурет 2. N=4 үшін w қуат қатары

Сандық мәндерді (4) орнына қойып, мынаны аламыз:

Яғни, w4-тен басталатын w мәндері w0-ден w3-ке дейінгі сәйкес мәнге тең. Әрі қарай (4) матрицалық теңдеуді стандартты емес түрде қайта жазамыз (бұдан әрі операциялардың анықтығы үшін ұқсас белгілер енгізілген):

Матрицаның бағандарын ауыстырайық, оны екі топқа бөлейік: жұп f0, f2 және тақ f1, f3 индекстері бойынша:

wk+1 = wkw1, онда (6) өрнек келесі түрде қайта жазылатынын ескерейік:

Пропорцияларды қолдану:

Қажетті кеңейту коэффициенттерін ұяшық мәндері бар баған векторы түрінде аламыз:

Алгоритмнің графикалық көрінісі (3-сурет) қанаттары ашық көбелекке ұқсайды, сондықтан бұл есептеу әдісі «көбелек» деп аталады.

Сурет 3. 4 мүше қатары үшін көбелек графигі

Сонымен, алгоритмнің бірінші қадамында сигнал мәндерінің бірқатар мүшелері жұп және тақ индекстерге бөлінеді. Содан кейін «көбелек» графигі орындалады, ол екі кезеңнен тұрады, олардың саны үлгі өлшемінің екеуінің дәрежесіне тең (N = 4 = 22). Әр кезеңде екі «көбелек» орындалады және олардың жалпы саны өзгеріссіз қалады. Әрбір көбелек операциясы бір көбейту амалына сәйкес келеді. Салыстыру үшін: дискреттеу (f0,f1,f2,f3) бар DFT-де көбейту операциясын 4×4 = 16 рет, ал FFT жағдайында тек 4 рет орындау қажет болады.

Бұл қатарды келесідей жазуға болады:

(2),
мұндағы , k-ші комплекс амплитудасы.

(1) және (3) коэффициенттері арасындағы байланыс келесі формулалармен өрнектеледі:

Фурье қатарының барлық осы үш көрінісі толығымен баламалы екенін ескеріңіз. Кейде Фурье қатарымен жұмыс істегенде синустар мен косинустардың орнына елестетілген аргументтің дәрежелерін қолдану ыңғайлырақ, яғни Фурье түрлендіруін күрделі түрде қолдану. Бірақ бізге (1) формуланы қолдану ыңғайлы, мұнда Фурье қатары сәйкес амплитудалары мен фазалары бар косинустардың қосындысы ретінде берілген. Кез келген жағдайда нақты сигналдың Фурье түрлендіруі күрделі гармоникалық амплитудаларға әкеледі деп айту дұрыс емес. Викиде дұрыс айтылғандай, «Фурье түрлендіруі (?) нақты айнымалының бір функциясын басқа функциямен, сонымен қатар нақты айнымалымен байланыстыратын операция».

Барлығы:
Сигналдарды спектрлік талдаудың математикалық негізі Фурье түрлендіруі болып табылады.

Фурье түрлендіруі (0, T) сегментінде белгілі бір қосындысы бар тригонометриялық функциялардың (синус және/немесе косинус) шексіз санының (шексіз қатар) қосындысы ретінде анықталған үздіксіз f(x) функциясын (сигнал) көрсетуге мүмкіндік береді. амплитудалар мен фазалар, сонымен қатар сегментте (0, Т) қарастырылады. Мұндай қатар Фурье қатары деп аталады.

Фурье түрлендіруін сигналды талдауға дұрыс қолдану үшін түсіну қажет тағы бірнеше тармақтарды атап өтейік. Егер бүкіл X осіндегі Фурье қатарын (синусоидтардың қосындысын) қарастыратын болсақ, онда (0, T) кесіндіден тыс Фурье қатарымен ұсынылған функция біздің функциямызды периодты түрде қайталайтынын көреміз.

Мысалы, 7-суреттің графигінде бастапқы функция кесіндіде (-T\2, +T\2) анықталған, ал Фурье қатары бүкіл х осінде анықталған периодтық функцияны білдіреді.

Бұл синусоидтардың өздері периодтық функциялар болғандықтан болады, сәйкесінше олардың қосындысы периодтық функция болады.


Сурет.7 Периодты емес бастапқы функцияны Фурье қатарымен көрсету

Осылайша:

Біздің бастапқы функциямыз үзіліссіз, периодты емес, ұзындығы T белгілі кесіндісінде анықталған.
Бұл функцияның спектрі дискретті, яғни гармоникалық компоненттердің шексіз қатары – Фурье қатары түрінде берілген.
Шындығында, Фурье қатары (0, T) сегментінде біздікімен сәйкес келетін белгілі бір периодтық функцияны анықтайды, бірақ біз үшін бұл мерзімділік маңызды емес.

Гармоникалық компоненттердің периодтары бастапқы f(x) функциясы анықталған кесіндінің (0, T) мәніне еселік болып табылады. Басқаша айтқанда, гармониялық периодтар сигналды өлшеу ұзақтығының еселігі болып табылады. Мысалы, Фурье қатарының бірінші гармоникасының периоды f(x) функциясы анықталған Т интервалына тең. Фурье қатарының екінші гармоникасының периоды Т/2 интервалына тең. Және т.б. (8-суретті қараңыз).


8-сурет Фурье қатарының гармоникалық компоненттерінің периодтары (жиіліктері) (мұнда T = 2?)

Сәйкесінше, гармоникалық құрамдас бөліктердің жиіліктері 1/Т еселігі болып табылады. Яғни, Fk гармоникалық компоненттерінің жиіліктері Fk = k\T-ге тең, мұндағы k 0-ден?-ге дейін ауытқиды, мысалы k = 0 F0 = 0; k=1 F1=1\T; k=2 F2=2\T; k=3 F3=3\T;… Fk= k\T (нөлдік жиілікте – тұрақты компонент).

Біздің бастапқы функциямыз T=1 сек ішінде жазылған сигнал болсын. Сонда бірінші гармоника периоды біздің сигналдың ұзақтығына тең болады T1=T=1 сек және гармоникалық жиілік 1 Гц болады. Екінші гармоника периоды сигнал ұзақтығының 2-ге бөлінгеніне тең болады (T2=T/2=0,5 сек) және жиілігі 2 Гц болады. Үшінші гармоникалық үшін T3=T/3 сек және жиілігі 3 Гц. Тағыда басқа.

Бұл жағдайда гармоникалар арасындағы қадам 1 Гц.

Осылайша, ұзақтығы 1 секунд сигнал жиілік рұқсаты 1 Гц болатын гармоникалық компоненттерге (спектрді алу) ыдырауы мүмкін.
Ажыратымдылықты 2 есе 0,5 Гц-ке дейін арттыру үшін өлшеу ұзақтығын 2 есе - 2 секундқа дейін арттыру керек. Ұзақтығы 10 секунд болатын сигналды жиілік рұқсаты 0,1 Гц болатын гармоникалық компоненттерге (спектрді алу үшін) ыдыратуға болады. Жиілік ажыратымдылығын арттырудың басқа жолдары жоқ.

Үлгілер массивіне нөлдерді қосу арқылы сигналдың ұзақтығын жасанды түрде арттыру тәсілі бар. Бірақ бұл нақты жиілікті ажыратымдылықты арттырмайды.

3. Дискретті сигналдар және дискретті Фурье түрлендіруі

Сандық технологияның дамуымен өлшеу мәліметтерін (сигналдарын) сақтау әдістері де өзгерді. Егер бұрын сигналды магнитофонға жазып, аналогты түрде таспада сақтауға болатын болса, енді сигналдар цифрланады және сандар (үлгілер) жиынтығы ретінде компьютер жадындағы файлдарда сақталады.

Сигналды өлшеу және цифрлаудың әдеттегі схемасы келесідей.


Сурет.9 Өлшеу арнасының диаграммасы

Сигнал өлшеу түрлендіргішіТ уақыт аралығында ADC-ке келеді. T уақытында алынған сигнал үлгілері (дискіні алу) компьютерге тасымалданады және жадта сақталады.


10-сурет Цифрланған сигнал - T уақытында қабылданған N үлгілер

Сигналдарды цифрландыру параметрлеріне қандай талаптар қойылады? Кіріс аналогтық сигналды дискретті кодқа түрлендіретін құрылғы ( сандық сигнал) аналогты-цифрлық түрлендіргіш (ADC, English Analog-to-digital converter, ADC) деп аталады (Wiki).

ADC негізгі параметрлерінің бірі таңдаудың максималды жиілігі (немесе дискретизация жылдамдығы, ағылшынша таңдау жылдамдығы) – оны дискреттеу кезіндегі уақытша үздіксіз сигналды таңдау жылдамдығы. Ол Герцпен өлшенеді. ((Уики))

Котельников теоремасы бойынша, егер үздіксіз сигнал Fmax жиілігімен шектелген спектрге ие болса, онда оны уақыт аралықтарында алынған оның дискретті үлгілерінен толық және бір мәнді түрде қайта құруға болады. , яғни. Fd жиілігімен? 2*Fmax, мұндағы Fd – іріктеу жиілігі; Fmax – сигнал спектрінің максималды жиілігі. Басқаша айтқанда, сигналды цифрлау жиілігі (ADC дискретизация жиілігі) біз өлшегіміз келетін сигналдың максималды жиілігінен кемінде 2 есе жоғары болуы керек.

Котельников теоремасы талап еткеннен төмен жиіліктегі үлгілерді алсақ не болады?

Бұл жағдайда жоғары жиілікті сигнал цифрландырудан кейін шын мәнінде жоқ төмен жиілікті сигналға айналатын «бәліштеу» эффектісі пайда болады (стробоскопиялық эффект, муар эффектісі деп те аталады). Суретте. 5 қызыл жоғары жиілікті синус толқыны нақты сигнал болып табылады. Төменгі жиіліктегі көк синусоид - іріктеу уақытында жоғары жиілікті сигналдың жарты периодынан көп уақыт өтуіне байланысты пайда болатын жалған сигнал.


Күріш. 11. Жеткіліксіз жоғары іріктеу жылдамдығында жалған төмен жиілікті сигналдың пайда болуы

Бүркеншіктеу әсерін болдырмау үшін ADC алдына арнайы антиалиазинг сүзгісі қойылады - ADC дискретизация жиілігінің жартысынан төмен жиіліктерді өткізетін және жоғары жиіліктерді кесетін төмен жиіліктегі сүзгі (LPF).

Сигналдың спектрін оның дискретті үлгілерінен есептеу үшін дискретті Фурье түрлендіруі (DFT) қолданылады. «Анықтама бойынша» дискретті сигналдың спектрі Fmax жиілігімен шектелетінін тағы бір рет атап өтейік, ол Fd дискреттік жиілігінің жартысынан аз. Демек, спектрі шексіз болуы мүмкін үздіксіз сигналдың Фурье қатары үшін шексіз қосындысынан айырмашылығы, дискретті сигналдың спектрін гармоникалардың шектеулі санының қосындысымен көрсетуге болады. Котельников теоремасы бойынша гармониканың ең үлкен жиілігі ол кемінде екі үлгіні құрайтындай болуы керек, сондықтан гармоника саны дискретті сигнал үлгілерінің жартысына тең. Яғни, үлгіде N үлгі болса, онда спектрдегі гармоника саны N/2-ге тең болады.

Енді дискретті Фурье түрлендіруін (DFT) қарастырайық.

Фурье қатарларымен салыстыру

Біз олардың сәйкес келетінін көреміз, тек DFT-тегі уақыт табиғаты бойынша дискретті және гармоника саны N/2 - үлгілер санының жартысымен шектеледі.

DFT формулалары k, s өлшемсіз бүтін айнымалыларда жазылады, мұндағы k – сигнал үлгілерінің сандары, s – спектрлік компоненттердің сандары.
s мәні T кезеңіндегі толық гармоникалық тербелістердің санын көрсетеді (сигналдың өлшеу ұзақтығы). Дискретті Фурье түрлендіруі гармониканың амплитудалары мен фазаларын сандық әдіспен табу үшін қолданылады, яғни. «компьютерде»

Бастапқыда алынған нәтижелерге қайта келу. Жоғарыда айтылғандай, периодты емес функцияны (біздің сигналды) Фурье қатарына кеңейту кезінде алынған Фурье қатары шын мәнінде T периоды бар периодтық функцияға сәйкес келеді (12-сурет).


12-сурет. Периодты T0, өлшеу периоды T>T0 болатын f(x) периодтық функциясы

12-суреттен көрініп тұрғандай, f(x) функциясы T0 периодымен периодты. Алайда, T өлшеу үлгісінің ұзақтығы T0 функциясының периодымен сәйкес келмейтіндіктен, Фурье қатары ретінде алынған функция T нүктесінде үзіліске ие. Нәтижесінде бұл функцияның спектрі жоғары жиілікті гармоникалардың үлкен саны. Егер T өлшеу үлгісінің ұзақтығы T0 функциясының периодымен сәйкес келсе, онда Фурье түрлендіруінен кейін алынған спектр тек бірінші гармониканы (синусоидты таңдау ұзақтығына тең периодты) қамтиды, өйткені f(x) функциясы. синусоид болып табылады.

Басқаша айтқанда, DFT бағдарламасы біздің сигналымыздың «синусоид бөлігі» екенін «білмейді», бірақ периодтық функцияны қатар түрінде көрсетуге тырысады, оның жеке бөліктерінің сәйкес келмеуі салдарынан үзіліс бар. синусоид.

Нәтижесінде спектрде гармониялар пайда болады, олар функцияның пішінін, соның ішінде осы үзіліспен қорытындылауы керек.

Осылайша, әртүрлі периодтары бар бірнеше синусоидтардың қосындысы болып табылатын сигналдың «дұрыс» спектрін алу үшін әрбір синусоидтың периодтарының бүтін саны сигналды өлшеу кезеңіне сәйкес келуі керек. Іс жүзінде бұл шартты сигналды өлшеудің жеткілікті ұзақ ұзақтығы үшін орындауға болады.


13-сурет Редуктордың кинематикалық қате сигналының функциясы мен спектрінің мысалы

Ұзақтығы қысқа болса, сурет «нашар» көрінеді:


14-сурет Ротор діріл сигналының функциясы мен спектрінің мысалы

Іс жүзінде «нақты құрамдастардың» қай жерде екенін және компоненттердің көп емес кезеңдері мен сигналды іріктеу ұзақтығынан немесе сигнал пішініндегі «секірулер мен үзілістерден» туындаған «артефактілер» қайда екенін түсіну қиын болуы мүмкін. . Әрине, «нақты құрамдас бөліктер» және «артефактілер» сөздері белгілі бір себептермен тырнақшаға алынады. Спектр графигінде көптеген гармоникалардың болуы біздің сигнал шын мәнінде олардан «тұрады» дегенді білдірмейді. Бұл 7 саны 3 және 4 санынан «тұрады» деп ойлаумен бірдей. 7 санын 3 және 4 сандарының қосындысы ретінде көрсетуге болады - бұл дұрыс.

Сонымен, біздің сигналымыз..., дәлірек айтсақ, «біздің сигналымыз» емес, бірақ біздің сигналымызды (үлгі алу) қайталау арқылы құрылған мерзімді функция белгілі бір амплитудалары мен фазалары бар гармоникалардың (синус толқындары) қосындысы ретінде ұсынылуы мүмкін. Бірақ практика үшін маңызды көптеген жағдайларда (жоғарыдағы суреттерді қараңыз) спектрде алынған гармоникаларды циклдік сипатқа ие және сигнал пішініне елеулі үлес қосатын нақты процестермен байланыстыруға болады.

Кейбір нәтижелер

1. ADC арқылы цифрланған, яғни дискретті үлгілер жиынтығымен (N дана) ұсынылған ұзақтығы T секунд болатын нақты өлшенетін сигнал гармоникалық жиынтықпен (N/) көрсетілген дискретті периодты емес спектрге ие. 2 дана).

2. Сигнал нақты мәндер жиынымен, ал оның спектрі нақты мәндер жиынымен көрсетіледі. Гармоникалық жиіліктер оң. Математиктерге спектрді теріс жиіліктерді пайдаланып күрделі түрде көрсету ыңғайлырақ екендігі «бұл дұрыс» және «мұны әрқашан жасау керек» дегенді білдірмейді.

3. Т уақыт интервалында өлшенген сигнал тек T уақыт аралығында анықталады. Біз сигналды өлшеуді бастағанға дейін не болды, одан кейін не болатыны ғылымға белгісіз. Ал біздің жағдайда бұл қызық емес. Уақытпен шектелген сигналдың DFT белгілі бір жағдайларда оның компоненттерінің амплитудасы мен жиілігін есептеуге мүмкіндік беретін мағынада өзінің «шын» спектрін береді.

Қолданылатын материалдар және басқа да пайдалы материалдар.

Дисплей құрылғысы ретінде екі жолды таңбалы СКД индикаторы пайдаланылады. Бұл жобаны жүзеге асырудың негізгі нүктесі аппараттық құрал емес, бағдарламалық қамтамасыз ету, дәлірек айтқанда 8-разрядты микроконтроллерде дискретті Фурье түрлендіруін (DFT) жүзеге асыру. Бірден айта кету керек, автор бұл саланың сарапшысы емес, сондықтан қарапайым дискретті Фурье түрлендіруімен негізгілерден бастаған. Фурьенің жылдам түрлендіру алгоритмі жылдам ғана емес, сонымен қатар өте күрделі.

Discrete Furier Transform (ағылшын әдебиетінде DFT, Discrete Fourier Transform) – цифрлық сигналдарды өңдеу алгоритмдерінде кеңінен қолданылатын Фурье түрлендірулерінің бірі (оның модификациялары MP3 форматындағы дыбысты сығуда, JPEG форматында кескінді қысуда және т.б. қолданылады), сондай-ақ дискретті (мысалы, цифрланған аналогтық) сигналдағы жиіліктерді талдауға қатысты басқа салалар. Дискретті Фурье түрлендіруі кіріс ретінде дискретті функцияны қажет етеді. Мұндай функциялар көбінесе дискреттеу (үздіксіз функциялардан мәндерді таңдау) арқылы жасалады.

Спектр анализаторының схемалық диаграммасы дыбыстық сигналөте қарапайым және шамамен цифрлық және аналогтық бөліктерге бөлуге болады.

Цифрлық бөлік микроконтроллер және оған қосылған СКД индикаторы арқылы қалыптасады. Микроконтроллердің сағаттық саны кварц резонаторы 16 МГц, қоректендіру кернеуі +5 В микроконтроллердің ADC үшін эталондық кернеу ретінде пайдаланылады.
СКД индикаторының деректер шинасы микроконтроллердің С портына (PC0-PC3 кіріс/шығыс желілері), басқару шинасы микроконтроллердің D портына (PD5, PD6) қосылған. Көрсеткіш 4 биттік режимде жұмыс істейді. Контрастты реттеу үшін номиналды мәні 4,7 кОм айнымалы резистор қолданылады. Индикатормен жұмыс істеу үшін анализатордың 8 көлденең бағандарын көрсету үшін теңшелетін белгілер жасалды, бұл реттелетін белгілер СКД индикаторының барлық 64 байт жедел жадысын алады.

Микроконтроллер сыртқы 16 МГц кварц резонаторынан жұмыс істейді.

Құрылғының аналогтық бөлігі ең маңызды бөлігі болып табылады және электреттік микрофон сигналының алдын ала күшейткіші болып табылады, оның шығысы микроконтроллерге орнатылған ADC ADC0 арнасына қосылған. Біз ADC кірісіндегі нөлдік деңгейді анықтамалық кернеудің дәл жартысына орнатуымыз керек, яғни. 2,5 V. Бұл жағдайда сигналдың оң және теріс жарты толқынын пайдалануға болады, бірақ оның амплитудасы белгіленген шектен аспауы керек, яғни. Артық жүктемені болдырмау үшін күшейтуді мұқият реттеу керек. Жоғарыда аталған барлық шарттарды жалпы төмен қуатты операциялық күшейткіш микросұлба қанағаттандырады.

DFT алгоритмі жылдам Фурье түрлендіруімен салыстырғанда біршама баяу. Бірақ біздің спектр анализаторымыз жоғары жылдамдықты қажет етпейді және ол секундына шамамен 30 кадр жаңарту жылдамдығын қамтамасыз ете алса, бұл дыбыстық сигналдың спектрін визуализациялау үшін жеткілікті болады. Кез келген жағдайда, біздің нұсқамызда секундына 100 кадр жылдамдығына қол жеткізуге болады, бірақ бұл екі жолды таңбалы СКД индикаторы үшін тым жоғары параметр мәні және ұсынылмайды. 32 нүктелік дискретті Фурье түрлендіруі үшін іріктеу жиілігі 20 кГц құрайды және түрлендіру нәтижесі симметриялы болғандықтан, біз тек бірінші жартысын пайдалануымыз керек, яғни. алғашқы 16 нәтиже. Сондықтан біз жиілік спектрін 10 кГц-ке дейін көрсете аламыз және анализатордың рұқсаты 10 кГц/16 = 625 Гц.

Дизайн авторы DFT есептеулерінің жылдамдығын арттыруға әрекет жасады. Егер бұл түрлендіруде N нүкте болса, онда синус пен косинустың N2/2 мәндерін табу керек. 32 нүктелік түрлендіру үшін 512 синус пен косинус мәндерін табу керек. Бірақ, оларды таппас бұрын, біз CPU уақытын қажет ететін бұрышты (градустарды) есептеуіміз керек, сондықтан бұл есептеулер үшін мәндер кестелерін пайдалану туралы шешім қабылданды. Микроконтроллер бағдарламасында есептеу кезінде өзгермелі нүкте және қос дәлдік сандары пайдаланылмайды, өйткені бұл 8-биттік микроконтроллерде өңдеуге көп уақыт кетеді. Оның орнына, іздеу кестелеріндегі мәндер 10000-ға көбейтілген 16-биттік бүтін деректерді пайдаланады. Содан кейін түрлендіру орындалғаннан кейін нәтижелер 10000-ға бөлінеді. Бұл тәсіл арқылы әр адамға 120 32 нүктелік түрлендіруді орындауға болады. екіншіден, бұл біздің құрылғыларымыз үшін жеткілікті.

ATmega32 микроконтроллерінде спектр анализаторының жұмысын көрсету

Жүктеулер

Бастапқы код (микроконтроллер бағдарламасы, синус, косинус және бұрыш деректерінің кестелері) -

  • AVR-де жарық пен музыкадан ары бару қиын екені түсінікті, параметрлері дұрыс емес. Бірақ көптеген тапсырмалар үшін секундына 120 32 нүктелік түрлендіру жеткілікті болуы мүмкін. Сіз, әрине, 625 Гц басқа үлгіні ала аласыз, дәлірек айтқанда, жаңарту жылдамдығын жоғалта аласыз. Айта кету керек, МК өзін нашар сезінеді, өнімділік тұрғысынан сіз оны бекіте аласыз. Бірақ мұнда сіз аппараттық деректерді беру әдістерін пайдаланып нәтиженің шығуын ұйымдастыра аласыз. Содан кейін ол көмекші микроконтроллер болады, ал негізгісі тек одан деректерді алады және оны басқа процестермен үйлесімді өңдейді. Жалпы алғанда, ол әлі де процессордың жиілігіне байланысты. Бір кездері 20 МГц-тен жоғары мега жылдамдығын арттыруға болатын еді, бірақ бұл тапсырмалар үшін біз тек жоғары жиіліктерде ақаулар аламыз. Идея жақсы, егер математикалық бөліктер көбірек жазылса ... бұл оның МК-да жүзеге асырылуы
  • Мен одан да қызықты анализаторлар жасадым: You Tube немесе түрлі-түсті СКД-дағы нұсқасы: You Tube әйгілі Чен кітапханасына негізделген :)
  • «Біз бұрышты (градустарды) есептеуіміз керек» Осы кестелердің мәндері қалай есептелетінін бізге біреу толығырақ айтып бере алады ма?
  • Синустар мен косинустар кестесімен бәрі түсінікті. Дәрежелер_іздеу кестесіндегі мәндер қалай есептелетіні түсініксіз бе?

Барлық сигналдар, сіз оларды ойлап таптыңыз ба немесе оларды Әлемде байқадыңыз ба, шын мәнінде әртүрлі жиіліктегі қарапайым синус толқындарының қосындысы ғана.

Мен 16x2 СКД және ATmega32 микроконтроллерден шағын аудио спектр анализаторын (0 - 10 кГц) жасадым. Мен қарапайым DFTs (дискретті Фурье түрлендіру) бастадым. FFT (Fast Furier Transform) DFT-тен тек үлкен жылдамдықпен және сәл күрделірек алгоритммен ерекшеленеді, мен оны пайдаланбадым, мүмкін кейінірек қосамын.

DFT FFT-пен салыстырғанда баяу. Менің СКД спектр анализаторым FFT қамтамасыз ете алатын жоғары жылдамдықты қажет етпейді және экрандағы кескін шамамен 30 кадр/сек жылдамдықпен өзгерсе, бұл дыбыс спектрін визуализациялау үшін жеткілікті. Бірақ мен қазірдің өзінде шамамен 100 кадр/с қол жеткізе аламын, алайда СКД үшін тым жоғары жаңарту жиілігі ұсынылмайды. 20 кГц жиілікте таңдалған дыбыс 32 DFT нүктесін шығарады. Трансформация нәтижесі симметриялы болғандықтан, мен тек алғашқы 16 нәтижені пайдалануым керек. Тиісінше, максималды жиілік 10 кГц. Осылайша, 10кГц/16 = 625Гц.

Мен DFT есептеу жылдамдығын арттыруға тырыстым. Егер N DFT нүктесі болса, онда синус пен косинусты (N^2)/2 табуымыз керек.32 нүктелік DFT үшін 512-нің синусы мен косинусын табуымыз керек. Синус пен косинусты таппас бұрын, біз процессордың біраз уақытын алатын бұрышты (градустарды) табуымыз керек. Ол үшін синус пен косинус үшін кестелер жасадым. Мен синус пен косинус мәндерін 10000-ға көбейту арқылы 16-биттік синус пен косинус айнымалысын жасадым. Түрлендіруден кейін мен әрбір нәтижені 10000-ға бөлуім керек. Енді мен секундына 120 32 нүктелік DFT есептей аламын, бұл одан көп спектр анализаторы үшін жеткілікті.

Дисплей

64 байт борттық СКД жадына жүктелген реттелетін СКД таңбаларын қолдандым. Мен желіде 16x2 СКД спектрлік анализатор дисплейі ретінде пайдаланылатын бейнені көрдім және сол идеяны қолдандым.

Аудио кіріс

Спектр анализаторының маңызды бөліктерінің бірі электреттік микрофоннан сигнал алу болып табылады. дамытуға ерекше назар аудару керек алдын ала күшейткішмикрофон үшін. Біз ADC кірісінде нөлдік деңгейді және қоректендіру кернеуінің жартысына тең максималды деңгейді орнатуымыз керек, яғни. 2,5 В. Оны -2,5В-тан +2,5В-қа дейінгі кернеумен қамтамасыз етуге болады. Алдын ала күшейткішті осы шектен аспайтындай конфигурациялау керек. Мен микрофонды күшейткіш ретінде LM324 операциялық күшейткішті қолдандым.

Радиоэлементтердің тізімі

Белгі Түр Номиналы Саны ЕскертуДүкенМенің блокнотым
Дисплей
MK AVR 8-бит

ATmega32

1 Блокнотқа
Конденсатор22 пФ2 Блокнотқа
Конденсатор0,1 мкФ1 Блокнотқа
Электролиттік конденсатор100 мкФ1 Блокнотқа
Резистор

100 Ом

1 Блокнотқа
Триммер резисторы4,7 кОм1 Блокнотқа
Кварц резонаторы16 МГц1 Блокнотқа
СКД дисплей16х21 Блокнотқа
қуат блогы5 В1 Блокнотқа
Аудио кіріс
U1 Операциялық күшейткіш

LM324

1 Блокнотқа
C1 Конденсатор1 мкФ1 Блокнотқа
C8 Конденсатор0,01 мкФ1 Блокнотқа
R1 Резистор

220 кОм

1 Блокнотқа
R2, R3 Резистор

10 кОм

2 Блокнотқа
R4, R9 Резистор

1 кОм

2 Блокнотқа
R5 Резистор

Сандық сигналды өңдеуге (DSP) арналған көптеген мамандандырылған процессорлар бар, мысалы, Texas Instruments TMS320 сериясының DSP, ол қарапайым бүтін ядроларды және өзгермелі нүкте деректерін өңдейтін C6000 отбасы қосалқы тобы сияқты құбыжықтарды қамтиды. Аналогтық құрылғылардан тұтас ADSP сериясы бар (оның ішінде әмбебап BlackFin бар), сонымен қатар басқалары бар. қарапайым шешімдер MicroChip - dsPIC.

Дегенмен, мамандандырылған DSP жақсы, бірақ ол әрқашан қажет пе? Иә, ақпараттың үлкен ағынымен бұл жай ғана алмастырылмайды, бірақ өңдеудің қарапайым тапсырмалары да бар. Нақтырақ айтқанда, мені қосарланған түрлендіру тапсырмасы қызықтырды - дыбыс сигналы конверттелген, сол арқылы спектрді алады, содан кейін спектрде кез келген операцияларды орындауға және кері түрлендіруді орындауға болады, сол арқылы өңделген сигналды алуға болады. Мұның бәрі нақты уақыт режимінде жасалып, телефон сапасынан төмен емес сапаға ие болу керек.

Бұл 2000 жыл емес, бағасы айтарлықтай төмендеген, өнімділігі жоғары ARM7/Cortex-M3 өзектеріне негізделген бір чипті шешімдер бар; олар 32 биттік, 32 биттік көбейту операциясының аппараттық іске асырылуы бар (сонымен қатар) , дерлік DSP көбейту-жинақтау операциясы және 64 бит нәтиже) және Cortex-M3 аппараттық бөлімді де қамтиды.

Сигналдарды өңдеу менің мамандығым емес екенін бірден ескерткім келеді, барлық дерлік білім (дәлірек айтсақ, принциптерді түсіну) институттан сақталған, бірақ енді мен оны тексеріп, жүзеге асырғым келді. Менің айтайын дегенім, сипаттауда, ұғымдарды ауыстыруда, т.б. қателіктер болуы мүмкін. Шындығында, академиялық дәлдік мені қатты алаңдатқан жоқ.

Кез келген дерлік DSP үшін жоғарыда сипатталған тапсырма қарапайым және қарапайым. Бірақ жалпы мақсаттағы RISC ядросы оған қалай әрекет етеді? Егер біз AVR немесе PIC деп санасақ, онда олардың жеткіліксіз болуы екіталай. 8-биттік және төмен тактілік жиілік әсер етеді. Дегенмен, Эльм-Чанның AVR-де FFT жүргізетін және сигнал спектрін сызатын конструкциялары бар. Дегенмен, бұл жағдайда нақты уақыт режимінде визуализация (ең төменгі өңдеу дәлдігімен) орындалады, сигналды қолайлы дыбыс сапасымен өңдеу аяқталмайды.

LPC2146 эксперименталды чип ретінде ARM7TDMI-S ядросына негізделген және максималды тактілік жиілігі 60 МГц (іс жүзінде ол 72 немесе тіпті 84 МГц жиілікте жұмыс істемейді) таңдалды. Неліктен? Біріншіден, менде ол үшін жөндеу тақтасы бар, екіншіден, бортта ADC және DAC бар, яғни. минималды сыртқы кесу қажет.

Кішкене теория

Ең алдымен, ARM микроконтроллерлерінде FFT (Fast Fourier Transform) өнімділігін бағалау қызықты болды. Осы бағалауға сүйене отырып, оның дыбыстық деректер ағынын өңдеу үшін жеткілікті жылдамдығы бар ма, және мұндай микроконтроллерде қандай дискреттеу жиілігімен және қанша арнаны өңдеуге болатын сигнал туралы қорытынды жасауға болады.

Фурье түрлендіруінің негізінде сіз ақылды сүзгілерді (өте тартымды сипаттамалары бар) құра аласыз. Мені ең алдымен сигналдың тонусын өзгерту (спектрді көтеру және төмендету) және спектрді «шағылыстыру» мәселелері қызықтырды. Соңғысы LSB төменгі бүйірлік жолақты радиохабарларын тыңдау үшін SDR радиоларында қажет.

Мен сізге теорияны жүктемеймін және Фурье түрлендіруінің не екенін түсіндірмеймін; бұл тақырып бойынша мен пайдаланған материалдардан өте көп материалдар бар: вики және өте жақсы және танымдық кітаптың тарауы.

Бағдарламалық қамтамасыз етуді енгізу

FFT-тің көптеген бағдарламалық жасақтамалары бар, бірақ мен өзімді жаздым. Менің басты мақсатым белгілі бір архитектура үшін кодты оңтайландыру болды. Біріншіден, мен бірден 32-битке назар аудардым, екіншіден, тек бүтін сандарды есептеу қажет болды және бөлу операциясынан аулақ болған жөн. Бұл талаптарды қанағаттандыру үшін дайын нәрсені табу қазірдің өзінде қиын.

Алдын ала есептеуге болатын барлық тұрақтылар есептеліп, кестелерге орналастырылды (негізінен тригонометриялық функциялардың мәндері). Бұл алгоритмнің негізгі оңтайландыруы, әйтпесе ол сипатталған алгоритмді толығымен дерлік қайталайды.

Ең бастысы - бүтін сандарды есептеуге қойылатын талап. Іске асыру процесі кезінде тіпті 32-биттік цикл айнымалыларының бірінде толып кетуді тудырған қате пайда болды. Оның үстіне, ол барлық сынақ деректерінде көрінбеді, сондықтан ол табылғанға дейін қатты бас ауруын тудырды.

Мен барлық бастапқы мәтіндерді бір архивке жинадым. Іске асыру түпкілікті емес, қайталанатын есептеулер бар (спектр мен фазалық симметрия ескерілмейді) және буферлерді пайдалануды оңтайландыру қажет, өйткені қазіргі уақытта есептеулер үшін тым көп қолданылады. жедел жады(1024 нүктелік түрлендіру үшін 12к дерлік).

Алғашқы сынақтар

Барабан орамы: Мен 1024 нүктелік үлгі үшін түрлендіру жылдамдығын сынап жатырмын, процессордың ядросының жиілігі 60 МГц. Тестілеу эмуляторда жүргізілді, сондықтан ол 100% дәл емес, бірақ бұл нәтиже көрсеткіш ретінде пайдаланылуы мүмкін (менің алдыңғы тәжірибемде эмулятор өтірік айтқанымен, ол көп емес еді). Кодтың бірінші нұсқасын сынау, RealView MDK компиляторы, O3 оңтайландыру опциясы, ARM кодын генерациялау режимі.

Сонымен, біз не көреміз:

Әр түрлендіру үшін 6 мс, екі рет қайталау үшін барлығы 12 мс астам. 44100 Гц дискретизация жиілігі (дыбыс үшін стандартты) және 16 битке дейінгі ажыратымдылығы бар үлгілермен таза есептеулер ~44*12 мс = 528 мс уақытты алады. Бұл микробағдарламаның аралық нұсқасында, кейбір кодты оңтайландырулар әлі аяқталмаған кезде (бағалаулар бойынша, алгоритмді 2 есеге жуық жылдамдатуға болады)! Менің ойымша, бұл тамаша көрсеткіш.

Жалпы алғанда, негізгі жүктеме шамамен 50% болады деп күтілуде, тағы 50% спектр бойынша түрлендіруге және ADC, DAC және басқа деректерді тасымалдаумен жұмыс істеу кезіндегі үстеме шығындар үшін қалады. Егер таңдау жиілігін «телефон» деңгейіне дейін төмендетсеңіз (шамамен 4800-9600 Гц), онда негізгі жүктеме одан да төмен болады (шамамен 15-30%).

Сонымен, математикалық бөлік азды-көпті түсінікті. Сіз нақты іске асыруға кірісе аласыз.

Темір

Сынақ платформасы үшін біз динамигі бар Keil MCB2140 әзірлеу тақтасын қолдандық. Құрылғының сызықтық шығысына қосылу үшін Мини-Джек сымы дәнекерленген және қарапайым кіріс тізбегі жиналған. Жоғарыда айтылғандай, тақтада микроконтроллердің аналогтық шығысына қосылған динамик бар және басқару элементтері (түйме және потенциометр) бар.

Мұнда кіріс тізбегінің эскизі берілген:


Бағдарламалық құралды жөндеу кезең-кезеңімен орындалды:

  1. Барлық қажетті перифериялық құрылғыларды жөндеу: ADC, DAC, таймерлер, жарықдиодты индикатор.
  2. Сигналдарды цифрландыру арқылы тестілеу: деректерді қажетті жылдамдықта цифрлаймын және оны буферге саламын, содан кейін буферден деректерді шығарып, сигналды ойнатамын. Анау. сигналдың ешбір түрлендірусіз уақыт бойынша қарапайым ауысуы. Бұл кезеңде одан әрі жұмыс істеу үшін қажетті 2 буфермен жұмыс істеу механизмі тексеріледі.
  3. TO алдыңғы нұсқасытура және кері Фурье түрлендірулері қосылады. Бұл сынақ ең соңында FFT кодының дұрыс жұмысын тексереді, сонымен қатар кодтың қол жетімді өнімділікке сәйкестігін тексереді.
  4. Осыдан кейін қосымшаның негізгі қаңқасы жасалды, сіз практикалық қосымшаларға ауыса аласыз.

Мәселе кодқа FFT қосқаннан кейін пайда болды: сигналда бөгде шу мен ысқырықтар пайда болды. Жалпы, бұл мінез маған өте оғаш көрінді, өйткені... Түрлендірусіз цифрлық жол арқылы өтетін сигнал өте таза болып қалды. Мұның бірінші себебі: аналогтық схемадан кейін ADC-дегі сигнал амплитудасы толық емес (0-3,3 В), бірақ ойнатқыштың максималды дыбыс деңгейінде тек 0,5-2 В шегінде болды, екіншісі: бүтін санға байланысты жеткілікті күшті шу. есептеулер (+-1 бірлік, ол дыбыс кедергісін тудыруға жеткілікті болып шықты).

Бірінші мәселемен күресу үшін аналогтық бөлікті реттеуді бастау туралы шешім қабылданды. Шу мәселесін шешу үшін төмен жиілікті сүзгіні пайдаланып көріңіз.

1-қосымша: сигналдың үнін өзгерту

Тақтада потенциометр бар ( айнымалы резистор), оны басқару үшін пайдалануға болады. Бұл жағдайда ол сигнал спектрін жоғары және төмен жылжытуға орнатады, бұл сіздің сүйікті композицияларыңызды «түрлендіру» үшін жеткілікті.

Жиілік доменінде не болады:


Бұл жағдайда түрлендіру нәтижесі 2 буферде болады. Бір буфер - нақты бөлік, ал екіншісі - ойдан шығарылған бөлік. Оларда алынған сандардың физикалық мағынасы: нақты бөлігінде гармоника мәндері, ойдан шығарылған бөлігінде осы гармоникалардың фазалық ығысуы бар. Сонымен қатар, көріп отырғаныңыздай, бастапқы сигнал N-мәндерімен сипатталады, ал түрлендіруден кейін 2N-мәндері алынады. Ақпарат көлемі өзгермейді, ал ақпарат көлемінің 2 есе ұлғаюы буферлік деректерде мәндердің қайталануы түріндегі артықшылыққа ие болуына байланысты болады.




Жоғарғы