Siqnalın işlənməsi üçün Furye transformasiyasının praktik tətbiqi. ARM7 mikro nəzarətçilərində rəqəmsal siqnalın işlənməsi Fourier transform avr

Furye teoremi bildirir ki, istənilən siqnal dövri siqnalın tezliyinə çoxlu olan tezliklərlə ortonormal dövri funksiyalar toplusunda (məsələn, sinuslar və kosinuslar) seriyaya genişləndirilə bilər. Beləliklə, siqnalın spektral təhlili, modulu bütün harmoniklərin ümumi superpozisiyasına daxil edilmiş müvafiq harmonikanın salınma gücünün fraksiyasına uyğun gələn çəki əmsallarının (ümumi halda, kompleks) axtarışına əsaslanır.

Sürətli Furye çevrilməsi

Sürətli Furye Transformasiyası, diskret Furye çevrilməsində (DFT) lazımsız hesablamaların qarşısını almaq üçün triqonometrik funksiyaların dövrilik xassələrindən uğurla istifadə edən və bununla da Furye genişlənməsində əmsalların tapılmasını sürətləndirən hesablama alqoritmidir. Diskret çevrilmədən əsas fərq yalnız ədədi dəyərlərin (alqoritm) hesablanması metodundadır, siqnalın işlənməsinin özündə deyil. Həm FFT-də, həm də DFT-də hesablamaların nəticəsi eynidir. FFT alqoritmi üçün yeganə tələb N = 2L-in qatı olan nümunə ölçüsüdür, burada L hər hansı müsbət tam ədəddir. Ən çox yayılmış baza-2 FFT alqoritmləri bunlardır: vaxt azaldılmış və tezlik azalmışdır.

Bu işdə zaman incəlmə ilə radix-2 FFT alqoritmi (Cooley-Tukey alqoritmi) həyata keçirilir. Bəzi DFT qanunlarını öyrənməklə əldə etmək asandır. Sözdə fırlanma əmsalı təqdim edək:

Bu halda, DFT-də bir sıra siqnal qiymətləri üçün Furye əmsalları (f0,f1,…,fN-1) əlaqə ilə ifadə edilir:

4 qiymətdən ibarət siqnal seriyasını nəzərdən keçirək: (f0,f1,f2,f3). Furye çevrilməsini matris şəklində təqdim edək (normallaşma əmsalı 1/N ifadənin sağ tərəfində Cij sütun vektoruna daxil edilmişdir):

Eyler düsturundan istifadə edərək fırlanma əmsallarını yazdıqdan və k = 0, 1, 2, .. 9 üçün qiymətlərini təyin etdikdən sonra, təkrarlanan əmsalların nümunəsini görmək üçün bir diaqram qura bilərsiniz (Şəkil 2).

Şəkil 2. N=4 üçün güc seriyası w

Ədədi dəyərləri (4) yerinə qoyaraq alırıq:

Yəni w4-dən başlayaraq w-nin dəyərləri w0-dan w3-ə uyğun olan qiymətə bərabərdir. Sonra, (4) matris tənliyini qeyri-standart formada yenidən yazırıq (sonrakı əməliyyatların aydınlığı üçün oxşar qeydlər təqdim olunur):

Matrisin sütunlarını iki qrupa ayıraraq dəyişdirək: cüt f0, f2 və tək f1, f3 indeksləri ilə:

Nəzərə alaq ki, wk+1 = wkw1, onda (6) ifadəsi belə yenidən yazılacaq:

Nisbətlərdən istifadə:

Lazımi genişlənmə əmsallarını hüceyrə dəyərləri olan bir sütun vektoru şəklində alırıq:

Alqoritmin qrafik təsviri (şəkil 3) açıq qanadlı kəpənək kimi görünür, ona görə də bu hesablama metodu “kəpənək” adlanır.

Şəkil 3. 4 termindən ibarət bir sıra üçün kəpənək qrafiki

Beləliklə, alqoritmin ilk addımında bir sıra siqnal dəyərlərinin üzvləri cüt və tək indekslərə bölünür. Sonra "kəpənək" qrafiki yerinə yetirilir, iki mərhələdən ibarətdir, onların sayı nümunə ölçüsünün ikisinin gücünə bərabərdir (N = 4 = 22). Hər mərhələdə iki "kəpənək" yerinə yetirilir və onların ümumi sayı dəyişməz qalır. Hər bir kəpənək əməliyyatı bir vurma əməliyyatına uyğun gəlir. Müqayisə üçün: seçmə (f0,f1,f2,f3) ilə DFT-də vurma əməliyyatı 4×4 = 16 dəfə, FFT vəziyyətində isə yalnız 4 dəfə yerinə yetirilməlidir.

Bu seriyanı da belə yazmaq olar:

(2),
burada , k-ci kompleks amplituda.

(1) və (3) əmsalları arasındakı əlaqə aşağıdakı düsturlarla ifadə edilir:

Qeyd edək ki, Furye seriyasının bütün bu üç təsviri tamamilə ekvivalentdir. Bəzən Furye silsiləsi ilə işləyərkən sinus və kosinus əvəzinə xəyali arqumentin eksponentlərindən istifadə etmək, yəni Furye çevrilməsindən mürəkkəb formada istifadə etmək daha rahat olur. Lakin (1) düsturundan istifadə etmək bizim üçün əlverişlidir, burada Furye seriyası müvafiq amplituda və fazalarla kosinusların cəmi kimi təqdim olunur. Hər halda, real siqnalın Furye çevrilməsinin mürəkkəb harmonik amplitüdlərlə nəticələnəcəyini söyləmək düzgün deyil. Wiki-nin düzgün dediyi kimi, “Furye çevrilməsi (?) real dəyişənin bir funksiyasını digər funksiya ilə, həmçinin real dəyişənlə əlaqələndirən əməliyyatdır.”

