C++ ൽ SDR DVB-T2 റിസീവർ

സോഫ്റ്റ്‌വെയർ നിർവചിക്കപ്പെട്ട റേഡിയോ എന്നത് പ്രോഗ്രാമിംഗിന്റെ തലവേദന ഉപയോഗിച്ച് മെറ്റൽ വർക്ക് മാറ്റിസ്ഥാപിക്കുന്ന ഒരു രീതിയാണ് (അത് നിങ്ങളുടെ ആരോഗ്യത്തിന് ശരിക്കും നല്ലതാണ്). SDR-കൾ ഒരു മികച്ച ഭാവി പ്രവചിക്കുന്നു, റേഡിയോ പ്രോട്ടോക്കോളുകൾ നടപ്പിലാക്കുന്നതിലെ നിയന്ത്രണങ്ങൾ നീക്കം ചെയ്യുന്നതാണ് പ്രധാന നേട്ടമായി കണക്കാക്കപ്പെടുന്നത്. ഒരു ഉദാഹരണം OFDM (ഓർത്തോഗണൽ ഫ്രീക്വൻസി-ഡിവിഷൻ മൾട്ടിപ്ലക്‌സിംഗ്) മോഡുലേഷൻ രീതിയാണ്, ഇത് SDR രീതിയിലൂടെ മാത്രമേ സാധ്യമാകൂ. എന്നാൽ SDR-ന് ഒന്നുകൂടി ഉണ്ട്, പൂർണ്ണമായും എഞ്ചിനീയറിംഗ് അവസരമുണ്ട് - ഏത് അനിയന്ത്രിതമായ പോയിന്റിലും ഏറ്റവും കുറഞ്ഞ പരിശ്രമത്തിൽ ഒരു സിഗ്നൽ നിയന്ത്രിക്കാനും ദൃശ്യവൽക്കരിക്കാനും ഉള്ള കഴിവ്.

രസകരമായ ആശയവിനിമയ മാനദണ്ഡങ്ങളിൽ ഒന്ന് ടെറസ്ട്രിയൽ ടെറസ്ട്രിയൽ ടെലിവിഷൻ DVB-T2 ആണ്.
എന്തിനുവേണ്ടി? തീർച്ചയായും, നിങ്ങൾക്ക് എഴുന്നേൽക്കാതെ ടിവി ഓണാക്കാൻ കഴിയും, പക്ഷേ അവിടെ കാണാൻ ഒന്നുമില്ല, ഇത് എന്റെ അഭിപ്രായമല്ല, മറിച്ച് ഒരു മെഡിക്കൽ വസ്തുതയാണ്.

ഗുരുതരമായി, DVB-T2 വളരെ വിപുലമായ കഴിവുകളോടെയാണ് രൂപകൽപ്പന ചെയ്തിരിക്കുന്നത്, ഇനിപ്പറയുന്നവ ഉൾപ്പെടെ:

  • ഇൻഡോർ ആപ്ലിക്കേഷൻ
  • QPSK-ൽ നിന്ന് 256QAM-ലേക്ക് മോഡുലേഷൻ
  • 1,7MHz മുതൽ 8MHz വരെയുള്ള ബാൻഡ്‌വിഡ്ത്ത്

SDR തത്വം ഉപയോഗിച്ച് ഡിജിറ്റൽ ടെലിവിഷൻ സ്വീകരിക്കുന്നതിൽ എനിക്ക് അനുഭവമുണ്ട്. DVB-T നിലവാരം അറിയപ്പെടുന്ന GNURadio പ്രോജക്റ്റിലാണ്. DVB-T2 സ്റ്റാൻഡേർഡിനായി ഒരു gr-dvbs2rx ബ്ലോക്ക് ഉണ്ട് (എല്ലാം ഒരേ GNURadio-യ്ക്ക്), എന്നാൽ ഇതിന് പ്രാഥമിക സിഗ്നൽ സമന്വയം ആവശ്യമാണ്, ഇത് പ്രചോദനാത്മകമാണ് (റോൺ ഇക്കണോമോസിന് പ്രത്യേക നന്ദി).

നമുക്കുള്ളത്.

പ്രക്ഷേപണത്തെ വിശദമാക്കുന്ന ഒരു ETSI EN 302 755 സ്റ്റാൻഡേർഡ് ഉണ്ട്, എന്നാൽ സ്വീകരണമല്ല.

