版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Mp3解碼算法流程 第1章 聲明本文檔版權(quán)歸屬于西安交通大學(xué)人工智能與機器人研究所 作者:李國輝 ghli第2章 Mp3解碼算法流程 MP3的全稱為MPEG1 Layer-3音頻文件, MPEG音頻文件是MPEG1標(biāo)準(zhǔn)中的聲音部分,也叫MPEG音頻層,它根據(jù)壓縮質(zhì)量和編碼復(fù)雜程度劃分為三層,即Layer1、Layer2、Layer3,且分別對應(yīng)MP1、MP2、MP3這三種聲音文件,并根據(jù)不同的用途,使用不同
2、層次的編碼。MPEG音頻編碼的層次越高,編碼器越復(fù)雜,壓縮率也越高,MP1和MP2的壓縮率分別為4:1和6:1-8:1,而MP3的壓縮率則高達(dá)10:1-12:1。一分鐘CD音質(zhì)的音樂,未經(jīng)壓縮需要10MB的存儲空間,而經(jīng)過MP3壓縮編碼后只有1MB左右。不過MP3對音頻信號采用的是有損壓縮方式,為了降低聲音失真度,MP3采取了“心理聲學(xué)模型”,即編碼時先對音頻文件進(jìn)行頻譜分析,然后再根據(jù)心理聲學(xué)模型把譜線分成若干個閾值分區(qū),并計算每個閾值分區(qū)的閾值,接著通過量化和熵編碼對每個譜線進(jìn)行編碼,最后形成具有較高壓縮比的MP3文件,并使壓縮后的文件在回放時能夠達(dá)到比較接近原音源的聲音效果。2.1. M
3、p3文件格式 MP3文件以一幀為一個編碼單元,各幀編碼數(shù)據(jù)是獨立的。為了清晰而準(zhǔn)確地描述mp3文件格式,下面采用位流語法描述,這種語法格式與c語言近似,易于理解,且描述清晰。其中粗體表示碼流中的數(shù)據(jù)項,bslbf代表位串,即“Bit string, left bit first ”,uimsbf代表無符號整數(shù),即”unsinged integer, mostsignificant bit first”,數(shù)字表示該數(shù)據(jù)項所占的比特數(shù)。2.1.1.
4、0; Audio Sequenceaudio sequence() while (true) frame() 2.1.2. Audio Frameframe() header() error_check() &
5、#160; audio_data() ancillary_data()2.1.3. Headerheader() syncword
6、160;
7、160; 12 bslbf ID
8、160;
9、160; 1 bslbf layer
10、
11、 2 bslbf protection_bit &
12、#160; 1
13、; bslbf bitrate_index
14、60; 4 bslbf &
15、#160; sampling_frequency
16、 2 bslbf padding_bit
17、0;
18、0; 1 bslbf private_bit
19、160; 1
20、 bslbf mode &
21、#160; 2
22、; bslbf mode_extension
23、160; 2 bslbf copyright
24、160;
25、160; 1 bslbf original/home
26、0;
27、0; 1 bslbf emphasis
28、;
29、; 2 bslbf2.1.4. Error Checkerror_check() if (protection_bit=0) crc_check
30、160;
31、160; 16 rpchof2.1.5. Audio data , Layer IIIaudio_data() main_data_begin &
32、#160; 9 uimsbf if(mode=s
33、ingle_channel)private_bits 5 bslbf else private_bits &
34、#160; 3 bsl
35、bf for(ch=0;ch<nch;ch+) for(scfsi_band=0;scfsi_band<4;scfsi_band+) scfsichscfsi_band
36、0; 1 bslbf for(gr=0;gr<2;gr+) for(ch=0;ch&l
37、t;nch;ch+) part2_3_lengthgrch 12
38、160; uimsbf big_valuesgrch 9
39、 uimsbf global_gaingrch
40、; 8 uimsbf scalefac_compressgrch
41、160; 4 bslbf window_switching_flaggrch 1
42、 bslbf if(window_switching_flaggrch) block_typegrch &
43、#160; 2 bslbf mixed_block_flaggrch
44、 1 uimsbf for(region=0
45、;region<2;region+) table_selectgrchregion 5 &
46、#160; bslbf for(window=0;window<3;window+) subblock_gaingrchwindow &
47、#160; 3 uimsbf else for(region=0;re
48、gion<3;region+) table_selectgrchregion
49、 5 bslbf region0_countgrch
50、60; 4 bslbf region1_countgrch &
51、#160; 3
52、; bslbf preflaggrch
53、0; 1 bslbf scalefa
54、c_scalegrch &
55、#160; 1 bslbf count1table_selectgrch
56、 1 bslbf main_data2.1.6.
57、 Main_datamain_data() for(gr=0;gr<2;gr+) for(ch=0;ch<nch;ch+) if(window_switching_flaggrch=1)&&(block_typ
58、egrch=2) if(mixed_block_flaggrch) for(sfb=0;sfb<8;sfb+) scalefac_l
59、grchsfb 0.4 uimsbf
60、 for(sfb=3;sfb<12;sfb+) for(window=0;window<3;window+) sc
61、alefac_sgrchsfbwindow 0.4 uimsbf else for(sfb=0;sfb&l
62、t;12;sfb+) for(window=0;window<3;window+) scalefac_sgrchsfbwindow
63、160; 0.4 uimsbf else if(scfsich0=0|(gr=0)
64、0; for(sfb=0;sfb<6;sfb+) scalefac_lgrchsfb
65、160; 0.4 uimsbf if(scfsich1=0|(gr=0) for(sfb=6;sfb<11;sfb+) &
66、#160; scalefac_lgrchsfb 0.4
67、60; uimsbf if(scfsich2=0|(gr=0) for(sfb=11;sfb<16;sfb+) scal
68、efac_lgrchsfb 0.3 uimsbf
69、 if(scfsich3=0|(gr=0) for(sfb=16;sfb<21;sfb+) scalefac_lgrchsfb
70、60; 0.3 uimsbf Hu
71、ffmancodebits() for(b=0;b<no_of_ancillary_bits;b+) ancillary_bit 1 bslbf2.1.7. H
72、uffmancodebitsHuffmancodebits() for(l=0;l<big_values*2;l+=2) hcod|x|y|
73、0; 0.19 bslbf
74、; if(|x|=15&&linbits>0) linbitsx 1.13
75、; uimsbf if(x!=0)signx &
76、#160; 1 bslbf if(|y|=15&&
77、amp;linbits>0) linbitsy 1.13 uimsbf
78、0; if(y!=0) signy &
79、#160; 1 bslbf isl=x isl+1=y &
80、#160; for(;l<big_values*2+count1*4;l+=4) hcod|v|w|x|y|
81、160; 1.6 bslbf if(v!=0) signv &
82、#160; &
83、#160; 1 bslbf if(w!=0) signw
84、160; 1 bslbf
85、 if(x!=0) signx
86、60; 1 bslbf if(y!=0) signy
87、0;
88、0; 1 bslbf isl=v isl+1=w isl+2=x isl+3=y
89、0; for(;l<576;l+) isl=02.1.8. Ancillary dataancillary_data() if(layer=1|layer=2)
90、 for(b=0;b<no_of_ancillary_bits;b+) ancillary_bit
91、 1 bslbf 2.2. 數(shù)據(jù)項的含義2.2.1.
92、; HeaderØ Syncword 同步頭,表示一幀數(shù)據(jù)的開始,共12位,全1即0XFFF。表格 21 LayerLayer '11'Layer I'10'Layer II'01'Layer III'00'reserved 表格 22 Bitrate_index bitrate specified (kBit/s)bitrate_index
93、Layer ILayer IILayer III '0000'freefreefree '0001'323232 '0010'644840 '0011'965648 '0100'1286456 '0101'1608064 '0110'1929680 '0111'22411296 '1000'256128112 '1001'28816012
94、8 '1010'320192160 '1011'352224192 '1100'384256224 '1101'416320256 '1110'448384320 '1111'forbiddenforbiddenforbidden Ø ID 算法標(biāo)識位,“1”表示MPEG音頻,“0”保留。Ø
95、160; Layer 用來說明是哪一層編碼,如表格 21 Layer所示。Ø Protection_bit 用來表明冗余信息是否被加到音頻流中,以進(jìn)行錯誤檢測和錯誤隱蔽。“1”表示未增加,“0”表示增加。Ø Bitrate_index用來指示該幀的bitrate,如表格 22 Bitrate_index所示。Ø
96、 Sampling_frequency用來指示采樣頻率,如表格 23 Sampling_frequency所示。表格 23 Sampling_frequencysampling_frequencyfrequency specified (kHz)'00'44.1'01'48'10'32'11'reserved Ø Padding_bit如果該位為1,那么幀中包含一個額外槽,用于把平均位率調(diào)節(jié)到采樣
97、頻率,否則該位必須為0。在采樣頻率為44.1kHz時,填補是必要的,在自由格式中也可能需要填補。Ø Private_bit留做私用,沒有定義。Ø Mode定義通道模式,如表格 24 Mode所示。 表格 24 Modemodemode specified'00'stereo'01'joint_stereo (intensity_stereo and
98、/or ms_stereo) '10'dual_channel'11'single_channel Ø Mode_extension用來標(biāo)識采用了哪一種joint_stereo,具體對應(yīng)的頻帶范圍隱含在算法中,如表格 25 Mode_extension所示。表格 25 Mode_extensionmode_extension '00'subbands 4-31 in intensity_stereo
99、, bound=4'01'subbands 8-31 in intensity_stereo, bound=8'10'subbands 12-31 in intensity_stereo, bound=12'11'subbands 16-31 in intensity_stereo, bound=16 Ø Copyright表明版權(quán)用,“1”表示有版權(quán),“0”表示沒有版權(quán)。Original/copy :表明原版還是復(fù)制,“1”表示原版
100、,“0”表示復(fù)制。Emphasis :表明加重音類型,如表格 26 Emphasis所示。表格 26 Emphasisemphasisemphasis specified'00'none'01'50/15 microseconds'10'reserved'11'CCITT J.17 2.2.2. Error Check CRC校驗的基
101、本思想是利用線性編碼理論,在發(fā)送端根據(jù)要傳送的k 位二進(jìn)制碼序列,以一定的規(guī)則產(chǎn)生一個校驗用的監(jiān)督碼(既CRC 碼)r 位,并附在信息后邊,構(gòu)成一個新的二進(jìn)制碼序列數(shù)共(k+r)位,最后發(fā)送出去。在接收端,則根據(jù)信息碼和CRC碼之間所遵循的規(guī)則進(jìn)行檢驗,以確定傳送中是否出錯。在MP3協(xié)議中采用了CRC-16生成CRC碼,其生成多項式如下:2.2.3. Side information Sideinformation 指的是在aud
102、io_data中main_data之前的一部分信息。這部分提供了解碼中一些輔助的信息,用來幫助整個解碼過程。為了幫助理解這一部分?jǐn)?shù)據(jù)項的含義,會在下面大致闡述mp3解碼所用的基本概念。Ø Main_data_begin 表示一幀數(shù)據(jù)main data的開始位置。它表示main data相對于該幀同步頭的負(fù)偏移。這里涉及到一個bit reservoir的技術(shù),它改變了每幀的可用比特數(shù)為常數(shù)的限制,而是圍繞一個長時間的平均值(目標(biāo)比特率
103、)變化。因為MP3的編碼方式是采用Huffman編碼,所以編碼后每一幀的數(shù)據(jù)長度是不一樣的,可能有的大于目標(biāo)比特率為每一幀分配的空間,有的可能小于這個空間,所以為了增加空間利用率,當(dāng)前幀未使用完的空間可以保存起來留給后面需要的幀使用,因此每一幀的main data開始位置可能在它的header和sideinformation之前,而main_data_begin就是用來指示這個開始位置的,這種技術(shù)就叫做bit reservoir。Ø Private_bits留做私用。Ø
104、 Scfsi、scalefac_compress參考2.3.4 縮放因子(scalefactor)Ø Part_2_3_length表示main data中scalefactor和huffman數(shù)據(jù)所占用的比特數(shù)。Ø Global_gain全局量化步長。Ø Wind
105、ow_switching_flag、block_type和mixed_block_flag參考2.3.5 節(jié)的長短塊切換Ø Table_select、big_values、count1_table_select、region0_count和region1_count參考2.3.2 Huffman碼表的選擇Ø Subblock_gain短窗塊量化時所用的增益偏移量。Ø &
106、#160; Preflag和scalefac_scale在反量化過程中對壓縮數(shù)據(jù)還原時用到的變量。2.3. Mp3解碼算法所用的基本概念2.3.1. 子帶和縮放因子頻帶 壓縮之后的mp3數(shù)據(jù)是以一楨為單位的,每一楨分為兩節(jié)(granule),這兩節(jié)在編解碼時相對獨立,從每一節(jié)中可以解碼出576個pcm數(shù)據(jù),兩節(jié)可解出1152個pcm數(shù)據(jù)。從二進(jìn)制101碼流中得到我們所需要的信息的第一步就是huff
107、man解碼,huffuman編碼信息存放在每一節(jié)中的Huffmancodebits( )中,通過huffman解碼可以得到576個值,這576個值在不同節(jié)類型(參考2.3.5 節(jié)的長短塊切換)下有不同的含義,下面分情況描述: u 該節(jié)為長塊 這576個值代表576條頻率線上的值,它們是時域中576個pcm值經(jīng)過時頻變換的結(jié)果。這576條頻率線從低到高分為32個子帶,每個子帶包含18條頻率線。解出來的這576個值是整數(shù),需要進(jìn)行反量化變成浮點數(shù),反量化的過程
108、并不是一條頻率線為單位進(jìn)行的,而是若干條頻率線為單位進(jìn)行的,這若干條頻率線組成了頻帶(band),叫做縮放因子頻帶(scalefactorband),顧名思義,在一個縮放因子頻帶內(nèi)的頻率線在反量化時共用縮放因子。在44.1khz的采樣率下,縮放因子頻帶的劃分如所示:表格 27 長塊的縮放因子頻帶劃分scalefactor bandwidth of bandindex of startindex of end04031447248113412154416195420236624297630358836439844511010526111126273121674891320901091
109、424110133152813416116341621951742196237185023828719542883412076342417 其中,頻率線418至575不需要歸屬于某一個scalefactor band, 因為屬于這一個頻帶的頻率線在進(jìn)行反量化時,系統(tǒng)提供默認(rèn)的反量化因子。 u 該節(jié)為短塊 這576
110、個值代表192條頻率線上的值,這192條頻率線從低到高分為32個子帶,每個子帶包含6條頻率線。每一條頻率線上有三個值,分別屬于三個窗(window0、window1和window2)。這192條頻率線被劃分為若干縮放因子頻帶,在44.1khz情況下,劃分方式如下:表格 28 短塊的縮放因子頻帶劃分scalefactor bandwidth of band index of startindex of end040314472481134121546162158222961030397124051814526591866831022841051130106135
111、; 其中,頻率線136至192不需要歸屬于某一個scalefactor band, 因為屬于這一個頻帶的頻率線在進(jìn)行反量化時,系統(tǒng)提供默認(rèn)的反量化因子。按先后順序解出來的這576個值先是按縮放因子頻帶從低到高排列,在每一個縮放因子頻帶內(nèi),按window0,window1,window2排列,在每一個window中,頻率線從低到高排列。 u 該節(jié)是混合塊
112、0; 在這種情況下,按先后順序解出來的576個值分為兩部分,第一部分(前36個值)是長塊部分,故它們代表36條頻率線,這36條頻率線(參考表格 27 長塊的縮放因子頻帶劃分)劃分為8個縮放因子頻帶;第二部分(后540個值)是短塊部分,它們代表180個頻率線,每個頻率線上有三個值,分別屬于window0、window1和window2,這180個頻率線(參考表格 28 短塊的縮放因子頻帶劃分)劃分為9個縮放因子頻帶(scalefactorband3àscalefactor band11)。 &
113、#160; 綜合上述三種情況,這576值排列方式如下所示:圖 21不同情況下huffman解碼得到的576個值的含義2.3.2. Huffman碼表的選擇 從Huffmancodebits( )中解碼得到576個值的過程不是一個簡單的查表過程,這涉及到換表的過程。在解碼時,當(dāng)從一個縮放因子頻帶過渡到另一個縮放因子頻帶時,huffman碼表可能需要改變。Huffman解碼得到的576個值分為三個部分,如下所示:圖 22
114、bigvalues和count1的含義 在大值區(qū)(xxx),得到的值較大,一共有bigvalues*2個值,每兩個值一起編碼;在小值區(qū)(-),值只能為-1,0,+1,一共有count1*4個值,每四個值一起編碼;在零值區(qū)(000)值為零,不需要編碼。 在不同區(qū)域編碼時,用到的huffman表是不一樣的。 u 在大值區(qū)編碼時,為了進(jìn)一步提高編碼效率,大值區(qū)又分為三個區(qū)域:re
115、gion0、region1和region2,在不同區(qū)域用不同的huffman表編碼。region的劃分是以縮放因子頻帶為單位劃分的。在side information中,region0_countgrch和region1_countgrch提供了劃分信息。region0_count+1表示在region0區(qū)的縮放因子頻帶的個數(shù),region1_count+1表示在region1區(qū)的縮放因子頻帶的個數(shù)。需要說明的是,如果是短塊或者混合塊中的短塊部分,一個縮放因子頻帶被計數(shù)三次,例如,對于短塊來說,region0_count為8意味著region1從scalefactor band 3開始。Reg
116、ion2區(qū)的長度在side information中并沒有給出,但是根據(jù)big_valuesgrch、region0_count和region1_count可以計算出來。在得到大值區(qū)region的劃分之后,就可以根據(jù)table_selectgrchregion來選擇在每個區(qū)域所用的huffman碼表,一共有32個huffman碼表可供選擇,在mp3官方協(xié)議錯誤!未找到引用源。AnnexB Table 3-B.7中給出了這32個表。 u 在小值區(qū),所用huffman表的選擇信息由count1table_selectgrch提供。
117、需要說明的是,小值區(qū)的長度是count1*4,雖然在side information中并沒有count1,但解碼程序知道在耗盡part2_3_lengthgrch長度的碼流之后就可以判斷已經(jīng)達(dá)到了小值區(qū)的末尾。 2.3.3. huffman碼表的特點 大值區(qū)的huffuman表一個入口項可得到兩個值,小值區(qū)的huffman表一個入口項可得到四個值。
118、大值區(qū)的huffman表有一個參數(shù)為linbits(見2.1.7)。當(dāng)linbit為0時,該huffman表只能用來編碼小于等于15的數(shù)。當(dāng)linbit不為0時,該huffman表可用來編碼值大于15的數(shù),當(dāng)用這樣的huffman碼表編碼時,在hcod|x|y|之后的碼流中有l(wèi)inbit位,這長度為linbit的位串表示無符號整數(shù),它與x(或者y)相加后表示x(或者y)真正的編碼值。 2.3.4. 縮放因子(scalefactor)
119、 如前所述,一個縮放因子頻帶內(nèi)的頻率線在反量化時共用縮放因子,在碼流中,縮放因子被編碼于main_data中(見2.1.6)。要解碼得到縮放因子,首先需要知道該縮放因子所占的比特數(shù),在side information中scale_compressgrch提供了這樣的信息,首先需要查找如下表格:表格 29 scale_compressscale_compressslen1slen2000101202303430511612713821922102311311232133314421543
120、下面針對不同的節(jié)(塊)類型說明slen1和slen2的含義。 u 該節(jié)為長塊slen1表示縮放因子頻帶0到10所用縮放因子的長度;slen2表示縮放因子頻帶11到20所用縮放因子的長度。 u 該節(jié)為短塊slen1表示縮放因子頻帶0到5所用縮放因子的長度;slen2表示縮放因子頻帶6到11所用縮放因子的長度。 u 該節(jié)為混合塊在這種情況下,長塊部分(sfb0到sfb7)和短塊部分(sfb3到sf
121、b5)所用的縮放因子的長度相同,為slen1;短塊部分(sfb6到sfb11)所用的縮放因子長度相同,為slen2。 為了進(jìn)一步地減少mp3碼流的大小,節(jié)1(granule1)有時會共用節(jié)0(granule 0)的縮放因子信息,是否共用由字段scfsiscfsi_band來決定,如下所示:表格 210 scfsiscfsiscfsi_band 0scalefactors are transmitted for each granule1scalefactors transmitted for granule 0 are also valid for granul
122、e 1 表格 211 scfsi_bandscfsi_bandscalefactor bands (see Annex B,Table3-B.8)00,1,2,3,4,516,7,8,9,102111531620 只有g(shù)ranule1的長塊才可以共用前一節(jié)的縮放因子信息,對于短塊來說,scfsi為0。知道縮放因子的共用就不難理解在2.1.6(Main_data)中位流的組織形式。 2.3.5.
123、160;節(jié)的長短塊切換 節(jié)的類型由block_type來定義,如果window_switching_flag未置位,那么block_type的值為0。如果window_switching_flag置位,那么block_type由字段block_typegrch給出,如下所示:表格 212 block_typeblock_typegr 0reserved 1start block23 short windows3end block
124、當(dāng)block_type為0、1、3時,該節(jié)屬于長塊。當(dāng)block_type為2時,如果mixed_block_flaggrch為0,則該節(jié)為短塊;mixed_block_flaggrch為1,則該節(jié)為混合塊。長塊和短塊在解碼時算法有較大區(qū)別。 2.4. mp3解碼具體流程 MP3解碼的流程如下所示,解碼的主要過程包括Preprocessing、Huffman decoding、Requantization、Reordering、Stereo decoding、Alias reduction、IMDCT、Frequ
125、ency inversion、Synthesis filter bank,最后輸出原始的PCM數(shù)據(jù)。圖 23 解碼流程圖2.4.1. 預(yù)處理(Preprocessing) 這個步驟主要是完成Header和Side information的解碼,得到后面解碼所需要的一些信息,并保存起來。2.4.2. Huffman decodi
126、ng 在2.3.1(子帶和縮放因子頻帶)和2.3.2(Huffman碼表的選擇)中已經(jīng)詳細(xì)介紹了,在這里就不再重敘。2.4.3. 反量化(Requantization) 經(jīng)過Huffman解碼之后的值必須經(jīng)過反量化的處理,反量化過程根據(jù)使用的windows使用不同的反量化運算公式,其反量化的公式如下: u 短塊:公式 21u &
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村野生動物園建設(shè)合同協(xié)議書
- 分公司決策流程管理
- 通信特種車輛信號覆蓋優(yōu)化
- 員工離職承諾書模板
- 游戲開發(fā)廠廠長招聘合同模板
- 化工項目招投標(biāo)安全監(jiān)管講座
- 港口碼頭鋼架焊接施工協(xié)議
- 醫(yī)院信息科工作流程優(yōu)化方案
- 民俗旅游合同管理辦法
- 美食廣場營業(yè)員招聘合同
- 角膜潰瘍(課堂PPT)
- ASTMA194-A194M-17中文版
- 二氧化碳的性質(zhì)說課(1)ppt課件
- 音樂教師述職報告
- 英語語法入門筆記(崔榮容-)(共43頁)
- LS風(fēng)險矩陣評價準(zhǔn)則(3頁)
- 統(tǒng)編部編版四年級上冊道德與法治第四單元測試卷(含答案)
- NBC一體式系列氣體保護焊機說明書凱爾達(dá)
- 機房維護表格-運維部
- 《森林報》導(dǎo)讀(課堂PPT)
- 安全標(biāo)識中英文可直接打印
評論
0/150
提交評論