ADSP-BF533, Problēma ar dalot signālu

W

Wojtek

Guest
Hi visiem! Es esmu strādā pie ģitāras efektu pie ADSP-BF533 EZ-Kit Lite, un man ir problēma ar apstrādi ienākošo paraugus: No izejas es veselu vērtību, tad es konvertēt to peldēt ar vienkāršu "sample_float = (peldēt ) sample_int; ", pēc tam es apstrādātu paraugu un pārvērst to atpakaļ uz skaitlim to pašu ceļu un nosūtīt to uz produkciju. Problēma ir tā, ka tad, kad es mēģināt reizināt paraugu jebkura vērtība ir mazāka par 1, tas rada traucējumus. Es cenšos tikt galā ar to jau vairākas nedēļas, bet es nevaru iedomāties neko. Es zinu Blackfin procesori ir fiksēto punktu arhitektūru un būtu vieglāk pāriet uz haizivs procesoru, bet tas ir neiespējami, tas ir jābūt ADSP-BF533. Vai ir kāds veids, kā to darīt anyway? Es ceru, ka es tev pietiekami daudz informācijas par manu projektu, ja nav, lūdzu, ļaujiet man zināt, ko citi informācija jums man palīdzēt atrast risinājumu, tas ir ļoti svarīgi, lai man. Sveicieni! Wojte
 
Sveiki Wojte, Vai jums ir plānošanas C? Ja jūsu pārvērst atpakaļ no pludiņa int bez citu apstrādi, ir joprojām sagrozīšana? Vai jūs varat post kādu kodu? Sveicieni Z
 
Sveiki Zorro, es esmu programmēšana C. Ja es tikai pārvērst paraugu no int peldēt un tad atpakaļ no uzpeld int nemainot tā vērtību, nav kropļošana. Es esmu spējīgs vairoties to, piemēram, 2, problēma ir tikai tad, kad es mēģināt reizināt izlasi, kaut ko mazāk nekā 1. Pat ja es pārietu pārveidojot peldēt un mēģināt vairoties veselu izlasi ar 0,5 (vai dalīt pa 2), tur ir Z izkropļošanu. Mans kods ir ļoti vienkārša, ja jūs izmantojat VisualDSP + +, tā ir balstīta uz C_Talkthrough_I2S piemērs projektu. Katru jaunu paraugu pie ieejas izraisa pārtraukumu, kad funkcija Process_Data () sauc. Tas ir oriģināls Process_Data () funkcija:
Code:
 neesošu Process_Data (neesošs) {iChannel0LeftOut = iChannel0LeftIn; iChannel0RightOut = iChannel0RightIn; iChannel1LeftOut = iChannel1LeftIn; iChannel1RightOut = iChannel1RightIn;}
Tas funkcija ar manu izmaiņām:
Code:
 neesošu Process_Data (spēkā neesošs) {peldēt paraugs; paraugs = (peldēt) iChannel1RightIn / / tur ir tikai viens kanāls es esmu, izmantojot izlasi * = 0.5f; / / bez šīs līnijas viss ir kārtībā iChannel1RightOut = (int) paraugs;} [/kods] Sveicieni Wojtek
 
Hi Wojtek kods liekas ok. iChannel1RightIn un iChannel1RightOut tiek deklarēti kā int, vai ne? Vai esat pārliecināts, ka jūsu signāla līmenis ir pietiekami? Es domāju, ka tas nav tik vāja, ka, piemēram, tā aptver tikai 2 bitiem, un zaudēt vismazāk nozīmīgais bits (kā tad, kad jūs sadalīt pa 2) tev signāls kļūst krietni lielāks izkropļota. Sveicieni Z
 
Čau, Signāla līmenis būtu labi, ja es parādītu vērtību iChannel1RightIn/Out uz atkļūdošanas logu, tas ir starp 0 un 0xFFFFFF9. Pavairošana par 0,9 arī izraisa traucējumus, tā ka nav problēmu, es domāju. Es esmu sazinājies Analog Devices procesoru atbalsts un aprakstīti manu problēmu, man šādu atbildi:
Blackfin procesors ļauj tikai konversiju starp dalītu un peldošo punktu vērtību. Ir arī iebūvēts funkcija pieejama dažāda veida formātā conversions.The float.h header fails definē īpašības peldošo datu tipu īstenotajām kompilatoru. Lūdzu atrast sīkāku informāciju par to novērojam kompilators rokasgrāmatā, kura saite ir: Sveicieni, Wojtek
 
