999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2023-08-16 05:00:44杜依亮張振邦
無線互聯(lián)科技 2023年11期
關(guān)鍵詞:按鈕信號

杜依亮,顏 軍,張振邦

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

0 引言

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

1 星座圖基本理論

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

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

1.1 IQ 信號調(diào)制

一個數(shù)字通信信號有3 個隨時間變化的特性:幅度、相位和頻率。 在IQ 調(diào)制系統(tǒng)中,通過改變數(shù)字通信信號的幅度、相位或者頻率,實現(xiàn)對通信信號的調(diào)制。 通過幅移鍵控調(diào)制(Amplitude Shift Keying,ASK)進(jìn)行信號幅度的數(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 信號調(diào)制,也叫正交調(diào)制,通過改變正弦波的幅度、相位或者頻率,將基帶信號的信息加載到正弦波上。 加載了基帶信息的信號稱為已調(diào)信號(modulated signal),帶通已調(diào)信號可表示成:

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

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

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

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

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

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

1.2 IQ 信號解調(diào)

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

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

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

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

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

1.3 星座圖基本原理

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

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

圖3 BPSK,16QAM 星座圖

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

圖4 QPSK 星座圖

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

2.1 Qt 簡介

Qt 是基于C++語言編寫的跨平臺圖形用戶界面開發(fā)框架,具有模塊化程度高、二次開發(fā)接口豐富、幫助文檔詳細(xì)、代碼可移植性好等特點。 使用Qt 開發(fā)的應(yīng)用程序,可移植到Windows,Linux,MacOS 等操作系統(tǒng)中,實現(xiàn)一處開發(fā)、多處編譯運行[9]。 Qt 的許可類型分為商業(yè)許可和開源許可。 開源許可包括LGPL和GPL;商業(yè)許可包含更多的模塊,但需要支付費用;開源許可無需支付費用,但要遵循開源許可協(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 類是一個使用QPainter 進(jìn)行繪圖的抽象的二 維 界 面, 為 QPainter 提 供 一 個“ 畫 布”。QPaintEngine 類給QPainter 提供在不同設(shè)備上繪圖的接口。 用戶使用 QPainter 在 QWidget, QPixmap,QImage 等繪圖設(shè)備上繪制點、線、橢圓、矩形等基本形狀組成自己需要的圖形,繪制的圖形是不可交互的[12]。 Qt 還 提 供 了 Graphics View 架 構(gòu), 使 用QGraphicsView,QGraphicsScene,QGraphicsItem 類繪圖,在一個場景中可以繪制大量圖形部件,每個圖形部件都有選擇、移動等交互操作[13]。 繪制的星座圖無需交互操作,所以選擇使用QPainter 在QWidget 上進(jìn)行繪圖。

QWidget 類及其子類是最常用的繪圖設(shè)備,從QWidget 類繼承的類都有paintEvent()事件,要在設(shè)備上繪圖,只需重定義此事件并編寫響應(yīng)代碼。 創(chuàng)建一個QPainter 對象獲取繪圖設(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 窗口的繪制事件。 窗口顯示時,就會產(chǎn)生此繪制事件。 通常事件由系統(tǒng)或Qt 自身產(chǎn)生,從Qt 的事件類QEvent 繼承下來,通過事件響應(yīng)函數(shù)event()來通知需要通知的對象。 事件響應(yīng)函數(shù),就是事件通知給相應(yīng)對象的事件處理函數(shù)[14]。

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

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

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

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

圖5 設(shè)計流程

中間的星座圖繪制窗口,調(diào)用StarMap 子工程生成的動態(tài)庫來構(gòu)建,使用高內(nèi)聚、低耦合的思想進(jìn)行模塊化編程。 星座圖中的網(wǎng)格繪制,通過調(diào)用drawGrid()函數(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)軸。

星座圖中的點的繪制,需先設(shè)置畫筆的顏色為星座圖點的顏色,再調(diào)用Qt 自帶的畫點函數(shù)drawPoint()來實現(xiàn)。 星座圖的繪制,主要通過drawTarget()函數(shù)實現(xiàn)。 StarMap_IQ_Data 為星座圖數(shù)據(jù)結(jié)構(gòu)體,保存的是數(shù)字調(dià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)制識別中的作用越來越重要[17]。 軟件對接收機(jī)采集的數(shù)字通信信號的IQ 數(shù)據(jù)進(jìn)行解析并繪制在星座圖上,正交相移鍵控(Quadrature Phase Shift Keying,QPSK)信號的星座如圖6 所示。

圖6 QPSK 星座

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

點擊“加載數(shù)據(jù)” 按鈕, 調(diào)用Qt 框架中的QFileDialog 類創(chuàng)建文件選擇對話框,打開由DATA_PATH 宏指定的IQ 數(shù)據(jù)文件存放目錄,選擇IQ 數(shù)據(jù)文件進(jìn)行加載。 加載文件后,對文件數(shù)量進(jìn)行判斷,如果選擇的文件數(shù)大于0,則啟動一個定時器,依次讀取并解析選擇的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()實現(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,[=]()

}

點擊“保存數(shù)據(jù)”按鈕,對當(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");});

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

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

stopTimer();

m_starMap->clearData();

});

3 結(jié)語

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

猜你喜歡
按鈕信號
這些按鈕能隨便按嗎?
哪個是門鈴真正的按鈕
當(dāng)你面前有個按鈕
信號
鴨綠江(2021年35期)2021-04-19 12:24:18
完形填空二則
孩子停止長個的信號
死循環(huán)
基于LabVIEW的力加載信號采集與PID控制
一種基于極大似然估計的信號盲抽取算法
內(nèi)心不能碰的按鈕
主站蜘蛛池模板: 波多野结衣视频网站| 久久精品中文无码资源站| 97影院午夜在线观看视频| 久996视频精品免费观看| 日本三级欧美三级| 中文字幕第4页| 国内精自视频品线一二区| 亚洲高清中文字幕| 日本www在线视频| 色妞永久免费视频| 热伊人99re久久精品最新地| 国产成人综合久久精品下载| 成人亚洲天堂| 国产成人一区免费观看| 精品91自产拍在线| 欧美成人影院亚洲综合图| 四虎永久免费地址| 免费无遮挡AV| 国产欧美日韩另类| 奇米影视狠狠精品7777| 国产成人亚洲精品无码电影| 97综合久久| 五月天丁香婷婷综合久久| 日韩激情成人| 伊人久久精品无码麻豆精品| 精品综合久久久久久97超人该 | 国产一区二区人大臿蕉香蕉| 欧美成人午夜在线全部免费| 视频一本大道香蕉久在线播放| 久久精品国产免费观看频道| 欧美一级在线| 亚洲人成影视在线观看| 国产精品55夜色66夜色| 国产精品亚欧美一区二区三区| 亚洲青涩在线| 欧亚日韩Av| 2020国产免费久久精品99| 国产精品第页| 亚洲国产日韩一区| 亚洲婷婷丁香| 国产人碰人摸人爱免费视频| 日韩av在线直播| 中文字幕在线日本| 欧美午夜在线播放| 国产性爱网站| 国产小视频在线高清播放| 日韩高清无码免费| 国产aⅴ无码专区亚洲av综合网| 国产欧美日韩精品综合在线| 97久久超碰极品视觉盛宴| 日韩大片免费观看视频播放| 伊人丁香五月天久久综合 | a天堂视频| 免费欧美一级| 亚洲一级毛片| 欧美日本激情| 啪啪永久免费av| 国产精品视频系列专区| 九一九色国产| 女人18毛片水真多国产| 亚洲国产欧美国产综合久久 | 国产精品永久久久久| 毛片网站在线看| 日本亚洲欧美在线| 国产男人天堂| 欧美色伊人| 91视频青青草| 手机在线免费不卡一区二| 欧美a在线看| 国产杨幂丝袜av在线播放| 无码免费的亚洲视频| 欧美午夜理伦三级在线观看| 色妞永久免费视频| 毛片免费在线视频| 在线欧美日韩国产| 国产成人h在线观看网站站| 99热最新在线| 在线观看精品国产入口| 国产精品视频a| 在线观看国产一区二区三区99| 婷婷成人综合| 真人免费一级毛片一区二区|