Ümumi:
Siqnalların spektral analizinin riyazi əsası Furye çevrilməsidir.

Furye çevrilməsi, seqmentdə (0, T) sonsuz sayda (sonsuz sıra) triqonometrik funksiyaların (sinus və/və ya kosinus) cəmi kimi müəyyən edilmiş fasiləsiz f(x) funksiyasını (siqnal) təmsil etməyə imkan verir. amplitüdlər və fazalar, həmçinin seqmentdə (0, T) nəzərə alınır. Belə bir sıra Furye seriyası adlanır.

Furye transformasiyasının siqnal analizinə düzgün tətbiqi üçün başa düşülməsi tələb olunan daha bir neçə məqamı qeyd edək. Furye sırasını (sinusoidlərin cəmini) bütün X oxunda nəzərə alsaq, görərik ki, (0, T) seqmentindən kənarda Furye seriyası ilə təmsil olunan funksiya vaxtaşırı bizim funksiyamızı təkrarlayacaq.

Məsələn, 7-ci qrafada orijinal funksiya seqmentdə (-T\2, +T\2) müəyyən edilir və Furye seriyası bütün x oxunda müəyyən edilmiş dövri funksiyanı təmsil edir.

Bu, sinusoidlərin özləri dövri funksiyalar olduğu üçün baş verir və buna görə də onların cəmi dövri funksiya olacaqdır.


Şəkil 7 Qeyri-dövri orijinal funksiyanın Furye seriyası ilə təsviri

Beləliklə:

Bizim orijinal funksiyamız davamlı, qeyri-dövridir, T uzunluğunun müəyyən seqmentində müəyyən edilir.
Bu funksiyanın spektri diskretdir, yəni o, harmonik komponentlərin sonsuz seriyası - Furye seriyası şəklində təqdim olunur.
Əslində, Furye seriyası (0, T) seqmentində bizimkinə uyğun gələn müəyyən dövri funksiyanı müəyyənləşdirir, lakin bizim üçün bu dövrilik əhəmiyyətli deyil.

Harmonik komponentlərin dövrləri ilkin f(x) funksiyasının təyin olunduğu seqmentin (0, T) qiymətinin qatlarıdır. Başqa sözlə, harmonik dövrlər siqnalın ölçülməsi müddətinin qatlarıdır. Məsələn, Furye seriyasının birinci harmonikasının dövrü f(x) funksiyasının təyin olunduğu T intervalına bərabərdir. Furye seriyasının ikinci harmonikasının dövrü T/2 intervalına bərabərdir. Və s. (şək. 8-ə baxın).


Şəkil.8 Furye seriyasının harmonik komponentlərinin dövrləri (tezlikləri) (burada T = 2?)

Müvafiq olaraq, harmonik komponentlərin tezlikləri 1/T-nin qatıdır. Yəni, Fk harmonik komponentlərinin tezlikləri Fk = k\T-ə bərabərdir, burada k 0-dan?-ə qədər dəyişir, məsələn k = 0 F0 = 0; k=1 F1=1\T; k=2 F2=2\T; k=3 F3=3\T;… Fk= k\T (sıfır tezlikdə - sabit komponent).

İlkin funksiyamız T=1 saniyə ərzində qeydə alınmış siqnal olsun. Onda birinci harmonikanın dövrü T1=T=1 saniyə siqnalımızın müddətinə bərabər olacaq və harmonik tezlik 1 Hz olacaq. İkinci harmonikanın dövrü siqnal müddətini 2-yə bölməklə bərabər olacaq (T2=T/2=0.5 san) və tezlik 2 Hz olacaq. Üçüncü harmonik üçün T3=T/3 san və tezlik 3 Hz-dir. Və s.

Bu halda harmoniklər arasındakı addım 1 Hz-dir.

Beləliklə, müddəti 1 saniyə olan bir siqnal 1 Hz tezlik qətnaməsi ilə harmonik komponentlərə (spektr əldə etməklə) parçalana bilər.
Qətnaməni 2 dəfə 0,5 Hz-ə qədər artırmaq üçün ölçmə müddətini 2 dəfə - 2 saniyəyə qədər artırmaq lazımdır. 10 saniyə davam edən siqnal 0,1 Hz tezlik həlli ilə harmonik komponentlərə (spektr əldə etmək üçün) parçalana bilər. Tezliyin həllini artırmaq üçün başqa yollar yoxdur.

Nümunələr massivinə sıfırlar əlavə etməklə siqnalın müddətini süni şəkildə artırmağın bir yolu var. Lakin bu, faktiki tezlik qətnaməsini artırmır.

3. Diskret siqnallar və diskret Furye çevrilməsi

Rəqəmsal texnologiyanın inkişafı ilə ölçmə məlumatlarının (siqnalların) saxlanması üsulları da dəyişdi. Əgər əvvəllər siqnal maqnitofonda qeydə alınaraq analoq formada lentdə saxlanıla bilirdisə, indi siqnallar rəqəmləşdirilir və nömrələr toplusu (nümunələr) kimi kompüterin yaddaşında fayllarda saxlanılır.

Siqnalın ölçülməsi və rəqəmsallaşdırılması üçün adi sxem aşağıdakı kimidir.


Şəkil 9 Ölçmə kanalının diaqramı

-dən siqnal ölçmə çeviricisi T müddətində ADC-yə çatır. T vaxtı ərzində alınan siqnal nümunələri (nümunə götürmə) kompüterə ötürülür və yaddaşda saxlanılır.


Şəkil 10 Rəqəmləşdirilmiş siqnal - T vaxtı ərzində qəbul edilən N nümunə