Tas būtu dīvaini, ja es parādītu to aiz tā 16 777 209, izlases pārvērš peldēt ir tāda pati vērtība un diapazons ir no 0 līdz 16 777 209, tāpēc es neesmu pārliecināts, ka ir kādi negatīvas vērtības. Labāko! Wojtek
 
Vērtība decimālā 16 777 209 ir līdzvērtīga 0xFFFFFF9 heksadecimālā, bet interpretēt kā neparakstīts . Jums ir jāizmanto parakstīts aritmētisko. iChannel1RightIn jādeklarē kā int (ti, ir parakstījusi int ). Lūdzu, pārbaudiet savu veidu visās vietās tā deklarēts. Sveicieni Z
 
Čau, iChannel1RightIn ir deklarēta kā int . Labāko! Wojtek
 
Sveiki Wojtek, dīvaini. Var būt veids, kā vērtības tiek parādītas? Šādā gadījumā jums vajadzētu saņemt tikai ļoti mazu vai ļoti liels skaits. Vai tas notiks? Ja, savu kodu parādīts amatā # 3, ti: paraugs = (peldēt) iChannel1RightIn / / tur ir tikai viens kanāls es esmu, izmantojot Parauga * = 0.5f / / bez šīs līnijas viss ir kārtībā iChannel1RightOut = (int) parauga , jūs parādīt iChannel1RightOut, kādas vērtības jūs saņemsiet? Sveicieni Z
 
Hi! Kad es parādīt iChannel1RightOut vērtība pēc dalot izlasi ar 2 es saņemt pusi no iChannel1RightIn, lai tā būtu labi, problēma ir ar skaņu. Labākais, Wojtek
 
Sveiki, es domāju, piemēram apsvērt iChannel1RightIn ir 0xFFFFFF9 (ekvivalents 16.777.209 neparakstītu decimālo vai -7 parakstīts). Kad jūs sadalīt to ar 2 rezultāts ir vai nu decimālais 8.388.604 = 0x7FFFFC (ja tas tiek uzskatīts neparakstīts mainīgais pirms sadalīšanas) vai decimāldaļu -3 = 0xFFFFFD (ja tas tiek uzskatīts parakstīts). Pirmajā gadījumā, jāņem tas, kas parakstīts (pēc sadalīšanas) ir liels kļūdu un rezultāts ir ļoti augsta līmeņa un izkropļošana. Sveicieni Z
 
Čau, piedod jo kavējas mana atbilde - man bija koncentrēties uz kaut ko citu, bet. Es esmu mēģinājis paziņot paraugus neparakstītu int un INT (ja vien tur ir cits veids, kā to darīt), bet tas nav svarīgi - katru reizi tur bija par produkciju sagrozīšana. Mans profesors saka, ka problēma varētu būt, pārveidojot no int peldēt. Es izmantoju vienkāršu (atvainojiet, bet es nezinu angļu vārdu šajā operācijā) float_input = (peldēt) int_input, (...) int_output = (int) float_input; Vai ir cits veids, kā konvertēt starp int un peldēt? Es esmu tikai atrast bibliotēkas ar funkcijas, lai pārvērstu starp pludiņu un Daļas, bet es nevaru atrast neko par konversiju starp int un peldēt. Labāko! Wojtek
 
Sveiki Wojtek,
es izmantot vienkāršu (atvainojiet, bet es nezinu angļu vārdu šajā operācijā) float_input = (peldēt) int_input, (...) int_output = (int) float_input,
Šis tipa pārveidošanas veidā tiek saukta par "cast" vai "liešana". Tā vajadzētu strādāt. Tā ir daļa no standarta C valodā un aicina specifiskas funkcijas, ja nepieciešams. Sveicieni Z
 
Sveiki, problēma atrisināta, paldies par jūsu padomiem. Problēma bija tā, ka ienākošie paraugi bija starp 0 un FFFFFF (24 b), un man bija, lai pārvērstu to ar 32 b. I shift 8 kreisie biti un nodot to peldēt. Pēc tam es esmu spējīgs veikt visas nepieciešamās darbības. Beidzot es cast float paraugu atpakaļ int un novirzīt 8 biti labi. Tas ir tik vienkārši. Ja tikai es domāju par to pirms pāris mēnešiem .. Paldies par jūsu palīdzību Z!
 

Welcome to EDABoard.com

Sponsor

Back
Top