9,14285714285714285714 MHZ ബാൻഡിൽ 32768 കാരിയറുകളുള്ള COFDM മോഡുലേറ്റ് ചെയ്‌ത 8 MHz സാമ്പിൾ ഫ്രീക്വൻസിയിൽ സിഗ്നൽ ഓൺ എയർ ആണ്.

ഡയറക്ട് കറന്റ് (ഡിസി) ഓഫ്‌സെറ്റും ലോക്കൽ ഓസിലേറ്ററിന്റെ “ലീക്കേജും” ഒഴിവാക്കാൻ, സാമ്പിൾ ഫ്രീക്വൻസിയുടെ ഇരട്ടിയും (ഒന്നും നഷ്ടപ്പെടാതിരിക്കാൻ) ഇന്റർമീഡിയറ്റ് ഫ്രീക്വൻസിയിൽ കൂടുതൽ ബാൻഡ്‌വിഡ്ത്തും (സൂപ്പർഹെറ്ററോഡൈൻ റിസപ്ഷൻ) അത്തരം സിഗ്നലുകൾ സ്വീകരിക്കാൻ ശുപാർശ ചെയ്യുന്നു. (LO) റിസീവർ ഇൻപുട്ടിലേക്ക്. ഈ വ്യവസ്ഥകൾ നിറവേറ്റുന്ന ഉപകരണങ്ങൾ കേവലം ജിജ്ഞാസയ്ക്കായി വളരെ ചെലവേറിയതാണ്.

10Msps 10bit ഉള്ള SdrPlay അല്ലെങ്കിൽ സമാനമായ സ്വഭാവസവിശേഷതകളുള്ള AirSpy വളരെ വിലകുറഞ്ഞതാണ്. ഇവിടെ സാമ്പിൾ ഫ്രീക്വൻസി ഇരട്ടിയാക്കുമെന്ന ചോദ്യമില്ല, നേരിട്ടുള്ള പരിവർത്തനം (സീറോ ഐഎഫ്) ഉപയോഗിച്ച് മാത്രമേ റിസപ്ഷൻ ചെയ്യാൻ കഴിയൂ. അതിനാൽ (സാമ്പത്തിക കാരണങ്ങളാൽ) ഏറ്റവും കുറഞ്ഞ ഹാർഡ്‌വെയർ പരിവർത്തനത്തോടെ "ശുദ്ധമായ" SDR-ന്റെ അനുയായികളുടെ ഭാഗത്തേക്ക് ഞങ്ങൾ മാറുന്നു.

രണ്ട് പ്രശ്നങ്ങൾ പരിഹരിക്കേണ്ടത് ആവശ്യമാണ്:

  1. സമന്വയം. കൃത്യമായ ഘട്ടം-കൃത്യമായ RF വ്യതിയാനവും സാമ്പിൾ ഫ്രീക്വൻസി വ്യതിയാനവും കണ്ടെത്തുക.
  2. DVB-T2 സ്റ്റാൻഡേർഡ് പിന്നിലേക്ക് വീണ്ടും എഴുതുക.

രണ്ടാമത്തെ ടാസ്‌ക്കിന് കൂടുതൽ കോഡ് ആവശ്യമാണ്, പക്ഷേ സ്ഥിരോത്സാഹത്തോടെ പരിഹരിക്കാനും ടെസ്റ്റ് സിഗ്നലുകൾ ഉപയോഗിച്ച് എളുപ്പത്തിൽ പരിശോധിക്കാനും കഴിയും.

വിശദമായ നിർദ്ദേശങ്ങൾക്കൊപ്പം BBC സെർവറിൽ ftp://ftp.kw.bbc.co.uk/t2refs/ ടെസ്റ്റ് സിഗ്നലുകൾ ലഭ്യമാണ്.