Siqnalın rəqəmsallaşdırılması parametrlərinə hansı tələblər qoyulur? Giriş analoq siqnalını diskret koda çevirən cihaz ( rəqəmsal siqnal) analoqdan rəqəmə çevirici (ADC, ingiliscə Analog-to-digital converter, ADC) adlanır (Wiki).

ADC-nin əsas parametrlərindən biri maksimum seçmə tezliyidir (yaxud seçmə sürəti, ingiliscə nümunə dərəcəsi) - seçmə zamanı fasiləsiz siqnalın seçmə sürəti. Hertz ilə ölçülür. ((Viki))

Kotelnikov teoreminə görə, əgər fasiləsiz siqnal Fmax tezliyi ilə məhdudlaşan spektrə malikdirsə, o zaman onu zaman intervallarında götürülmüş diskret nümunələrindən tam və birmənalı şəkildə yenidən qurmaq olar. , yəni. Fd tezliyi ilə? 2*Fmax, burada Fd seçmə tezliyidir; Fmax - siqnal spektrinin maksimum tezliyi. Başqa sözlə, siqnalın rəqəmsallaşdırılması tezliyi (ADC seçmə tezliyi) ölçmək istədiyimiz siqnalın maksimum tezliyindən ən azı 2 dəfə yüksək olmalıdır.

Kotelnikov teoreminin tələb etdiyindən daha aşağı tezlikli nümunələr götürsək nə olacaq?

Bu halda, yüksək tezlikli siqnalın rəqəmsallaşdırıldıqdan sonra əslində mövcud olmayan aşağı tezlikli siqnala çevrildiyi "alasing" effekti (həmçinin stroboskopik effekt, moir effekti kimi tanınır) baş verir. Şəkildə. 5 qırmızı yüksək tezlikli sinus dalğası əsl siqnaldır. Daha aşağı tezlikli mavi sinusoid, seçmə zamanı yüksək tezlikli siqnalın yarısından çoxunun keçməsinə vaxt tapması səbəbindən yaranan uydurma bir siqnaldır.


düyü. 11. Qeyri-kafi yüksək seçmə sürətində yalançı aşağı tezlikli siqnalın görünüşü

Aliasing effektinin qarşısını almaq üçün ADC-nin qarşısında xüsusi anti-aliasing filtri - ADC seçmə tezliyinin yarısından aşağı tezlikləri keçirən və daha yüksək tezlikləri kəsən aşağı keçid filtri (LPF) yerləşdirilir.

Bir siqnalın spektrini onun diskret nümunələrindən hesablamaq üçün diskret Furye çevrilməsindən (DFT) istifadə olunur. Bir daha qeyd edək ki, “tərifinə görə” diskret siqnalın spektri Fd seçmə tezliyinin yarısından az olan Fmax tezliyi ilə məhdudlaşır. Buna görə də, spektri qeyri-məhdud ola bilən fasiləsiz siqnalın Furye seriyası üçün sonsuz cəmindən fərqli olaraq, diskret siqnalın spektri sonlu sayda harmoniklərin cəmi ilə təmsil oluna bilər. Kotelnikovun teoreminə görə, harmonikanın maksimum tezliyi elə olmalıdır ki, o, ən azı iki nümunəni təşkil etsin, buna görə də harmoniklərin sayı diskret siqnalın nümunələrinin sayının yarısına bərabərdir. Yəni nümunədə N nümunə varsa, o zaman spektrdəki harmoniklərin sayı N/2-yə bərabər olacaqdır.

İndi diskret Furye çevrilməsini (DFT) nəzərdən keçirək.

Furye seriyası ilə müqayisə

Onların üst-üstə düşdüyünü görürük, istisna olmaqla, DFT-də vaxt təbiətdə diskretdir və harmoniklərin sayı N/2 ilə məhdudlaşır - nümunələrin yarısı.

DFT düsturları k, s ölçüsüz tam dəyişənlərdə yazılır, burada k siqnal nümunələrinin nömrələri, s spektral komponentlərin nömrələridir.
s dəyəri T dövründə (siqnalın ölçülməsi müddəti) tam harmonik salınımların sayını göstərir. Diskret Furye çevrilməsi ədədi üsuldan istifadə edərək harmoniklərin amplitüdlərini və fazalarını tapmaq üçün istifadə olunur, yəni. "komputerdə"

Başlanğıcda əldə edilən nəticələrə qayıdaq. Yuxarıda qeyd edildiyi kimi, qeyri-dövri funksiyanı (bizim siqnalımızı) Furye sırasına genişləndirərkən, əldə edilən Furye seriyası əslində T dövrü olan dövri funksiyaya uyğun gəlir (şək. 12).


Şəkil 12 Dövri funksiya f(x) dövrü T0, ölçmə dövrü T>T0 ilə

Şəkil 12-dən göründüyü kimi f(x) funksiyası T0 dövrü ilə dövridir. Bununla belə, T ölçmə nümunəsinin müddəti T0 funksiyasının müddəti ilə üst-üstə düşmədiyi üçün Furye seriyası kimi alınan funksiya T nöqtəsində kəsilməyə malikdir. Nəticədə bu funksiyanın spektri aşağıdakılardan ibarət olacaqdır. çoxlu sayda yüksək tezlikli harmoniklər. Ölçmə nümunəsinin müddəti T T0 funksiyasının müddəti ilə üst-üstə düşərsə, Furye çevrilməsindən sonra əldə edilən spektr yalnız birinci harmonikdən (nümunə götürmə müddətinə bərabər olan sinusoiddən) ibarət olardı, çünki f(x) funksiyası sinusoiddir.

