Vao haingana, nanomboka nanontany ahy tsy miankina ny mpiara-miasa ao amin'ny "fivarotana": ahoana ny fomba hahazoana ny fantsona Bluetooth rehetra miaraka amin'ny mpandray SDR iray? Ny bandwidth dia mamela azy, misy SDRs miaraka amin'ny bandwidth output 80 MHz na mihoatra. Azonao atao, mazava ho azy, manao izany amin'ny FPGA, fa ny fotoana fampandrosoana toy izany dia ho ela. Efa hatry ny ela aho no nahalala fa tena tsotra ny fanaovana an'io amin'ny GPU, fa ny manao izany toy izany!
Ny fenitra Bluetooth dia mamaritra sosona ara-batana amin'ny dikan-teny roa: Classic sy Low Energy. Specification misy . Lehibe dia lehibe ilay rakitra, mampidi-doza ho an'ny atidoha ny famakiana azy manontolo. Soa ihany fa ny orinasan'ny teknolojia fandrefesana lehibe dia manana fitaovana hamoronana antontan-taratasy hita maso momba ny lohahevitra iray. и , Ohatra. Tsy manana fahafahana hifaninana amin'izy ireo mihitsy aho amin'ny lafiny kalitaon'ny fanolorana ny fitaovana. Raha liana ianao dia araho ny rohy.
Ny hany tokony ho fantatro momba ny sosona ara-batana mba hamoronana sivana multi-channel dia ny elanelan'ny tambajotra matetika sy ny tahan'ny modulation. Izy ireo dia voarakitra ao amin'ny iray amin'ireto antontan-taratasy manaraka ireto:

Noho izany, mila manapaka ny tarika 80 MHz isika amin'ny sivana 79 miaraka amin'ny dingana 1 MHz ary miaraka amin'ny sivana 40 miaraka amin'ny dingana 2 MHz. Tokony ho 1 MHz sy 2 MHz ny fatran'ny santionany avy amin'ny vokatra sivana.
Noho izany, mila banky sivana roa isika.
Voalohany, andao hifantina ny mason'ireo sivana ireo mifototra amin'ny tarika famantarana Bluetooth Classic sy Bluetooth Low Energy. Ilaintsika ny valin-kafatra ataon'izy ireo mba hanombanana ny enta-mavesatra eo amin'ny fitaovana informatika an'ny sivana. Eto dia ilaina ny manamarika avy hatrany fa nisafidy ny halavan'ny valin-kafatra mifototra amin'ny fepetra takian'ny algorithm fanivanana "faingana". Tsy miova amin'izany ny fotony. Ary tsy tokony ho be loatra ny isan'ny valin'ny impulse mba hampiharana ny sivana amin'ny fitaovana informatika salama.
Ho an'ny sivana miaraka amin'ny dingana 1 MHz, dia misafidy ny bandwidth sivana ambany (antsasaky ny bandwidth an'ny sivana band-pass) amin'ny 500 kHz, ary amboary ny halavan'ny valin'ny impulse ho 480 paompy. Ho an'ny sivana miaraka amin'ny dingana 2 MHz, dia hifidy ireo mari-pamantarana ireo ho 1 MHz sy 240 paompy, tsirairay avy. Mifidy karazana varavarankely Kaiser izahay. Andao kajy ny valin-kafatra ao amin'ny filterDesigner ary ampidiro amin'ny endrika C-header:
Pikantsary avy amin'ny filterDesigner




Azonao atao ny mamaha ny olana amin'ny fomba mahery vaika: manangana array DDC mifanaraka amin'ny isan'ny sivana (). Ity fomba fiasa ity dia tsara ho an'ny FPGA, izay ahafahana mitahiry amin'ny alàlan'ny fampihenana ny fahafaha-bitan'ny solosaina dingana voalohany. Ary koa, ny FPGA no fomba fampiharana mahomby indrindra amin'ny angovo. Saingy ny vidin'ny asa amin'ity fomba ity no ambony indrindra.
Rehefa mitantana banky sivana amin'ny GPU malaza ankehitriny, dia azo atao ny mampihatra algorithm be pitsiny kokoa: banky sivana polyphase mifototra amin'ny FFT, izay misy ao amin'ny CUDA ao amin'ny tranomboky. Amin'ny literatiora vahiny, ny algorithm dia antsoina hoe Polyphase na WOLA (Weight, Overlap and Add) FFT Filterbank. Ny hakamoana amin'ny fanaovana sary dia tsy manome ahy fahafahana hamita ny fanazavana hita maso irery. Be dia be ny fitaovana momba ny lohahevitra ao amin'ny Internet, misy grafika mazava indrindra natao eo amin'ny pejy faha-11 (misaotra betsaka ho an'ireo mpanoratra hajaina), indro:

Hiezaka aho hanazava ny rafitra fanodinana amin'ny teniko manokana. Aza mamaky ho an'ny reraka am-po.
Hiezaka aho hanazava ny rafitra fanodinana amin'ny teniko manokana ao anatin'ny rafitry ny fahaizako metodolojika. Ny FFT dia ny fifandonan'ny famantarana fampidiran-dresaka miaraka amin'ny spektrika manontolo amin'ny harmonic orthogonal sarotra izay mifanaraka amin'ny elanelan'ny valin'ny impulse. Ny valin-kafatra amin'ny sivana, izay ampitomboana ny famantarana alohan'ny fampidirana FFT, dia novaina tamin'ity spectra harmonic ity. Raha lazaina amin'ny teny hafa, ny valopy valin'ny impulse amin'ireo sivana tohotra vokatr'izany dia misy bracket. Fanampin'izay, mihena imbetsaka ny spektrum harmonic, noho ny fanitarana ny bandwidth sivana mifandraika amin'ny sivana ao amin'ny varavarankely mahitsizoro. Eo amin'ny sary dia mahita manify efatra isika. Raha lazaina amin'ny teny hafa, aorian'ny fanitarana ny tarika miaraka amin'ny varavarankely Kaiser (miaraka amin'ny fitomboan'ny attenuation ao amin'ny stopband), dia tsy mila ny sivana rehetra intsony isika, fa ny ampahefany amin'izy ireo. Ny ambiny dia mihemotra, mifanipaka ny toetran'ny fatrany. Amin'ireo teboka FFT efatra misesy, dia ny aotra iray ihany no fidintsika, ny kajikajy dia ny famintinana ny efatra.
teboka fampidirana nalaina taorian'ny fe-potoana mitovy amin'ny ampahefatry ny faharetan'ny FFT tany am-boalohany.
Hifidy ny vy izay eo am-pelatanana isika. Ireo singa mifandraika amin'ny FMC126P Efa nanoratra momba izany aho tamin'ny teo aloha . Ny submodule avy amin'ny orinasa iray miaraka amin'ny transceiver AD9371 miaraka amin'ny tarika 100 MHz dia ampidirina ao amin'ny mpampitohy FMC amin'ny birao. Ny stream manontolo avy amin'ny transceiver dia azo ampitaina hatrany amin'ny solosaina ho an'ny fanodinana.
Andeha isika hisafidy carte vidéo misy GPU GTX 1050. (Nandainga aho fa io no nisafidy antsika: io ihany no teo am-pelatanana, nesorina tao amin'ny ordinatera ny kajy antenne, fa vao mainka nahagaga ny nahita. fihogo miasa). Andao hiroso amin'ny ampahany amin'ny rindrambaiko.
Indrisy fa noho ny fahazoan-dàlana dia tsy afaka mamoaka ny kaody feno izahay. Ny cores GPU ihany no azontsika aseho. Na izany aza, ny sisa amin'ny kaody dia tsy tena mahaliana.
Ity ny kernel izay manao fampitomboana sy fanampim-panazavana amin'ny varavarankely, ary fonosana iray hiantsoana azy:
__global__ void cuComplexMultiplyWindowKernel(const cuComplex *data, const float *window, size_t windowSize, cuComplex *result) {
__shared__ cuComplex multiplicationResult[480];
multiplicationResult[threadIdx.x] = cuComplexMultiplyFloat(data[threadIdx.x + windowSize / 4 * blockIdx.x], window[threadIdx.x]);
__syncthreads();
cuComplex sum;
sum.x = sum.y = 0;
if (threadIdx.x < windowSize / 4) {
for(int i = 0; i < 4; i++) {
sum = cuComplexAdd(sum, multiplicationResult[threadIdx.x + i * windowSize / 4]);
}
result[threadIdx.x + windowSize / 4 * blockIdx.x] = sum;
}
}
cudaError_t cuComplexMultiplyWindow(const cuComplex *data, const float *window, size_t windowSize, cuComplex *result, size_t dataSize, cudaStream_t stream) {
size_t windowStep = windowSize / 4;
cuComplexMultiplyWindowKernel<<<dataSize / windowStep - 3, windowSize, 1024, stream>>>(data, window, windowSize, result);
return cudaGetLastError();
}
Ny kaody fanodinana famantarana izay miantso an'io kernel io dia mamerina tanteraka ny sarin'ny algorithm aseho amin'ny sary etsy ambony, ka tsy hitako izay antony hanolorana azy eto.
Ny tohotra dia nosedraina tamin'ny spektrum famoahana ny fantsona amin'ny fotoana tena izy. Famantarana mpamokatra famantarana 9371 MHz dia nomena ny fampidirana ny AD2450 ny fifantenana ny sivana mifanaraka amin'ny kajy.

Ny drafitra dia ahitana: fampifanarahana ny rindrambaiko amin'ny birao XRTX sy ny fampiharana ny fikarohana fonosana, raha misy mila izany na manana fotoana malalaka.
Vita ny asa rindrambaiko rehetra , voninahitra ho azy!
Source: www.habr.com