ആദ്യ പ്രശ്നത്തിനുള്ള പരിഹാരം SDR ഉപകരണത്തിന്റെ സവിശേഷതകളെയും അതിന്റെ നിയന്ത്രണ ശേഷികളെയും ആശ്രയിച്ചിരിക്കുന്നു. ശുപാർശ ചെയ്യുന്ന ഫ്രീക്വൻസി കൺട്രോൾ ഫംഗ്‌ഷനുകൾ ഉപയോഗിക്കുന്നത്, അവർ പറയുന്നതുപോലെ, വിജയിച്ചില്ല, പക്ഷേ അവ വായിക്കുന്നതിന് ധാരാളം അനുഭവം നൽകി. ഡോക്യുമെന്റേഷൻ, പ്രോഗ്രാമിംഗ്, ടിവി സീരീസ് കാണൽ, ദാർശനിക ചോദ്യങ്ങൾ പരിഹരിക്കൽ ..., ചുരുക്കത്തിൽ, പദ്ധതി ഉപേക്ഷിക്കാൻ കഴിഞ്ഞില്ല.

"ശുദ്ധമായ SDR" യിലുള്ള വിശ്വാസം കൂടുതൽ ശക്തമായി.

ഞങ്ങൾ സിഗ്നൽ അതേപടി എടുക്കുന്നു, അത് ഏതാണ്ട് ഒരു അനലോഗിലേക്ക് ഇന്റർപോളേറ്റ് ചെയ്യുകയും വ്യതിരിക്തമായ ഒന്ന് പുറത്തെടുക്കുകയും ചെയ്യുന്നു, എന്നാൽ യഥാർത്ഥമായതിന് സമാനമാണ്.

സിൻക്രൊണൈസേഷൻ ബ്ലോക്ക് ഡയഗ്രം:

C++ ൽ SDR DVB-T2 റിസീവർ

ഇവിടെ എല്ലാം പാഠപുസ്തകം അനുസരിച്ചാണ്. അടുത്തത് കുറച്ചുകൂടി സങ്കീർണ്ണമാണ്. വ്യതിയാനങ്ങൾ കണക്കാക്കേണ്ടതുണ്ട്. വ്യത്യസ്ത രീതികളുടെ ഗുണങ്ങളും ദോഷങ്ങളും താരതമ്യം ചെയ്യുന്ന ധാരാളം സാഹിത്യങ്ങളും ഗവേഷണ ലേഖനങ്ങളും ഉണ്ട്. ക്ലാസിക്കുകളിൽ നിന്ന് - ഇതാണ് "മൈക്കൽ സ്പെത്ത്, സ്റ്റെഫാൻ ഫെച്ച്ടെൽ, ഗുന്നർ ഫോക്ക്, ഹെൻറിച്ച് മേയർ, ഒഫ്ഡിഎം അടിസ്ഥാനമാക്കിയുള്ള ബ്രോഡ്ബാൻഡ് ട്രാൻസ്മിഷനുള്ള ഒപ്റ്റിമം റിസീവർ ഡിസൈൻ - ഭാഗം I, II." എന്നാൽ എണ്ണാൻ കഴിയുന്ന ഒരു എഞ്ചിനീയറെയും ഞാൻ കണ്ടിട്ടില്ല, അതിനാൽ ഒരു എഞ്ചിനീയറിംഗ് സമീപനം ഉപയോഗിച്ചു. അതേ സിൻക്രൊണൈസേഷൻ രീതി ഉപയോഗിച്ച്, ടെസ്റ്റ് സിഗ്നലിലേക്ക് ഡിറ്റ്യൂണിംഗ് അവതരിപ്പിച്ചു. അറിയപ്പെടുന്ന വ്യതിയാനങ്ങളുമായി വ്യത്യസ്ത അളവുകോലുകളെ താരതമ്യം ചെയ്തുകൊണ്ട് (അവൻ അവ സ്വയം പരിചയപ്പെടുത്തി), പ്രകടനത്തിനും എളുപ്പത്തിൽ നടപ്പിലാക്കുന്നതിനുമായി മികച്ചവ തിരഞ്ഞെടുത്തു. ഗാർഡ് ഇടവേളയും അതിന്റെ ആവർത്തന ഭാഗവും താരതമ്യം ചെയ്താണ് റിസപ്ഷൻ ഫ്രീക്വൻസി വ്യതിയാനം കണക്കാക്കുന്നത്. സ്വീകരിക്കുന്ന ആവൃത്തിയുടെ ഘട്ടവും സാമ്പിൾ ഫ്രീക്വൻസിയും പൈലറ്റ് സിഗ്നലുകളുടെ ഘട്ടം വ്യതിയാനത്തിൽ നിന്ന് കണക്കാക്കുന്നു, ഇത് ഒരു OFDM സിഗ്നലിന്റെ ലളിതവും ലീനിയർ ഇക്വലൈസറിലും ഉപയോഗിക്കുന്നു.