Başqa sözlə desək, DFT proqramı siqnalımızın “sinusoid parçası” olduğunu “bilmir”, lakin dövri funksiyanı silsilə şəklində təqdim etməyə çalışır ki, bu da ayrı-ayrı hissələrin uyğunsuzluğu səbəbindən fasiləsizliyə malikdir. sinusoid.

Nəticədə, spektrdə harmoniklər meydana çıxır ki, bu da funksiyanın formasını, o cümlədən bu kəsilməni yekunlaşdırmalıdır.

Beləliklə, müxtəlif dövrlərə malik bir neçə sinusoidin cəmi olan siqnalın "düzgün" spektrini əldə etmək üçün hər bir sinusoidin dövrlərinin tam sayının siqnal ölçmə dövrünə uyğun olması lazımdır. Praktikada bu şərt siqnalın ölçülməsinin kifayət qədər uzun müddətində yerinə yetirilə bilər.


Şəkil 13 Sürət qutusunun kinematik xəta siqnalının funksiyası və spektrinin nümunəsi

Daha qısa müddətlə şəkil "daha pis" görünəcək:


Şəkil 14 Rotor vibrasiya siqnalının funksiyası və spektrinin nümunəsi

Təcrübədə, komponentlərin çox olmayan dövrləri və siqnal seçmə müddəti və ya siqnal şəklində "sıçrayışlar və qırılmalar" nəticəsində yaranan "əsl komponentlərin" harada olduğunu və "artefaktların" harada olduğunu başa düşmək çətin ola bilər. . Təbii ki, “real komponentlər” və “artefaktlar” sözləri bir səbəbə görə dırnaq içərisində qoyulur. Spektr qrafikində çoxlu harmoniklərin olması o demək deyil ki, bizim siqnal əslində onlardan “ibarətdir”. Bu, 7 rəqəminin 3 və 4 rəqəmlərindən “ibarət” olduğunu düşünməklə eynidir. 7 rəqəmi 3 və 4 rəqəmlərinin cəmi kimi göstərilə bilər - bu düzgündür.

Beləliklə, bizim siqnalımız... daha doğrusu, hətta “bizim siqnalımız” deyil, siqnalımızı təkrarlamaqdan (nümunə götürməkdən) ibarət olan dövri funksiya müəyyən amplituda və fazalarla harmoniklərin (sinus dalğalarının) cəmi kimi təqdim edilə bilər. Lakin təcrübə üçün vacib olan bir çox hallarda (yuxarıdakı rəqəmlərə baxın) həqiqətən də spektrdə əldə edilən harmonikləri tsiklik xarakter daşıyan və siqnalın formasına əhəmiyyətli töhfə verən real proseslərlə əlaqələndirmək mümkündür.

Bəzi nəticələr

1. ADC ilə rəqəmləşdirilən, yəni diskret nümunələr dəsti (N ədəd) ilə təmsil olunan T saniyə müddəti olan real ölçülən siqnal harmoniklər dəsti (N/) ilə təmsil olunan diskret qeyri-dövri spektrə malikdir. 2 ədəd).

2. Siqnal real dəyərlər toplusu ilə, onun spektri isə real dəyərlər toplusu ilə təmsil olunur. Harmonik tezliklər müsbətdir. Riyaziyyatçılar üçün mənfi tezliklərdən istifadə edərək spektri kompleks formada təqdim etməyin daha əlverişli olması “bu, düzgündür” və “bunu həmişə etmək lazımdır” demək deyil.

3. T zaman intervalında ölçülən siqnal yalnız T zaman intervalında müəyyən edilir. Siqnalın ölçülməsinə başlamazdan əvvəl baş verənlər və bundan sonra nə baş verəcəyi elmə məlum deyil. Və bizim vəziyyətimizdə bu, maraqlı deyil. Zamanla məhdudlaşan siqnalın DFT-si özünün “həqiqi” spektrini verir, o mənada ki, müəyyən şərtlərdə onun komponentlərinin amplitudasını və tezliyini hesablamağa imkan verir.

İstifadə olunan materiallar və digər faydalı materiallar.

Ekran cihazı kimi iki sətirli LCD göstərici istifadə olunur. Bu layihənin həyata keçirilməsində əsas məqam aparat yox, proqram təminatı, daha doğrusu 8 bitlik mikrokontrollerdə diskret Furye transformasiyasının (DFT) həyata keçirilməsidir. Dərhal qeyd etmək lazımdır ki, müəllif bu sahədə mütəxəssis deyil və buna görə də əsaslarla - sadə diskret Furye çevrilməsi ilə başlamışdır. Sürətli Furye çevirmə alqoritmi təkcə sürətli deyil, həm də kifayət qədər mürəkkəbdir.

Diskret Furye Transformasiyası (ingilis ədəbiyyatında DFT, Discrete Fourier Transform) rəqəmsal siqnalların emalı alqoritmlərində geniş istifadə olunan Furye transformasiyalarından biridir (onun modifikasiyaları MP3-də audio sıxılmada, JPEG-də təsvirin sıxılmasında və s. istifadə olunur), həmçinin diskret (məsələn, rəqəmsal analoq) siqnalda tezliklərin təhlili ilə əlaqəli digər sahələr. Diskret Furye çevrilməsi giriş kimi diskret funksiya tələb edir. Bu cür funksiyalar tez-tez seçmə yolu ilə yaradılır (davamlı funksiyalardan dəyərlər seçmə).

Spektr analizatorunun sxematik diaqramı səs siqnalıçox sadədir və təxminən rəqəmsal və analoq hissələrə bölünə bilər.

