




已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
作者:Eric Blossom/software/gnuradio/doc/exploring-gnuradio.html簡(jiǎn)介: 軟件無(wú)線電是一門讓軟件代碼盡可能靠近接收天線的技術(shù)。它把無(wú)線電的硬件問(wèn)題放到軟件中來(lái)解決。軟件無(wú)線電最基本的特征是軟件定義(調(diào)制)無(wú)線電傳輸?shù)牟ㄐ?,軟件解調(diào)接收到的波形。這個(gè)和目前大多數(shù)的由模擬電路或者由模擬數(shù)字組合電路組成的無(wú)線電有鮮明的區(qū)別。GNU Radio是一個(gè)開(kāi)源的可以構(gòu)建軟件無(wú)線電平臺(tái)的軟件包。軟件無(wú)線電是無(wú)線電設(shè)計(jì)領(lǐng)域的一次革命,使得建立無(wú)線電設(shè)備更加靈活,給用戶帶來(lái)更多的機(jī)遇。軟件無(wú)線電能夠很好的實(shí)現(xiàn)傳統(tǒng)無(wú)線電所能實(shí)現(xiàn)的功能,另外,軟件無(wú)線電最精彩的特性是由軟件提供給我們的靈活性,一些年以后,我們將會(huì)看到傳統(tǒng)的由很多固定元件組成的無(wú)線電設(shè)備將會(huì)被通用的通信設(shè)備來(lái)取代??梢韵胂瘢粋€(gè)軟件無(wú)線電設(shè)備能夠變體成為蜂窩電話,能夠靈活的使用GPRS,802.11 Wi-Fi,802.16 WiMax,衛(wèi)星鏈路,或者將出現(xiàn)的其他通訊標(biāo)準(zhǔn)進(jìn)行通訊,而硬件設(shè)備無(wú)需改動(dòng),只需要軟件設(shè)置。你能夠決定使用GPS,GLONASS或者兩個(gè)一起使用來(lái)給自己定位。 也許,最令人激動(dòng)的是使用軟件無(wú)線電來(lái)建立一個(gè)分布式個(gè)人通訊系統(tǒng)。當(dāng)今的通訊系統(tǒng),大多數(shù)是采用自上而下的結(jié)構(gòu),廣播和電視系統(tǒng)提供一個(gè)單向鏈路,內(nèi)容被嚴(yán)格控制在一小部分人的手里。蜂窩電話系統(tǒng)給人們帶來(lái)極大的便利,但是你的手機(jī)提供的功能是由運(yùn)營(yíng)商來(lái)控制的,而不是你自己。這種集中控制的系統(tǒng)限制了人們的創(chuàng)新,代替做蜂窩電話系統(tǒng)的二等公民,我們可以建造一個(gè)智能設(shè)備,這些設(shè)備能夠自組織的,在使用者之間建成一個(gè)網(wǎng)絡(luò)。處理流程圖 圖一,表示一個(gè)典型的軟件無(wú)線電處理流程圖。為了理解無(wú)線電的軟件模塊,首先需要理解和其關(guān)聯(lián)的硬件。在這個(gè)圖中的接收路徑上,能夠看到一個(gè)天線,一個(gè)神奇的RF前端,一個(gè)模擬數(shù)字轉(zhuǎn)換器ADC和一堆代碼。ADC是一個(gè)連接連續(xù)模擬的自然世界和離散的數(shù)字世界的橋梁。ADC有兩個(gè)主要特性,抽樣率和動(dòng)態(tài)范圍。抽樣率是ADC測(cè)量模擬信號(hào)的速度,動(dòng)態(tài)范圍是ADC區(qū)別最低信號(hào)值和最大信號(hào)值的精度,這決定ADC數(shù)字信號(hào)輸出的比特?cái)?shù)(位數(shù))。例如,8位的AD轉(zhuǎn)換器最多能代表256個(gè)信號(hào)層次,而一個(gè)16位的轉(zhuǎn)換器能夠代表65536個(gè)層次信號(hào)??偟膩?lái)說(shuō),ADC的物理特性和價(jià)格決定了抽樣率和動(dòng)態(tài)范圍。 在我們深入研究軟件之前,先來(lái)了解一些理論知識(shí),在1927年,出生于瑞典的物理和電子學(xué)家 Harry Nyquist提出了如果AD轉(zhuǎn)換想沒(méi)有混疊現(xiàn)象發(fā)生,那么抽樣率至少是目標(biāo)信號(hào)帶寬的2倍。 混疊現(xiàn)象就像是車子重復(fù)的碾在過(guò)去的車輪印跡上一樣,讓你分不清楚是本次的還是以前碾過(guò)的車輪印跡。假設(shè)我們要處理一個(gè)低通信號(hào),我們感興趣的信號(hào)帶寬是 0到fmax,按照Nyquist理論,抽樣率必須至少是2*fmax。如果我們的ADC工作在20MHZ,但是我們想收聽(tīng)92.1MHZ的FM電臺(tái),我們?cè)撛趺崔k呢?答案是使用RF前端,接收機(jī)的RF前端能夠把它接收到的高頻段信號(hào)下變頻到一個(gè)低頻段信號(hào)后輸出。例如,我們能讓RF前端把90- 100MHZ頻段內(nèi)的信號(hào)下變頻到0-10MHZ的低頻范圍內(nèi),那么我們的20MHZ的ADC就能夠派上用場(chǎng)了。 大多數(shù)情況下,我們把RF前端當(dāng)作一個(gè)信號(hào)控制的黑盒子,負(fù)責(zé)處理輸入信號(hào)的中心頻率。舉一個(gè)具體例子,一個(gè)調(diào)制解調(diào)器的調(diào)制模塊能夠把50M到800M 之間的6M帶寬的中心頻率下變頻到一個(gè)中心頻率是5.75MHZ的輸出。這個(gè)輸出的中心頻率通常稱作中頻(IF)。 按照越簡(jiǎn)單越易用的原則,RF前端最好也能夠被去掉,有一個(gè)GNU Radio用戶已經(jīng)成功的使用一個(gè)100英尺(譯注:等于12英寸,合0.305米)的天線直接連接到一個(gè)20M抽樣率的ADC上收聽(tīng)到了AM和短波廣播。 深入軟件內(nèi)部 GNU Radio提供一個(gè)信號(hào)處理模塊的庫(kù),并且有個(gè)機(jī)制可以把單個(gè)的處理模塊連接在一起形成一個(gè)系統(tǒng)。編程者通過(guò)建立一個(gè)流向圖(flow graph)就能搭建成一個(gè)無(wú)線電系統(tǒng)。信號(hào)處理模塊是使用C+來(lái)實(shí)現(xiàn)的,理論上說(shuō),信號(hào)數(shù)據(jù)流不停的從輸入端口流入從輸出端口流出。信號(hào)處理塊 (blocks)的屬性包括輸入和輸出的端口數(shù),流過(guò)它們的數(shù)據(jù)的類型,經(jīng)常使用的數(shù)據(jù)流的類型是短整型(short),浮點(diǎn)型(float),和復(fù)數(shù)(complex)類型。一些處理模塊僅僅有輸入端口或者輸出端口,它們分別成為信號(hào)源(data source)和信號(hào)接收器(sink)。有的信號(hào)源從文件或者ADC讀入數(shù)據(jù),信號(hào)接收器寫(xiě)入文件或者DAC或者PC的多媒體接口。GNU Radio提供了超過(guò)100個(gè)信號(hào)處理塊,并且擴(kuò)展新的處理模塊也是非常容易的。軟件圖形化接口和信號(hào)處理模塊的鏈接機(jī)制是通過(guò)python腳本語(yǔ)言來(lái)進(jìn)行的,例1,是一個(gè)GNUadio “Hello World”的例子。它產(chǎn)生兩個(gè)sine波形并且把他們輸出到聲卡,一個(gè)輸出到聲卡的左聲道,一個(gè)輸出到右聲道。 例子1.輸出撥號(hào)音#!/usr/bin/env pythonfrom gnuradio import grfrom gnuradio import audiodef build_graph (): sampling_freq = 48000 ampl = 0.1 fg = gr.flow_graph () src0 = gr.sig_source_f (sampling_freq, gr.GR_SIN_WAVE, 350, ampl) src1 = gr.sig_source_f (sampling_freq, gr.GR_SIN_WAVE, 440, ampl) dst = audio.sink (sampling_freq) fg.connect (src0, 0), (dst, 0) fg.connect (src1, 0), (dst, 1) return fgif _name_ = _main_: fg = build_graph () fg.start () raw_input (Press Enter to quit: ) fg.stop () 我們開(kāi)始建立一個(gè)流向圖(flow graph)把所有的信號(hào)處理模塊連接到一起,調(diào)用gr_sig_source_f產(chǎn)生兩個(gè)sine波形,后綴f表面這個(gè)信號(hào)源的數(shù)據(jù)類型是浮點(diǎn)型的,一個(gè)波形是350HZ,另外一個(gè)是440HZ,合在一起他們聽(tīng)起來(lái)像一個(gè)美國(guó)電話撥號(hào)音。audio_sink是一個(gè)接收器,它把接收到的信號(hào)輸入到聲卡中,我們把3個(gè)信號(hào)處理模塊用流向圖的connect方法連接到一起。connect方法有兩個(gè)參數(shù),源端點(diǎn)和目的端點(diǎn),用來(lái)建立一個(gè)從源到目的處理模塊的鏈路。每個(gè)端點(diǎn)(endpoint)有兩個(gè)成員:一個(gè)信號(hào)處理模塊和一個(gè)端口號(hào)。端口號(hào)表示哪個(gè)輸入或者輸出端口應(yīng)該被連接的。通常端點(diǎn)使用 python語(yǔ)言的tuple來(lái)表示,像:(block,port_number)。當(dāng)端口號(hào)是0時(shí),portt_number可以被省略的。 下面的兩個(gè)表示方法是一樣的:fg.connect (src1, 0), (dst, 1)fg.connect (src1, (dst, 1) 一旦流向圖被建立了,我們調(diào)用start生成一個(gè)或者多個(gè)線程去運(yùn)行它,按下任意鍵程序控制權(quán)就會(huì)返回給調(diào)用者。一個(gè)完整的FM接收機(jī) 例2是一個(gè)簡(jiǎn)單化的但是是一個(gè)完整的FM廣播接收機(jī),它包括對(duì)RF前端的控制和所有FM信號(hào)的處理。這個(gè)例子的RF前端是使用一個(gè)cable調(diào)制解調(diào)器和一個(gè)20M抽樣率的ADC來(lái)實(shí)現(xiàn)的。例2.FM廣播接收機(jī) #!/usr/bin/env pythonfrom gnuradio import grfrom gnuradio import audiofrom gnuradio import mc4020import sysdef high_speed_adc (fg, input_rate): # return gr.file_source (gr.sizeof_short, dummy.dat, False) return mc4020.source (input_rate, mc4020.MCC_CH3_EN | mc4020.MCC_ALL_1V)# return a gr.flow_graph#def build_graph (freq1, freq2): input_rate = 20e6 cfir_decimation = 125 audio_decimation = 5 quad_rate = input_rate / cfir_decimation audio_rate = quad_rate / audio_decimation fg = gr.flow_graph () # use high speed ADC as input source src = high_speed_adc (fg, input_rate) # compute FIR filter taps for channel selection channel_coeffs = gr.firdes.low_pass (1.0, # gain input_rate, # sampling rate 250e3, # low pass cutoff freq 8*100e3, # width of trans. band gr.firdes.WIN_HAMMING) # input: short; output: complex chan_filter1 = gr.freq_xlating_fir_filter_scf (cfir_decimation, channel_coeffs, freq1, # 1st station freq input_rate) (head1, tail1) = build_pipeline (fg, quad_rate, audio_decimation) # sound card as final sink audio_sink = audio.sink (int (audio_rate) # now wire it all together fg.connect (src, chan_filter1) fg.connect (chan_filter1, head1) fg.connect (tail1, (audio_sink, 0) return fgdef build_pipeline (fg, quad_rate, audio_decimation): Given a flow_graph, fg, construct a pipeline for demodulating a broadcast FM signal. The input is the downconverted complex baseband signal. The output is the demodulated audio. build_pipeline returns a two element tuple containing the input and output endpoints. fm_demod_gain = 2200.0/32768.0 audio_rate = quad_rate / audio_decimation volume = 1.0 # input: complex; output: float fm_demod = gr.quadrature_demod_cf (volume*fm_demod_gain) # compute FIR filter taps for audio filter width_of_transition_band = audio_rate / 32 audio_coeffs = gr.firdes.low_pass (1.0, # gain quad_rate, # sampling rate audio_rate/2 - width_of_transition_band, width_of_transition_band, gr.firdes.WIN_HAMMING) # input: float; output: float audio_filter = gr.fir_filter_fff (audio_decimation, audio_coeffs) fg.connect (fm_demod, audio_filter) return (fm_demod, 0), (audio_filter, 0) def main (args): nargs = len (args) if nargs = 1: # get station frequency from command line freq1 = float (args0) * 1e6 else: sys.stderr.write (usage: fm_demod freqn) sys.exit (1) # connect to RF front end rf_front_end = gr.microtune_4937_eval_board () if not rf_front_end.board_present_p (): raise IOError, RF front end not found # set front end gain rf_front_end.set_AGC (300) # determine the front ends Intermediate Frequency IF_freq = rf_front_end.get_output_freq () # 5.75e6 # Tell the front end to tune to freq1. # I.e., freq1 is translated down to the IF frequency rf_front_end.set_RF_freq (freq1) # build the flow graph fg = build_graph (IF_freq, None) fg.start () # fork thread(s) and return raw_input (Press Enter to quit: ) fg.stop ()if _name_ = _main_: main (sys.argv1:) 和Hello World的例子一樣,這個(gè)例子建立了一個(gè)流向圖,把所有的信號(hào)處理模塊連接到了一起然后開(kāi)始運(yùn)行。在這個(gè)例子中,mc4020.source是一個(gè)和 Measurement Computing PCI-DAS 4020/12 高速 ADC的連接接口。在它后面連接一個(gè)gr.freq_xlating_fir_filter_scf,這是一個(gè)有限脈沖響應(yīng)(FIR)濾波器,負(fù)責(zé)選擇 FM廣播的電臺(tái)頻段并且把它變頻到基帶(0HZ,直流)。然后用20M的converter和解調(diào)器,我們就能夠接收到鄰近的6MHZ帶寬的頻率了,在這個(gè)頻帶中大概能包含10個(gè)或者更多頻道的FM電臺(tái)。接著使用gr.freq_xlating_fir_filter_scf來(lái)選擇一個(gè)我們想收聽(tīng)的頻道。在這個(gè)例子中,我們選擇了RF前端精確的中頻頻率5.75MHZ,gr.freq_xlating_fir_filter_scf的輸出是一個(gè)經(jīng)過(guò) 160,000次/秒的復(fù)采樣數(shù)據(jù)流,然后把復(fù)基帶信號(hào)輸出給gr.quadrature_demod_cf進(jìn)行積分取模,這個(gè)模塊負(fù)責(zé)真正的FM解調(diào)。 gr.quadrature_demod_cf通過(guò)比較每個(gè)鄰近的復(fù)采樣信號(hào)的角度(by subtracting the angle of each adjacent complex sample)來(lái)有效的區(qū)分頻率,gr.quadrature_demod_cf的輸出包含了FM立體聲的左加右聲道信號(hào)(left-plus- right FM mono audio signal),19kHZ的立體聲的控制音(pilot tone),中心頻率是38KHZ的左減右(left-minus-right)信號(hào)和其他的在這個(gè)上面的次載波(sub-carriers)信號(hào)。在這個(gè)簡(jiǎn)單的接收機(jī)中,我們使用低通濾波和抽取濾波,提取出了left-plus-right信號(hào)信息,把這個(gè)信號(hào)送給聲卡,經(jīng)過(guò)聲卡的32,000HZ的DAC,就能夠把數(shù)字信號(hào)還原成模擬聲音,到此我們可以聽(tīng)到FM廣播信號(hào)了。如果想進(jìn)一步了解FM接收機(jī)的原理,請(qǐng)參考:Listening to FM, Step by Step. 圖形化用戶接口 GNU Radio應(yīng)用程序的圖形化接口是使用python來(lái)實(shí)現(xiàn)的,接口能使用pyhone的任何toolkit來(lái)實(shí)現(xiàn),我們推薦使用wxPython,它能最大化的實(shí)現(xiàn)跨平臺(tái)應(yīng)用。GNU Radio提供由C+到Python的連接機(jī)制。 硬件要求GNU Radio是硬件獨(dú)立的,今天帶有單獨(dú)浮點(diǎn)運(yùn)算單元的上GHZ的CPU已經(jīng)很常見(jiàn)了,這給臺(tái)式機(jī)實(shí)現(xiàn)數(shù)字信號(hào)處理功能帶來(lái)了可能。一個(gè)3G的 Pentium 或者 Athlon處理器能夠每秒處理30億次浮點(diǎn)FIR運(yùn)算。我們現(xiàn)在能夠在PC上建立軟件通訊系統(tǒng),這是幾年前所不敢想象的。你的硬件要求依賴于你想做什么。總的來(lái)說(shuō),一個(gè)1G或者2G帶有256M內(nèi)存的機(jī)器應(yīng)該是足夠了。你也需要一些其他的模擬外設(shè)連接在你的PC上,包括內(nèi)置的聲卡或者96 kHz, 24-bit高保真聲卡。使用這些模擬設(shè)備,你只能處理有限的窄帶信號(hào)。另外的方案是使用高速的PCI模擬到數(shù)字的外設(shè),這些設(shè)備可以達(dá)到20M的抽樣率,但是他們是比較昂貴的,差不多是買一臺(tái)PC的價(jià)錢。使用這些高速板,調(diào)制解調(diào)器可以作為RF前端來(lái)使用。 為了有一個(gè)更滿意的替代產(chǎn)品,現(xiàn)在我們已經(jīng)設(shè)計(jì)了一個(gè)通用軟件無(wú)線電外設(shè)(USRP)。 通用軟件無(wú)線電外設(shè) 我們首選的硬件解決方案是USRP,USRP是Matt Ettus的杰作,USRP是一個(gè)非常靈活的USB設(shè)備,它把你的PC連接到RF世界。USRP包含一個(gè)小的母板,母板包含4個(gè)12bit /64M抽樣率的ADC,4個(gè)14bit/128M DAC,一個(gè)百萬(wàn)門的FPGA芯片和一個(gè)可編程的USB2.0控制器。每個(gè)USRP母板支持4個(gè)子板,2個(gè)接收,2個(gè)發(fā)射。RF前端是實(shí)現(xiàn)在子板上的,不同的子板處理不同的頻率帶寬。作為業(yè)余無(wú)線電使用,可以選擇低能量的能夠接收和發(fā)送440MHZ和1.24GHZ的子板。一個(gè)僅有接收功能的基于 cable modem 調(diào)諧的子板覆蓋50MHZ到800MHZ頻率范圍被設(shè)計(jì)成容易手工來(lái)做原型的,目的是為了方便實(shí)驗(yàn)。 Figure 2. Universal Software Radio Peripheral USRP 的靈活性得益于2個(gè)可編程的元件,通過(guò)他們和PC上的host端交互。為了對(duì)USRP有一個(gè)初步映像,讓我們看一下它的啟動(dòng)過(guò)程。USRP本身不含有 ROM,僅僅有一個(gè)存儲(chǔ)VendorID和productID和版本號(hào)信息的EEPROM。當(dāng)USRP插到PC的USB口上以后,主機(jī)上的程序通過(guò) VID,PID和版本號(hào)識(shí)別這是一個(gè)未配置的USRP,主機(jī)上的程序第一步要做的是下載一個(gè)8051固件到USB控制芯片上,這個(gè)固件控制USB的行為。當(dāng)USB固件下載好后,USRP模擬一個(gè)USB設(shè)備的重枚舉過(guò)程,此后主機(jī)識(shí)別到一個(gè)不同的設(shè)備,VID,PID和版本號(hào)都不同了?,F(xiàn)在這個(gè)USB固件定義USB端口,接口和用戶自定義命令。其中一個(gè)命令是load FPGA,收到這個(gè)命令后USB設(shè)備就能夠把FPGA配置bitstream下載到FPGA芯片中開(kāi)始工作。 FPGA是一個(gè)通用硬件,它的行為完全由配置的bitstream來(lái)決定,你可以把bitstream看作是一個(gè)目標(biāo)碼。這個(gè)bitsteam是由一個(gè)高級(jí)硬件描述語(yǔ)言編譯得到的,在USRP里面這是由verilog硬件描述語(yǔ)言來(lái)實(shí)現(xiàn)的。這些代碼是開(kāi)源的,和其他的GNU Radio代碼一樣,是基于GNU的GPL協(xié)議的。 FPGA職責(zé) FPGA 像一個(gè)小的,高性能的并行計(jì)算機(jī)一樣,可以完成你設(shè)計(jì)的任務(wù),設(shè)計(jì)FPGA需要一些技能,并且如果不慎還會(huì)燒壞你的板子。還好我們已經(jīng)提供一個(gè)標(biāo)準(zhǔn)的適應(yīng)性很廣的FPGA配置。通過(guò)使用一個(gè)好的USB控制器,USRP能夠有32M/s的處理能力,USB是半雙工的,基于你的需要,USB能夠在傳輸和接收之間轉(zhuǎn)換。在接收方
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 行政管理現(xiàn)代化的挑戰(zhàn)與機(jī)遇試題及答案
- 行政管理本科考試的反饋機(jī)制試題及答案
- 2025年市政學(xué)課程考查試題及答案
- 自考行政管理本科復(fù)習(xí)心得試題及答案分享
- 心得分享2025年建筑工程考試試題及答案
- 農(nóng)村買賣小轎車合同范例
- 2025年行政管理學(xué)新需求試題及答案
- 買山合同范例
- 2025年行政管理學(xué)綜合試題及答案
- 行政管理與市政學(xué)的社會(huì)價(jià)值試題及答案
- 2025-2030全球及中國(guó)COB發(fā)光二極管行業(yè)市場(chǎng)現(xiàn)狀供需分析及市場(chǎng)深度研究發(fā)展前景及規(guī)劃可行性分析研究報(bào)告
- 群眾文化知識(shí)試題及答案
- 2025年-重慶市建筑安全員B證考試題庫(kù)附答案
- 客情維護(hù)培訓(xùn)
- 結(jié)腸癌科普知識(shí)
- 學(xué)校校園膳食監(jiān)督家長(zhǎng)委員會(huì)履職承諾協(xié)議書(shū)
- 環(huán)保輿情防范預(yù)案
- 2025年甘肅公務(wù)員省考《行測(cè)》真題(含答案)
- JGJT322-2013混凝土中氯離子含量檢測(cè)技術(shù)規(guī)程標(biāo)準(zhǔn)
- 具身智能項(xiàng)目建設(shè)規(guī)劃方案(參考模板)
- 2025年福建廈門湖里區(qū)市場(chǎng)監(jiān)督管理局招聘協(xié)管員93人高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
評(píng)論
0/150
提交評(píng)論