• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      應(yīng)用Qt 的星座圖顯示方法及實(shí)現(xiàn)

      2023-08-16 05:00:44杜依亮張振邦
      無線互聯(lián)科技 2023年11期
      關(guān)鍵詞:數(shù)字通信星座圖開源

      杜依亮,顏 軍,張振邦

      (中國電波傳播研究所,山東 青島 266107)

      0 引言

      隨著現(xiàn)代電子技術(shù)的飛速發(fā)展,數(shù)字通信技術(shù)得到了快速發(fā)展,在通信領(lǐng)域中逐漸占據(jù)了統(tǒng)治地位[1]。 數(shù)字通信信號(hào)的調(diào)制方式趨于多樣化,利用調(diào)制識(shí)別技術(shù)快速穩(wěn)健地識(shí)別接收信號(hào)的調(diào)制方式變得非常重要。 數(shù)字通信信號(hào)調(diào)制識(shí)別,廣泛應(yīng)用在電子偵察、智能調(diào)制解調(diào)器、無線電資源管理、頻譜管理等軍事和民用領(lǐng)域[2]。 任何一種數(shù)字幅相調(diào)制信號(hào)都可以用唯一的星座圖表示,利用這種一一對(duì)應(yīng)的關(guān)系,星座圖可以作為一種特征用于調(diào)制方式的識(shí)別[3-6]。 文章針對(duì)數(shù)字信號(hào)調(diào)制識(shí)別技術(shù)對(duì)星座圖數(shù)據(jù)的需求,提出并實(shí)現(xiàn)了一種星座圖顯示及存儲(chǔ)方法,應(yīng)用Qt 開發(fā)了星座圖顯示存儲(chǔ)軟件,可實(shí)時(shí)顯示和保存多種調(diào)制樣式的數(shù)字通信信號(hào)的星座圖數(shù)據(jù)。

      1 星座圖基本理論

      數(shù)字通信領(lǐng)域中,經(jīng)常將數(shù)字信號(hào)在復(fù)平面上表示,以直觀地表示信號(hào)以及信號(hào)之間的關(guān)系,這種圖示就是星座圖。 星座圖是線性空間的延伸概念,便于更加方便形象地分析信號(hào),是信號(hào)分析的利器[7-8]。

      星座圖是相對(duì)于IQ 信號(hào)調(diào)制而言的,將數(shù)據(jù)信息(調(diào)制信息)映射到極坐標(biāo)中,其內(nèi)容包含了信號(hào)的幅度信息和相位信息(確切而言是初始相位),對(duì)于調(diào)制、解調(diào)、誤碼性能等有很直觀的判斷。

      1.1 IQ 信號(hào)調(diào)制

      一個(gè)數(shù)字通信信號(hào)有3 個(gè)隨時(shí)間變化的特性:幅度、相位和頻率。 在IQ 調(diào)制系統(tǒng)中,通過改變數(shù)字通信信號(hào)的幅度、相位或者頻率,實(shí)現(xiàn)對(duì)通信信號(hào)的調(diào)制。 通過幅移鍵控調(diào)制(Amplitude Shift Keying,ASK)進(jìn)行信號(hào)幅度的數(shù)字化調(diào)制,通過多進(jìn)制相移鍵控調(diào)制(Multiple Phase Shift Keying,MPSK)進(jìn)行相位的數(shù)字化調(diào)制,通過多進(jìn)制正交幅相調(diào)制(Multiple Quadrature Amplitude Modulation,MQAM)進(jìn)行幅度和相位的數(shù)字化調(diào)制。

      IQ 信號(hào)調(diào)制,也叫正交調(diào)制,通過改變正弦波的幅度、相位或者頻率,將基帶信號(hào)的信息加載到正弦波上。 加載了基帶信息的信號(hào)稱為已調(diào)信號(hào)(modulated signal),帶通已調(diào)信號(hào)可表示成:

      式(1)和式(2)是等價(jià)的,其中sl(t)是基帶信號(hào),s(t)是已調(diào)信號(hào)。

      IQ 調(diào)制的結(jié)果就是IQ 信號(hào),調(diào)制流程如圖1所示。

      圖1 IQ 信號(hào)調(diào)制流程

      I 路信號(hào)a 和Q 路信號(hào)b 為兩路輸入信號(hào),I 路信號(hào)通過乘法器與cos(ω0t)相乘,Q 路信號(hào)先后通過兩個(gè)乘法器分別與sin(ω0t)和-1 相乘,輸出的IQ 信號(hào)為:

      輸入IQ 調(diào)制器的兩路信號(hào),常被稱為復(fù)信號(hào),用復(fù)數(shù)表示為a+jb,對(duì)應(yīng)復(fù)平面上的一個(gè)點(diǎn)。 IQ 調(diào)制,可以利用復(fù)數(shù)乘法來實(shí)現(xiàn):

      式(4)中, a,b,cos(ω0t),sin(ω0t) 都為實(shí)信號(hào),最終輸出的IQ 信號(hào)s(t)也是實(shí)信號(hào)。

      1.2 IQ 信號(hào)解調(diào)

      IQ 調(diào)制后的信號(hào)通過天線輻射出去,經(jīng)信道傳輸?shù)竭_(dá)接收端,接收端收到信號(hào)后,進(jìn)行解調(diào)。 IQ 信號(hào)解調(diào)流程如圖2 所示。

      圖2 IQ 信號(hào)解調(diào)流程

      接收端收到信號(hào)s(t)后,分為兩路進(jìn)行解調(diào):一路通過乘法器與cos(ω0t) 相乘,另一路通過乘法器與-sin(ω0t) 相乘,再分別進(jìn)行積分,就可以得到原來的I 路信號(hào)a 和Q 路信號(hào)b。 I 路信號(hào)a 解調(diào)計(jì)算過程如下:

      Q 路信號(hào)b 解調(diào)計(jì)算過程如下:

      式(6)的計(jì)算用到了sin(2ω0t),cos(2ω0t) 在[-T/2,T/2]區(qū)間內(nèi)的積分為0,也就是正弦函數(shù)和余弦函數(shù)在一個(gè)周期內(nèi)的積分是0。 式(6)中的T,需要滿足條件:T 是T0的整數(shù)倍。 T0是cos(ω0t) 的周期。

      1.3 星座圖基本原理

      星座圖中,點(diǎn)到原點(diǎn)的距離代表的物理含義是:這個(gè)點(diǎn)對(duì)應(yīng)信號(hào)的能量,離原點(diǎn)越遠(yuǎn),表明信號(hào)能量越大。 相鄰兩個(gè)點(diǎn)的距離為歐氏距離,表示的是這種調(diào)制所具有的抗噪聲性能,歐氏距離越大,抗噪聲性能越好。

      對(duì)于16QAM 信號(hào)而言,既有幅度信息又有相位信息,將這兩個(gè)信息映射到坐標(biāo)軸上,橫坐標(biāo)是I 路,縱坐標(biāo)是Q 路,如點(diǎn)(1+j)就表示該點(diǎn)的幅度是,相位角是,如圖3 所示。

      圖3 BPSK,16QAM 星座圖

      QPSK 星座圖如圖4 所示,信號(hào)可分解為一組相互獨(dú)立的分量:同相分量(I)和正交分量(Q)。 這兩個(gè)分量是正交的,且互不相干的。 QPSK 調(diào)制中使用的是格雷碼,采用00?π/4,01?3π/4,11?5π/4,10?7π/4 的映射關(guān)系,在相同的信道條件下,降低了誤比特率。

      圖4 QPSK 星座圖

      2 星座圖顯示設(shè)計(jì)

      2.1 Qt 簡(jiǎn)介

      Qt 是基于C++語言編寫的跨平臺(tái)圖形用戶界面開發(fā)框架,具有模塊化程度高、二次開發(fā)接口豐富、幫助文檔詳細(xì)、代碼可移植性好等特點(diǎn)。 使用Qt 開發(fā)的應(yīng)用程序,可移植到Windows,Linux,MacOS 等操作系統(tǒng)中,實(shí)現(xiàn)一處開發(fā)、多處編譯運(yùn)行[9]。 Qt 的許可類型分為商業(yè)許可和開源許可。 開源許可包括LGPL和GPL;商業(yè)許可包含更多的模塊,但需要支付費(fèi)用;開源許可無需支付費(fèi)用,但要遵循開源許可協(xié)議LGPL 或GPL。 Qt Core,Qt Gui,Qt Widgets,Qt Network等常用模塊的開源協(xié)議是LGPL 或GPL;Qt Charts 及Qt Virtual Keyboard 等部分開源模塊的開源協(xié)議是GPL[10]。 Qt5.15.2 以前的版本可在官網(wǎng)下載安裝包,Qt5.15.2 以后的版本需要用戶自己編譯[11]。

      2.2 Qt 繪圖功能

      Qt 的繪圖系統(tǒng)基于QPainter,QPaintDevice 和QPaimEngine 類。 QPainter 類用來進(jìn)行繪圖操作。QPaintDevice 類是一個(gè)使用QPainter 進(jìn)行繪圖的抽象的二 維 界 面, 為 QPainter 提 供 一 個(gè)“ 畫 布”。QPaintEngine 類給QPainter 提供在不同設(shè)備上繪圖的接口。 用戶使用 QPainter 在 QWidget, QPixmap,QImage 等繪圖設(shè)備上繪制點(diǎn)、線、橢圓、矩形等基本形狀組成自己需要的圖形,繪制的圖形是不可交互的[12]。 Qt 還 提 供 了 Graphics View 架 構(gòu), 使 用QGraphicsView,QGraphicsScene,QGraphicsItem 類繪圖,在一個(gè)場(chǎng)景中可以繪制大量圖形部件,每個(gè)圖形部件都有選擇、移動(dòng)等交互操作[13]。 繪制的星座圖無需交互操作,所以選擇使用QPainter 在QWidget 上進(jìn)行繪圖。

      QWidget 類及其子類是最常用的繪圖設(shè)備,從QWidget 類繼承的類都有paintEvent()事件,要在設(shè)備上繪圖,只需重定義此事件并編寫響應(yīng)代碼。 創(chuàng)建一個(gè)QPainter 對(duì)象獲取繪圖設(shè)備的接口,就可以在繪圖設(shè)備的“畫布”上繪圖。 在paintEvent()事件里繪圖的代碼如下:

      void StarMap::paintEvent(QPaintEvent ?event){

      QPainter painter(this);

      painter. setRenderHints(QPainter::Antialiasing |QPainter::TextAntialiasing);

      painter.translate(width()/ 2,height()/ 2);drawGrid(&painter);drawTarget(&painter);}

      paintEvent()是Qt 窗口的繪制事件。 窗口顯示時(shí),就會(huì)產(chǎn)生此繪制事件。 通常事件由系統(tǒng)或Qt 自身產(chǎn)生,從Qt 的事件類QEvent 繼承下來,通過事件響應(yīng)函數(shù)event()來通知需要通知的對(duì)象。 事件響應(yīng)函數(shù),就是事件通知給相應(yīng)對(duì)象的事件處理函數(shù)[14]。

      除了事件機(jī)制外,Qt 還有信號(hào)槽機(jī)制。 信號(hào)槽是Qt 的核心機(jī)制,Qt 使用信號(hào)與槽實(shí)現(xiàn)對(duì)象間通信。信號(hào)與槽通過connect()函數(shù)進(jìn)行連接[15-16]。

      槽函數(shù)和普通的C++成員函數(shù)很相似,可以是虛函數(shù)(virtual),可以重載(overload),也可以是公有的(public)、保護(hù)的(protect)、私有的(private)。 信號(hào)槽需要Qt 的元對(duì)象系統(tǒng)支持,所有使用信號(hào)槽機(jī)制的Qt 類都必須包含一個(gè)Q_Object 的宏。 信號(hào)槽隱藏了復(fù)雜的底層實(shí)現(xiàn),與回調(diào)函數(shù)(callback)相比,信號(hào)槽需要查找連接的對(duì)象和槽函數(shù),所以執(zhí)行速度稍慢。但這種差別在程序運(yùn)行時(shí)幾乎感覺不到,而其提供的靈活性卻比回調(diào)函數(shù)強(qiáng)很多。

      2.3 星座圖顯示設(shè)計(jì)

      應(yīng)用Qt 開發(fā)星座圖顯示存儲(chǔ)軟件,實(shí)現(xiàn)對(duì)IQ 數(shù)據(jù)的讀取、解析、顯示、處理和保存等操作。 軟件設(shè)計(jì)流程如圖5 所示。 使用ConstellationShape 類繼承QMainWindow 類來實(shí)現(xiàn),中間的窗口為星座圖顯示窗,下邊有3 個(gè)功能按鈕,分別為“加載數(shù)據(jù)”“保存數(shù)據(jù)”“停止工作”按鈕。

      圖5 設(shè)計(jì)流程

      中間的星座圖繪制窗口,調(diào)用StarMap 子工程生成的動(dòng)態(tài)庫來構(gòu)建,使用高內(nèi)聚、低耦合的思想進(jìn)行模塊化編程。 星座圖中的網(wǎng)格繪制,通過調(diào)用drawGrid()函數(shù)來實(shí)現(xiàn)。 繪制流程是先設(shè)置畫筆的樣式為Qt::DotLine、顏色為網(wǎng)格顏色,調(diào)用Qt 自帶的畫線函數(shù)drawLine()函數(shù)繪制出虛線網(wǎng)格;再設(shè)置畫筆顏色為坐標(biāo)軸顏色,調(diào)用drawLine()函數(shù)繪制出中間的坐標(biāo)軸。

      星座圖中的點(diǎn)的繪制,需先設(shè)置畫筆的顏色為星座圖點(diǎn)的顏色,再調(diào)用Qt 自帶的畫點(diǎn)函數(shù)drawPoint()來實(shí)現(xiàn)。 星座圖的繪制,主要通過drawTarget()函數(shù)實(shí)現(xiàn)。 StarMap_IQ_Data 為星座圖數(shù)據(jù)結(jié)構(gòu)體,保存的是數(shù)字調(diào)制信號(hào)的IQ 數(shù)據(jù)。 關(guān)鍵代碼如下:

      void StarMap::drawTarget(QPainter ?painter){

      QPen pen;

      pen.setColor(m_tarColor);

      pen.setWidth(2);

      painter->setPen(pen);

      for (int i = 0; i < m_count; i++)

      {

      StarMap_IQ_Data iq;

      iq.i = m_npData[i] & 0xffff;

      iq.q = (m_npData[i] >> 16)& 0xffff;

      double x = m_dStartX + m_incrementX ?(iq.i - m_minX)/ m_xStep;

      double y = m_dStartY + m_incrementY ?(iq.q - m_minY)/ m_yStep;

      painter->drawPoint(QPointF(x,-y));

      }

      }

      星座圖在數(shù)字調(diào)制識(shí)別中的作用越來越重要[17]。 軟件對(duì)接收機(jī)采集的數(shù)字通信信號(hào)的IQ 數(shù)據(jù)進(jìn)行解析并繪制在星座圖上,正交相移鍵控(Quadrature Phase Shift Keying,QPSK)信號(hào)的星座如圖6 所示。

      圖6 QPSK 星座

      星座圖窗口顯示接收機(jī)采集的數(shù)字通信信號(hào)的星座圖。 點(diǎn)擊界面右下方按鈕,通過Qt 的信號(hào)槽機(jī)制調(diào)用相應(yīng)的按鈕響應(yīng)槽函數(shù),實(shí)現(xiàn)加載數(shù)據(jù)、保存數(shù)據(jù)、停止工作等功能。 Qt5 之后,槽函數(shù)可通過lambda 函數(shù)表達(dá)式實(shí)現(xiàn)。

      點(diǎn)擊“加載數(shù)據(jù)” 按鈕, 調(diào)用Qt 框架中的QFileDialog 類創(chuàng)建文件選擇對(duì)話框,打開由DATA_PATH 宏指定的IQ 數(shù)據(jù)文件存放目錄,選擇IQ 數(shù)據(jù)文件進(jìn)行加載。 加載文件后,對(duì)文件數(shù)量進(jìn)行判斷,如果選擇的文件數(shù)大于0,則啟動(dòng)一個(gè)定時(shí)器,依次讀取并解析選擇的IQ 數(shù)據(jù)文件,根據(jù)解析出的IQ 數(shù)據(jù)繪制星座圖。 關(guān)鍵代碼如下:

      connect(btnLoad,&QPushButton::clicked, this,[=](){QStringListfiles =QFileDialog::getOpenFileNames(this," Selectoneormorefilesto open",DATA _ PATH,tr ( "Data(?. dat?.bin)"))

      Q

      ;Timer ?updateFileTimer = new QTimer(this);

      if (files.count()>= 0){

      updateFileTimer->start(500);}this,[=](){

      connect(updateFileTimer,&QTimer::timeout,

      staticintindex=0;

      if(index>=files.count()){

      index=0;

      }else{

      d

      eleteupdateFileTimer;

      updateFileTimer->stop();

      QStringfileName=files.at(index++);

      readAndDraw(fileName);

      }

      });

      });

      讀取IQ 數(shù)據(jù)并繪制星座圖, 是通過函數(shù)readAndDraw()實(shí)現(xiàn)的,關(guān)鍵代碼如下:QStri ng&fileName)

      voidConstellationShape::readAndDraw ( const(fileName ,modName);

      {

      QStringmodName;

      if (modName=="PI4DQPSK"){

      DataRangeStructdataRange=getDataRange

      modName="PI/4DQPSK";

      }

      m_starMap->setTitle(modName);

      int?data;

      intnFileSize=-1;

      readData(fileName,data,nFileSize);

      m_starMap->setAxisRange(dataRange. minI,dataRange. maxI,dataRange. minQ,dataRange.maxQ);{qDebug()<<11;});

      m_starMap->setData(data,nFileSize);

      //QTimer::singleShot(1000,this,[=]()

      }

      點(diǎn)擊“保存數(shù)據(jù)”按鈕,對(duì)當(dāng)前顯示的星座圖進(jìn)行截圖,保存到指定目錄中。 關(guān)鍵代碼如下:this, [=](){

      connect ( btnCapture,&QPushButton::clicked,

      QPixmappic=m_starMap->grab();

      QStringpath =QApplication::applicationDirPath();

      QStringfileName=m_starMap->title();

      if (fileName == "PI/4DQPSK"){

      fileName = "PI4DQPSK";

      }

      fileName = QStringLiteral ( "/dataPng/% 1.png").arg(fileName);

      fileName = path + fileName;

      pic.save(fileName, "png");});

      點(diǎn)擊“停止工作”按鈕,停止顯示星座圖,并將星座圖上的數(shù)據(jù)清空。 關(guān)鍵代碼如下:

      connect(btnStop, &QPushButton::clicked, this,[=](){

      stopTimer();

      m_starMap->clearData();

      });

      3 結(jié)語

      文章針對(duì)數(shù)字通信信號(hào)調(diào)制識(shí)別對(duì)星座圖數(shù)據(jù)的需求,提出了一種應(yīng)用Qt 的星座圖顯示存儲(chǔ)方法,使用Qt 圖形界面框架開發(fā)了星座圖顯示及存儲(chǔ)軟件。 該軟件具有良好的用戶交互界面,筆者對(duì)不同調(diào)制類型的數(shù)字通信信號(hào)的星座圖進(jìn)行了演示,為后續(xù)基于星座圖的調(diào)制識(shí)別提供了數(shù)據(jù)支撐。 軟件顯示的星座圖是基于合作方提供的IQ 數(shù)據(jù)繪制的,下一步工作是將基于星座圖的調(diào)制識(shí)別算法合并入軟件中并實(shí)現(xiàn)對(duì)非合作方數(shù)字通信信號(hào)星座圖的繪制及其調(diào)制方式的識(shí)別。

      猜你喜歡
      數(shù)字通信星座圖開源
      數(shù)字通信&數(shù)學(xué)
      基于尋址的通信信號(hào)調(diào)制算法實(shí)現(xiàn)
      軟件(2019年8期)2019-10-08 11:55:52
      五毛錢能買多少頭牛
      數(shù)字通信系統(tǒng)中自適應(yīng)均衡技術(shù)
      基于資源塊星座圖的稀疏碼多址接入碼本設(shè)計(jì)
      大家說:開源、人工智能及創(chuàng)新
      開源中國開源世界高峰論壇圓桌會(huì)議縱論開源與互聯(lián)網(wǎng)+創(chuàng)新2.0
      開源計(jì)算機(jī)輔助翻譯工具研究
      信號(hào)分割修正聚類的星座圖恢復(fù)算法
      地鐵中壓環(huán)網(wǎng)數(shù)字通信過電流保護(hù)方案
      黄浦区| 永年县| 蓬溪县| 巧家县| 湘乡市| 和林格尔县| 鹤庆县| 临夏市| 昌黎县| 唐海县| 志丹县| 吴忠市| 平山县| 称多县| 苍溪县| 苏州市| 和硕县| 彭山县| 林西县| 永胜县| 龙南县| 沁水县| 砚山县| 吴江市| 泾川县| 宿州市| 庆城县| 临猗县| 西平县| 巫溪县| 长阳| 张家港市| 海晏县| 鄢陵县| 纳雍县| 新乐市| 富蕴县| 西吉县| 海伦市| 周宁县| 琼海市|