Rəqəmsal hissə mikrokontroller və ona qoşulmuş LCD göstərici ilə formalaşır. Mikrokontroller saatla bağlıdır kvars rezonatoru 16 MHz, +5 V təchizatı gərginliyi mikrokontrolörün ADC üçün istinad gərginliyi kimi istifadə olunur.
LCD göstəricinin məlumat şini mikrokontrolörün C portuna (giriş/çıxış xətləri PC0-PC3), idarəetmə şini mikrokontrolörün D portuna (PD5, PD6) qoşulur. Göstərici 4 bitlik rejimdə işləyir. Kontrastı tənzimləmək üçün nominal dəyəri 4,7 kOhm olan dəyişən rezistor istifadə olunur. Göstərici ilə işləmək üçün analizatorun 8 üfüqi sütununu göstərmək üçün xüsusi simvollar yaradılmışdır; bu xüsusi simvollar LCD indikatorun bütün 64 Bayt RAM-ni tutur.

Mikrokontroller xarici 16 MHz kvars rezonatorundan işləyir.

Cihazın analoq hissəsi ən vacib hissədir və çıxışı mikrokontrollerə quraşdırılmış ADC-nin ADC0 kanalına qoşulan elektret mikrofon siqnalının əvvəlcədən gücləndiricisidir. ADC girişində sıfır səviyyəsini istinad gərginliyinin tam yarısına təyin etməliyik, yəni. 2.5 V. Bu vəziyyətdə siqnalın müsbət və mənfi yarım dalğasından istifadə edə bilərik, lakin onun amplitudası müəyyən edilmiş həddi keçməməlidir, yəni. Aşırı yüklənmənin qarşısını almaq üçün qazanc yaxşı tənzimlənməlidir. Yuxarıda göstərilən bütün şərtlər ümumi aşağı güclü əməliyyat gücləndirici mikrosxem tərəfindən qarşılanır.

DFT alqoritmi Sürətli Furye Transformasiyası ilə müqayisədə bir qədər yavaşdır. Amma bizim spektr analizatorumuz yüksək sürət tələb etmir və o, saniyədə təxminən 30 kadr yeniləmə sürətini təmin edə bilsə, bu, audio siqnalın spektrini vizuallaşdırmaq üçün kifayət edər. Hər halda, bizim versiyamızda saniyədə 100 kadr sürətinə nail olmaq mümkündür, lakin bu, iki sətirli xarakterli LCD göstərici üçün artıq çox yüksək parametr dəyəridir və tövsiyə edilmir. Nümunə alma tezliyi 32 nöqtəli diskret Furye transformasiyası üçün 20 kHz-dir və çevrilmənin nəticəsi simmetrik olduğundan, biz yalnız birinci yarıdan istifadə etməliyik, yəni. ilk 16 nəticə. Buna görə də, 10 kHz-ə qədər tezlik spektrini göstərə bilərik və analizatorun həlli 10 kHz/16 = 625 Hz-dir.

Dizaynın müəllifi DFT hesablamalarının sürətini artırmaq üçün cəhdlər etdi. Bu çevrilmənin N nöqtəsi varsa, o zaman sinus və kosinusun N2/2 dəyərlərini tapmalıyıq. 32 nöqtəli çevrilməmiz üçün 512 sinus və kosinus dəyərlərini tapmalıyıq. Lakin, onları tapmazdan əvvəl, CPU-nun müəyyən vaxtını alacaq bucağı (dərəcələri) hesablamalıyıq, buna görə də bu hesablamalar üçün dəyər cədvəllərindən istifadə etmək qərara alındı. Mikrokontroller proqramında hesablama zamanı üzən nöqtə və ikiqat dəqiqlikli ədədlərdən istifadə edilmir, çünki bunun 8 bitlik mikrokontrollerdə işləməsi daha çox vaxt aparacaq. Bunun əvəzinə axtarış cədvəllərindəki dəyərlər 10000-ə vurulan 16 bitlik tam verilənlərdən istifadə edir. Sonra çevrilməni həyata keçirdikdən sonra nəticələr 10000-ə bölünür. Bu yanaşma ilə saniyədə 120 32 nöqtəli çevirmə həyata keçirmək mümkündür. , bu bizim cihazlar üçün kifayət qədərdir.

ATmega32 mikrokontrollerində spektr analizatorunun işinin nümayişi

Yükləmələr

Mənbə kodu (mikrokontroller proqramı, sinus, kosinus və bucaq məlumat cədvəlləri) -

  • Aydındır ki, AVR-də işıq və musiqidən irəli getmək çətindir, parametrlər düzgün deyil. Lakin saniyədə 120 32 ballıq çevrilmə əksər tapşırıqlar üçün kifayət ola bilər. Və əlbəttə ki, 625Hz-lik başqa bir nümunə götürə bilərsiniz, daha doğrusu yeniləmə sürətini itirə bilərsiniz. Qeyd etmək lazımdır ki, MK özünü pis hiss edəcək, performans baxımından, onu bağlaya biləcəyiniz başqa bir şey yoxdur. Ancaq burada aparat məlumat ötürmə üsullarından istifadə edərək nəticənin çıxışını təşkil edə bilərsiniz. Sonra o, köməkçi mikrokontroller olacaq və əsas yalnız ondan məlumatları qəbul edəcək və digər proseslərə uyğun olaraq emal edəcəkdir. Ümumiyyətlə, bu, hələ də prosessorun tezliyindən asılıdır. Bir vaxtlar 20 MHz-dən yuxarı meqa sürətini aşırtmaq mümkün idi, lakin bu tapşırıqlar üçün biz yəqin ki, yalnız yüksək tezliklərdə nasazlıqlar alacağıq. İdeya yaxşıdır, əgər daha çox riyaziyyat hissələri yazılsaydı... bu, onun MK-da həyata keçirilməsidir
  • Mən də daha maraqlı analizatorlar hazırladım: You Tube və ya rəngli LCD-də versiya: You Tube məşhur Chen kitabxanasına əsaslanır :)
  • "Biz bucağı (dərəcə) hesablamalıyıq" Kimsə bizə bu cədvəllər üçün dəyərlərin necə hesablandığını daha ətraflı izah edə bilərmi?
  • Sinuslar və kosinuslar cədvəli ilə hər şey aydındır. Dərəcə_axtarış cədvəlindəki dəyərlərin necə hesablandığı aydın deyil?