ഇക്വലൈസർ സ്വഭാവം:

C++ ൽ SDR DVB-T2 റിസീവർ

DVB-T2 ഫ്രെയിം എപ്പോൾ ആരംഭിക്കുമെന്ന് നിങ്ങൾക്കറിയാമെങ്കിൽ ഇതെല്ലാം നന്നായി പ്രവർത്തിക്കുന്നു. ഇത് ചെയ്യുന്നതിന്, ആമുഖ ചിഹ്നം P1 സിഗ്നലിൽ കൈമാറ്റം ചെയ്യപ്പെടുന്നു. P1 ചിഹ്നം കണ്ടെത്തുന്നതിനും ഡീകോഡ് ചെയ്യുന്നതിനുമുള്ള രീതി സാങ്കേതിക സ്പെസിഫിക്കേഷൻ ETSI TS 102 831-ൽ വിവരിച്ചിരിക്കുന്നു (സ്വീകരണത്തിന് ഉപയോഗപ്രദമായ നിരവധി ശുപാർശകളും ഉണ്ട്).

പി 1 സിഗ്നലിന്റെ ഓട്ടോകോറിലേഷൻ (ഫ്രെയിമിന്റെ തുടക്കത്തിലെ ഏറ്റവും ഉയർന്ന പോയിന്റ്):

C++ ൽ SDR DVB-T2 റിസീവർ

ആദ്യ ചിത്രം (ചലിക്കുന്ന ചിത്രം വരാൻ ഇനി ആറുമാസം മാത്രം...):

C++ ൽ SDR DVB-T2 റിസീവർ

ഇവിടെയാണ് IQ അസന്തുലിതാവസ്ഥ, DC ഓഫ്‌സെറ്റ്, LO ലീക്കേജ് എന്നിവ എന്താണെന്ന് നമ്മൾ പഠിക്കുന്നത്. ചട്ടം പോലെ, നേരിട്ടുള്ള പരിവർത്തനത്തിന് പ്രത്യേകമായ ഈ വികലങ്ങൾക്കുള്ള നഷ്ടപരിഹാരം SDR ഉപകരണ ഡ്രൈവറിൽ നടപ്പിലാക്കുന്നു. അതിനാൽ, മനസിലാക്കാൻ വളരെ സമയമെടുത്തു: സൗഹൃദപരമായ QAM64 നക്ഷത്രസമൂഹത്തിൽ നിന്ന് നക്ഷത്രങ്ങളെ തട്ടിമാറ്റുന്നത് നഷ്ടപരിഹാര പ്രവർത്തനങ്ങളുടെ പ്രവർത്തനമാണ്. എല്ലാം ഓഫാക്കി ബൈക്ക് എഴുതേണ്ടി വന്നു.

തുടർന്ന് ചിത്രം നീങ്ങി:

C++ ൽ SDR DVB-T2 റിസീവർ

DVB-T64 സ്റ്റാൻഡേർഡിലെ നിർദ്ദിഷ്ട നക്ഷത്രരാശി ഭ്രമണത്തോടുകൂടിയ QAM2 മോഡുലേഷൻ:

C++ ൽ SDR DVB-T2 റിസീവർ

ചുരുക്കത്തിൽ, ഇറച്ചി അരക്കൽ വഴി അരിഞ്ഞ ഇറച്ചി തിരികെ കടത്തിവിടുന്നതിന്റെ ഫലമാണിത്. സ്റ്റാൻഡേർഡ് നാല് തരം മിക്സിംഗ് നൽകുന്നു:

  • ബിറ്റ് ഇന്റർലേവിംഗ്
  • സെൽ ഇന്റർലീവിംഗ് (ഒരു കോഡിംഗ് ബ്ലോക്കിൽ സെല്ലുകൾ കലർത്തുന്നു)
  • സമയം ഇന്റർലീവിംഗ് (ഇത് എൻകോഡിംഗ് ബ്ലോക്കുകളുടെ ഗ്രൂപ്പിലും ഉണ്ട്)
  • ഫ്രീക്വൻസി ഇന്റർലീവിംഗ് (ഒരു OFDM ചിഹ്നത്തിൽ ഫ്രീക്വൻസി മിക്സിംഗ്)