Bütün siqnallar, istər onları uydurmusunuz, istərsə də Kainatda müşahidə etmisinizsə, əslində müxtəlif tezliklərin sadə sinus dalğalarının cəmidir.

16x2 LCD və ATmega32 mikrokontrolöründən kiçik audio spektr analizatoru (0 - 10 kHz) hazırladım. Mən sadə DFT-lərlə (Discrete Fourier Transform) başladım. FFT (Fast Fourier Transform) DFT-dən yalnız daha yüksək sürəti və bir qədər mürəkkəb alqoritmi ilə fərqlənir, istifadə etməmişəm, bəlkə sonra əlavə edəcəm.

DFT, FFT ilə müqayisədə yavaşdır. Mənim LCD spektr analizatorum FFT-nin təmin edə biləcəyi yüksək sürət tələb etmir və ekrandakı təsvir təxminən 30 kadr/san sürətlə dəyişirsə, bu, audio spektri vizuallaşdırmaq üçün kifayətdir. Amma mən artıq təxminən 100 kadr sürətinə nail ola bilirəm, lakin LCD üçün çox yüksək yeniləmə dərəcəsi tövsiyə edilmir. 20 kHz-də nümunə götürülmüş audio 32 DFT nöqtəsi yaradır. Transformasiya nəticəsi simmetrik olduğundan, yalnız ilk 16 nəticədən istifadə etməliyəm. Müvafiq olaraq, maksimum tezlik 10 kHz-dir. Beləliklə, 10kHz/16 = 625Hz.

DFT hesablama sürətini artırmağa çalışırdım. Əgər N DFT nöqtəsi varsa, o zaman sinus və kosinusu (N^2)/2 tapmalıyıq.32 nöqtəli DFT üçün 512-nin sinusunu və kosinusunu tapmalıyıq.Sinusu və kosinusu tapmazdan əvvəl, bir qədər CPU vaxtını tutan bucağı (dərəcə) tapmalıyıq. Bunun üçün sinus və kosinus üçün cədvəllər hazırladım. Sinus və kosinus dəyərlərini 10000-ə vuraraq 16 bitlik sinus və kosinus dəyişənləri yaratdım. Dönüşümdən sonra hər nəticəni 10000-ə bölməliyəm. İndi saniyədə 120 32 nöqtəli DFT hesablaya bilirəm ki, bu da ondan çoxdur. spektr analizatoru üçün kifayətdir.

Ekran

Mən bort LCD yaddaşının 64 baytına yüklənmiş xüsusi LCD simvollardan istifadə etdim. İnternetdə 16x2 LCD-nin spektr analizatoru ekranı kimi istifadə edildiyi bir video gördüm və bu ideyadan istifadə etdim.

Audio giriş

Spektr analizatorunun ən vacib hissələrindən biri elektrik mikrofonundan siqnal əldə etməkdir. İnkişafa xüsusi diqqət yetirilməlidir preamp mikrofon üçün. ADC girişində sıfır səviyyəsini və təchizatı gərginliyinin yarısına bərabər olan maksimum səviyyəni təyin etməliyik, yəni. 2.5V. -2,5V-dən +2,5V-ə qədər gərginliklə təchiz oluna bilər. Əvvəlcədən gücləndirici bu hədləri aşmamaq üçün konfiqurasiya edilməlidir. Mikrofon gücləndiricisi kimi LM324 op amp istifadə etdim.

Radioelementlərin siyahısı

Təyinat Növ Denominasiya Kəmiyyət QeydMağazaMənim bloknotum
Ekran
MK AVR 8 bitlik

ATmega32

1 Notepad üçün
Kondansatör22 pF2 Notepad üçün
Kondansatör0,1 µF1 Notepad üçün
Elektrolitik kondansatör100 µF1 Notepad üçün
Rezistor

100 Ohm

1 Notepad üçün
Trimmer rezistoru4,7 kOhm1 Notepad üçün
Kvars rezonatoru16 MHz1 Notepad üçün
LCD displey16x21 Notepad üçün
güc qurğusu5 V1 Notepad üçün
Audio giriş
U1 Əməliyyat gücləndiricisi

LM324

1 Notepad üçün
C1 Kondansatör1 µF1 Notepad üçün
C8 Kondansatör0,01 µF1 Notepad üçün
R1 Rezistor

220 kOhm

1 Notepad üçün
R2, R3 Rezistor

10 kOhm

2 Notepad üçün
R4, R9 Rezistor

1 kOhm

2 Notepad üçün
R5 Rezistor

Rəqəmsal siqnalın emalı (DSP) üçün bir çox ixtisaslaşdırılmış prosessorlar mövcuddur, məsələn, Texas Instruments TMS320 seriyasından olan DSP, həm sadə tam ədəd nüvələrini, həm də üzən nöqtə məlumatlarını emal edən C6000 ailəsinin alt ailəsi kimi canavarları ehtiva edir. Analog Devices-dən bütöv bir ADSP seriyası var (buraya daha çox və ya daha az universal BlackFin daxildir), daha çoxu da var. sadə həllər MicroChip-dən - dsPIC.

Bununla belə, ixtisaslaşmış bir DSP yaxşıdır, lakin həmişə bu qədər lazımdırmı? Bəli, böyük bir məlumat axını ilə sadəcə əvəzolunmazdır, lakin daha sadə emal tapşırıqları da var. Konkret olaraq, ikiqat konversiya tapşırığı ilə maraqlandım - səs siqnalı bükülür, bununla da spektr əldə edilir, sonra spektrdə istənilən əməliyyatlar edilə bilər və tərs çevrilmə həyata keçirilə bilər, bununla da işlənmiş siqnal əldə edilir. Bütün bunları real vaxtda etmək və telefon keyfiyyətindən aşağı olmayan keyfiyyət əldə etmək lazımdır.

Bu, 2000-ci il deyil, qiymətləri əhəmiyyətli dərəcədə aşağı düşmüş yüksək performanslı ARM7/Cortex-M3 nüvələrinə əsaslanan tək çipli həllər var; onlar 32 bitdir, 32 bitlik vurma əməliyyatının aparat proqram təminatına malikdir (üstəlik). , demək olar ki, bir DSP vurma-yığma əməliyyatı və 64 bit nəticə) və Cortex-M3 də hardware bölməsini ehtiva edir.

Dərhal sizi xəbərdar etmək istəyirəm ki, siqnalın işlənməsi mənim ixtisasım deyil, demək olar ki, bütün biliklər (daha doğrusu, prinsipləri başa düşmək) institutdan qorunub saxlanılmışdı, amma indi sadəcə onu sınaqdan keçirmək və həyata keçirmək istədim. Demək istədiyim odur ki, təsvirdə, anlayışların əvəzində və s.-də qeyri-dəqiqliklər ola bilər. Əslində, akademik dəqiqlik məni çox da narahat etmirdi.

Demək olar ki, hər hansı bir DSP üçün yuxarıda göstərilən tapşırıq sadə və sadədir. Bəs ümumi təyinatlı RISC nüvəsi onunla necə davranacaq? AVR və ya PIC-i nəzərə alsaq, onların kifayət etmə ehtimalı yoxdur. 8 bitlik və aşağı saat tezliyi təsir göstərir. Baxmayaraq ki, Elm-Chanın AVR-də FFT apardığı və siqnalın spektrini çəkdiyi dizaynları var. Bununla belə, bu halda, real vaxt rejimində sadəcə vizuallaşdırma aparılır (minimum emal dəqiqliyi ilə) və məqbul səs keyfiyyəti ilə siqnalın tam işlənməsi deyil.

LPC2146 eksperimental çip kimi ARM7TDMI-S nüvəsinə əsaslanan və maksimum takt tezliyinə 60 MHz (praktikada 72 və hətta 84 MHz tezliyi ilə işləmir) seçildi. Niyə? Birincisi, bunun üçün bir debug lövhəm var, ikincisi, bortda bir ADC və DAC var, yəni. minimum xarici trim tələb olunur.

Bir az nəzəriyyə

İlk növbədə, ARM mikrokontrollerlərində FFT (Fast Furier Transform) işini qiymətləndirmək maraqlı idi. Bu qiymətləndirməyə əsaslanaraq, onun audio məlumat axını emal etmək üçün kifayət qədər sürətə malik olub-olmadığını və belə bir mikrokontrolördə hansı seçmə tezliyi və neçə kanalın işlənə biləcəyi ilə bağlı bir nəticəyə gələ bilərik.

Furye çevrilməsinə əsaslanaraq, siz ağıllı filtrlər (çox cəlbedici xüsusiyyətlərə malik) yarada bilərsiniz. Məni ilk növbədə siqnalın tonunun dəyişdirilməsi (spektri qaldırmaq və endirmək) və spektri “əks etdirmək” problemləri maraqlandırırdı. Sonuncu LSB aşağı yan zolaqlı radio yayımlarına qulaq asmaq üçün SDR radiolarında tələb olunur.

Mən sizə nəzəriyyə yükləməyəcəyəm və Furye Transformasiyasının nə olduğunu izah etməyəcəm; mənim istifadə etdiklərimdən bu mövzuda kifayət qədər çoxlu materiallar var: wiki və çox yaxşı və məlumatlandırıcı kitabdan bir fəsil.

Proqram təminatının həyata keçirilməsi

FFT-nin bir çox proqram tətbiqi var, lakin mən özümü yazdım. Təqib etdiyim əsas məqsəd müəyyən bir arxitektura üçün kodu optimallaşdırmaq idi. Birincisi, mən dərhal 32 bitə diqqət yetirdim, ikincisi, yalnız tam hesablamalar tələb olunurdu və bölmə əməliyyatından qaçmaq arzu edilirdi. Bu tələblərə cavab verən hazır bir şey tapmaq artıq problemlidir.

Əvvəlcədən hesablana bilən bütün sabitlər hesablanmış və cədvəllərə yerləşdirilmişdir (əsasən triqonometrik funksiyaların dəyərləri). Bu, alqoritmin əsas optimallaşdırılmasıdır, əks halda təsvir olunan alqoritmi demək olar ki, tamamilə təkrarlayır.

Ən vacibi tam hesablamalar üçün tələbdir. Tətbiq prosesi zamanı hətta 32 bitlik döngə dəyişənlərindən birində daşmağa səbəb olan bir səhv də var idi. Üstəlik, bütün test məlumatlarında görünmədi, buna görə də tapılana qədər olduqca baş ağrısına səbəb oldu.

Mən bütün mənbə mətnləri bir arxivdə topladım. Tətbiq yekun deyil, dublikat hesablamalar var (spektr və faza simmetriyası nəzərə alınmır) və buferlərin istifadəsinin optimallaşdırılması tələb olunur, çünki hazırda hesablamalar üçün çoxlu sayda istifadə olunur. təsadüfi giriş yaddaşı(1024 nöqtəyə çevrilmə üçün demək olar ki, 12k).