തൽഫലമായി, ഇൻപുട്ടിൽ ഞങ്ങൾക്ക് ഇനിപ്പറയുന്ന സിഗ്നൽ ഉണ്ട്:

C++ ൽ SDR DVB-T2 റിസീവർ

എൻകോഡ് ചെയ്ത സിഗ്നലിന്റെ ശബ്ദ പ്രതിരോധത്തിനുള്ള പോരാട്ടമാണ് ഇതെല്ലാം.

ഫലം

ഇപ്പോൾ നമുക്ക് സിഗ്നലും അതിന്റെ രൂപവും മാത്രമല്ല, സേവന വിവരങ്ങളും കാണാൻ കഴിയും.
രണ്ട് മൾട്ടിപ്ലക്സുകൾ സംപ്രേഷണം ചെയ്യുന്നുണ്ട്. ഓരോന്നിനും രണ്ട് ഫിസിക്കൽ ചാനലുകൾ (PLP) ഉണ്ട്.

ആദ്യ മൾട്ടിപ്ലെക്സിൽ ഒരു വിചിത്രത ശ്രദ്ധയിൽപ്പെട്ടു - ആദ്യത്തെ PLP യെ "മൾട്ടിപ്പിൾ" എന്ന് ലേബൽ ചെയ്‌തിരിക്കുന്നു, അത് യുക്തിസഹമാണ്, കാരണം മൾട്ടിപ്ലക്‌സിൽ ഒന്നിൽ കൂടുതൽ ഉണ്ട്, രണ്ടാമത്തെ PLP യെ "സിംഗിൾ" എന്ന് ലേബൽ ചെയ്തിരിക്കുന്നു, ഇതൊരു ചോദ്യമാണ്.
അതിലും രസകരമായത് രണ്ടാമത്തെ മൾട്ടിപ്ലക്സിലെ രണ്ടാമത്തെ വിചിത്രതയാണ് - എല്ലാ പ്രോഗ്രാമുകളും ആദ്യ PLP യിലാണ്, എന്നാൽ രണ്ടാമത്തെ PLP യിൽ കുറഞ്ഞ വേഗതയിൽ ഒരു അജ്ഞാത സ്വഭാവത്തിന്റെ ഒരു സിഗ്നൽ ഉണ്ട്. അമ്പതോളം വീഡിയോ ഫോർമാറ്റുകളും അതേ അളവിലുള്ള ഓഡിയോയും മനസ്സിലാക്കുന്ന VLC പ്ലെയറെങ്കിലും ഇത് തിരിച്ചറിയുന്നില്ല.

പദ്ധതി തന്നെ ഇവിടെ കാണാം.

SdrPlay (ഇപ്പോൾ AirSpy.) ഉപയോഗിച്ച് DVB-T2 ഡീകോഡ് ചെയ്യാനുള്ള സാധ്യത നിർണ്ണയിക്കുക എന്ന ലക്ഷ്യത്തോടെയാണ് പ്രോജക്റ്റ് സൃഷ്ടിച്ചത്, അതിനാൽ ഇത് ഒരു ആൽഫ പതിപ്പ് പോലുമല്ല.

PS ഞാൻ പ്രയാസത്തോടെ ലേഖനം എഴുതുമ്പോൾ, പ്രോജക്റ്റിലേക്ക് പ്ലൂട്ടോഎസ്ഡിആർ സംയോജിപ്പിക്കാൻ എനിക്ക് കഴിഞ്ഞു.

USB6 ഔട്ട്‌പുട്ടിൽ IQ സിഗ്നലിനായി 2.0Msps മാത്രമേ ഉള്ളൂ എന്ന് ആരെങ്കിലും ഉടൻ പറയും, എന്നാൽ നിങ്ങൾക്ക് കുറഞ്ഞത് 9,2Msps ആവശ്യമാണ്, എന്നാൽ ഇത് ഒരു പ്രത്യേക വിഷയമാണ്.

അവലംബം: www.habr.com

ഒരു അഭിപ്രായം ചേർക്കുക