İlk sınaqlar

Drum roll: Mən 1024 bal nümunəsi üçün çevrilmə sürətini sınayıram, prosessor nüvəsinin tezliyi 60 MHz-dir. Test bir emulyatorda aparıldı, buna görə də 100% dəqiq olduğunu iddia etmir, lakin bu nəticə göstərici kimi istifadə edilə bilər (əvvəlki təcrübəmdə, emulyator yalan danışsa da, çox deyildi). Kodun ilk versiyasının testi, RealView MDK kompilyatoru, O3 optimallaşdırma variantı, ARM kodu yaratmaq rejimi.

Beləliklə, gördüyümüz şey:

Hər bir dönüşüm üçün 6ms, gediş-gəliş üçün cəmi 12ms-dən çox. Məlum olub ki, 44100Hz (səs üçün standart) seçmə tezliyi və 16 bitə qədər ayırdetmə qabiliyyəti olan nümunələr ilə təmiz hesablamalar ~44*12ms = 528ms aparacaq. Və bu, bəzi kod optimallaşdırmaları hələ tamamlanmadıqda (hesablamalara görə, alqoritmi demək olar ki, 2 dəfə sürətləndirmək olar) proqram təminatının aralıq versiyasındadır! Məncə, bu, sadəcə əla göstəricidir.

Ümumilikdə, əsas yükün təxminən 50% olacağı gözlənilir, daha 50% ADC-lər, DAC-lər və digər məlumat ötürülməsi ilə işləyərkən spektr üzrə dönüşümlər və əlavə xərclər üçün qalır. Nümunə alma tezliyini "telefon" səviyyəsinə (təxminən 4800-9600Hz) endirsəniz, əsas yük daha da aşağı olacaq (təxminən 15-30%).

Deməli, riyazi hissə az-çox aydındır. Konkret həyata keçirməyə davam edə bilərsiniz.

Dəmir

Test platforması üçün dinamikli Keil MCB2140 inkişaf lövhəsindən istifadə etdik. Cihazın xətti çıxışına qoşulmaq üçün Mini-Jack şnurunu lehimlənir və sadə giriş zənciri yığılır. Artıq qeyd edildiyi kimi, lövhədə artıq mikrokontrolörün analoq çıxışına qoşulmuş dinamik var və idarəedicilər (düymə və potensiometr) var.

Budur giriş dövrəsinin eskizi:


Proqram təminatının sazlanması mərhələlərlə baş verdi:

  1. Bütün lazımi periferik qurğuların sazlanması: ADC, DAC, taymerlər, LED göstəricisi.
  2. Siqnalın rəqəmləşdirilməsi ilə test edin: Mən məlumatları lazımi sürətlə rəqəmləşdirirəm və buferə qoyuram, sonra məlumatları buferdən çıxarıram və siqnalı oynayıram. Bunlar. heç bir çevrilmə olmadan zamanla sadə siqnal dəyişməsi. Bu mərhələdə sonrakı iş üçün zəruri olan 2 tamponla işləmə mexanizmi sınaqdan keçirilir.
  3. TO əvvəlki versiya birbaşa və tərs Furye çevrilmələri əlavə olunur. Bu test nəhayət FFT kodunun düzgün işləməsini yoxlayır, həmçinin kodun mövcud performansa uyğunluğunu yoxlayır.
  4. Bundan sonra tətbiqin əsas skeleti hazırlanır, praktik tətbiqlərə keçə bilərsiniz.

Koda FFT əlavə edildikdən sonra problem yarandı: siqnalda kənar səs-küy və fitlər göründü. Ümumiyyətlə, bu davranış mənə olduqca qəribə göründü, çünki... Dönüşüm olmadan, rəqəmsal yoldan keçən siqnal kifayət qədər təmiz qaldı. Bunun birinci səbəbi: analoq dövrədən sonra ADC-də siqnal amplitudası tam deyildi (0-3,3V), ancaq pleyerin maksimum həcmində yalnız 0,5-2V daxilində, ikincisi: tam ədədə görə kifayət qədər güclü səs-küy. hesablamalar (+-1 vahid, bunun səsli müdaxiləyə səbəb olmaq üçün kifayət olduğu ortaya çıxdı).

İlk problemlə mübarizə aparmaq üçün analoq hissəni tənzimləməyə başlamaq qərara alındı. Problemi səs-küy ilə həll etmək üçün aşağı keçid filtrindən istifadə etməyə çalışın.

Tətbiq 1: siqnalın tonunun dəyişdirilməsi

Lövhədə potensiometr var ( dəyişən rezistor), nəzarət üçün istifadə edilə bilər. Bu halda, o, sevimli kompozisiyalarınızı "çevirmək" üçün kifayət qədər yüksək və aşağı sürüşmə üçün siqnal spektrini təyin edir.

Tezlik domenində baş verənlər:


Bu halda, çevrilmə nəticəsi 2 tamponda saxlanılır. Bir tampon real hissə, digəri isə xəyali hissədir. Onlarda alınan ədədlərin fiziki mənası: həqiqi hissədə harmoniklərin dəyərləri, xəyali hissədə bu harmoniklər üçün faza sürüşməsi var. Üstəlik, gördüyünüz kimi, ilkin siqnal N-dəyərləri ilə təsvir edilir və çevrildikdən sonra 2N-dəyərləri alınır. Məlumatın miqdarı dəyişmir və məlumatın həcminin 2 dəfə artması bufer məlumatlarında dəyərlərin təkrarlanması şəklində artıqlığa malik olması səbəbindən baş verir.




Üst