當前位置:編程學習大全網 - 源碼下載 - 增量序列源代碼

增量序列源代碼

註意這兩個是帶引號的字符,給的是matlab自帶函數常用的參數SNR,' fsk ',M,1,' coherent ');%這意味著相關性檢驗估計應該解決您的d。

拿著估計信道。有壹條誤碼率曲線

全部清除;

全部關閉;

Fprintf( '\n OFDM模擬\ n \ n ');

% - %

%參數定義%

% - %

IFFT _賓_長度= 1024;

載波計數= 200;

每符號位數= 2;

符號每載波= 50;

%子載波數量200

%數字/符號2

%符號/載體50

%訓練符號數10

%循環前綴長度T/4(作者註明)全零CP

%調制模式QDPSK

多路徑信道2、3和4的數量百分比(默認)

%通道最大延遲7(單位數據符號)

%模擬條件發送和接收之間的嚴格同步

% SNR =輸入(' SNR = ');%輸入信噪比參數

信噪比= 3:14;%定義信噪比範圍

BER =零(1,長度(SNR));

基帶輸出長度=載波計數*符號每載波*比特每符號;%計算發送的二進制序列的長度

carriers =(1:carrier _ count)+(floor(IFFT _ bin _長度/4)-floor(carrier _ count/2));%坐標:(1到200)+156,157-356

共軛_載波= IFFT _ bin _長度-載波+2;%坐標:1024-(157:356)+2 = 1026-(157:356)=(869:670)

%構造* * * yoke時間-載波矩陣,從而應用所謂的RCC,降低計算復雜度算法,即ifft後的結果是實數。

%定義共軛時間載波矩陣

%妳也可以使用flipdim函數來構造對稱的* * *軛矩陣。

% - %

%信號發射%

% - %

%out = rand(1,基帶_ out _ length);

% baseband _ out 1 = round(out);

% baseband _ out 2 = floor(out * 2);

% baseband _ out 3 = ceil(out * 2)-1;

%baseband_out4 = randint(1,baseband _ out _ length);

%四種生成待發送二進制序列的方法,任選壹種生成待發送二進制序列。

%if(基帶輸出1 ==基帶輸出& amp基帶_out1 ==基帶_out3)

% fprintf('傳輸序列已生成\ n \ n ');

% baseband _ out = baseband _ out 1;

%否則

% fprintf('校驗碼!!!!!!!!!!!!!!!!!!!!!\ n \ n’);

%結束

%驗證生成發送的二進制序列的四種方法。

基帶_out=round( rand(1,基帶_ out _ length));

convert _ matrix = shape(baseband _ out,bits_per_symbol,length(baseband _ out)/bits _ per _ symbol);

對於k = 1長度(基帶輸出)/每符號比特數),

模_基帶(k)= 0;

對於i = 1:每符號比特數

模_基帶(k) =模_基帶(k) +轉換_矩陣(I,k)* 2^(bits_per_symbol-I);

結束

結束

%每2位轉換成0到3的整數。

%采用“左msb”模式。

% -

由lavabin進行的測試百分比

%壹個直接將二進制位轉換成十進制數的內置函數

% -

% convert _ matrix 1 = 0(length(baseband _ out)/bits _ per _ symbol,bits _ per _ symbol);

% convert _ matrix 1 = convert _ matrix ';

% Test _ convert _ matrix 1 = bi2de(convert _ matrix 1,bits_per_symbol,' left-msb ');

% Test _ convert _ matrix 2 = bi2de(convert _ matrix 1,bits_per_symbol,' right-msb ');

%功能描述:

% BI2DE將二進制向量轉換為十進制數。

% D = BI2DE(B)將二進制向量B轉換為十進制值D。當B為

% a矩陣,轉換按行執行,輸出D是a

%十進制值的列向量。二進制文件的默認方向

% input是右-MSB;B中的第壹個元素代表最低有效位。

% if(modulo _ baseband = = Test _ convert _ matrix 1 ')

% fprintf(' modulo _ baseband = Test _ convert _ matrix 1 \ n \ n ');

% else if(modulo _ baseband = = Test _ convert _ matrix 2’)

% fprintf(' modulo _ baseband = Test _ convert _ matrix 2 \ n \ n ');

%否則

% fprintf(' modulo _ baseband ~ = any Test _ convert _ matrix \ n \ n ');

%結束

%結束

%我們得到結果“modulo _ baseband = Test _ convert _ matrix 1”。

% -

carrier _ matrix = shape(modulo _ baseband,carrier_count,symbols _ per _ carrier)’;

%生成時間載波矩陣

% - %

% QDPSK調制%

% - %

carrier_matrix = [zeros(1,carrier _ count);載體_矩陣];%添加差分調制的初始相位,即0。

對於i =符號每載波+ 1)

carrier_matrix(i,= rem(carrier_matrix(i,+ carrier_matrix (i-1,,2^bits_per_symbol);%差分調制

結束

載波_矩陣= carrier_matrix*((2*pi)/(2^bits_per_symbol));%產生微分相位。

[X,Y]=pol2cart(carrier_matrix,ones(size(carrier_matrix,1),size(carrier_matrix,2));%從極坐標到復數坐標,第壹個參數是相位,第二個參數是振幅。

% Carrier_matrix包含所有的相位信息,並且所有的幅度都是相同的“1”。

復數_載體_矩陣=復數(X,Y);

%添加訓練序列` 2

training _ symbols =[1j j 1-1j j j 1j j 1j j 1j j 1j j 1j j 1j j 1j...

-j-j-1 1j j-1-j-1j-j-1j-1j-j-1j-1j-1j-1j-1j-1j-1j-j-1...

1j j 1-1-j-j-1j j 1j j 1j j 1j j 1j j 1-1j-j 1-j 1-j 1j 1j 1j 1j 1...

-1-j-j-1j j 1j j 1j-j-1j j 1-j-j-1j-j-1j-j-1j 1j j 1j 1j 1-j-1j-j-65438...

-1 1j j 1-j-j-1j j 1j j 1j-j-1j j j 1j j 1j j 1j 1j% 25次" 1 j j 1 ",25次"-1 -j -j -1 ",共200個符號為壹行

training_symbols = cat(1,training_symbols,訓練_ symbols);

training_symbols = cat(1,training_symbols,訓練_ symbols);%產生4行訓練符號

復數_載波_矩陣= cat(1,訓練_符號,復數_載波_矩陣);%訓練序列與數據合並

%塊類型導頻符號

IFFT _調制=零(每載波4 +符號+ 1,IFFT _ bin _ length);

%這裏,零的行向量位於訓練符號和數據符號之間!!!

% 4個訓練符號和1個零符號

%每個OFDM符號占用壹行“IFFT調制”

IFFT _調制(:,載波)=復數_載波_矩陣;

IFFT _調制(:,共軛_載波)= conj(復數_載波_矩陣);

% -

%測試由lavabin -找到零的索引

%index_of_zeros = zeros(每載波符號,IFFT _ bin _ length-2 *載波計數);

% IFFT _調制1 =零(4 +符號_每載波+ 1,IFFT _ bin _長度);

% IFFT _調制2 =零(每載波4 +符號+ 1,IFFT _ bin _長度);

% IFFT _調制1(6:符號_每載波+5,= IFFT _調制(6:符號_每載波+5,= = 0;

i = 1的百分比:每載波符號數

%index_of_zeros(i,= find(IFFT _調制1(i+5,= = 1);

%結束

% -

時間_波_矩陣= IFFT(IFFT _調制’);用於IFFT操作的%

時間波矩陣=時間波矩陣';%如果X是壹個矩陣,ifft返回矩陣每壹列的逆傅立葉變換。

對於i = 1: 4 +每載波符號數+ 1

windowed_time_wave_matrix( i,)= real(time_wave_matrix( i,));

結束

%得到IFFT結果的實部

%這壹步可以省略,因為IFFT結果都是實數。

可以看出,只取了IFFT之後的載體上的點,沒有復制CP和添加end。

OFDM _ modulation = reshape(windowed _ time _ wave _ matrix ',1,IFFT_bin_length*(4 +符號_每載波+1));

% P2S操作

% -

由lavabin進行的測試百分比

%矩陣轉換的另壹種方式

%ofdm_modulation_tmp =窗口化_時間_波形_矩陣。;

% OFDM _ modulation _ test = OFDM _ modulation _ tmp(';

%if (ofdm調制測試== ofdm調制)

% fprintf(' OFDM _ modulation _ test = = OFDM _ modulation \ n \ n ');

%否則

% fprintf(' OFDM _ modulation _ test ~ = OFDM _ modulation \ n \ n ');

%結束

%我們得到結果“OFDM _ modulation _ test = = OFDM _ modulation”。

% -

Tx _ data = ofdm _ modulation

% - %

%通道模擬%

% - %

d 1 = 4;a 1 = 0.2;D2 = 5;a2 = 0.3D3 = 6;a3 = 0.4D4 = 7;a4 = 0.5%通道模擬

copy1 =零(size(Tx _ data));

對於i = 1 + d1:長度(Tx_data)

copy 1(I)= a 1 * Tx _ data(I-d 1);

結束

copy2 =零(size(Tx _ data));

對於i = 1 + d2:長度(Tx_data)

copy 2(I)= a2 * Tx _ data(I-D2);

結束

copy3 =零(size(Tx _ data));

對於i = 1 + d3:長度(Tx_data)

copy 3(I)= a3 * Tx _ data(I-D3);

結束

copy4 =零(size(Tx _ data));

對於i = 1 + d4:長度(Tx_data)

copy 4(I)= a4 * Tx _ data(I-D4);

結束

Tx _ data = Tx _ data+copy 1+copy 2+copy 3+copy 4;% 4個多路徑

Tx _ signal _ power = var(Tx _ data);

對於IDX = 1:長度(信噪比)%蒙特卡洛模擬

linear_SNR = 10^(信噪比(idx)/10);

noise _σ= Tx _ signal _ power/linear _ SNR;

噪聲_比例_因子= sqrt(噪聲_西格瑪);

noise = randn(1,長度(Tx _ data))* noise _ scale _ factor;

Rx_Data = Tx_data +噪聲;

% - %

%信號接收%

% - %

Rx _ Data _ matrix = shape(Rx _ Data,IFFT_bin_length,4+symbols _ per _ carrier+1);

Rx _ spectrum = FFT(Rx _ Data _ matrix);

%假設Tx和Rx之間精確同步

Rx _ carriers = Rx _ spectrum(carriers,)';

Rx _ training _ symbols = Rx _ carriers((1:4),:);

Rx _ carrier = Rx _ carriers((5:55),:);

% - %

%信道估計%

% - %

Rx _ training _ symbols = Rx _ training _符號。/training _ symbols;

Rx _ training _ symbols _ deno = Rx _ training _ symbols。^2;

Rx _ training _ symbols _ deno = Rx _ training _ symbols _ deno(1,+Rx_training_symbols_deno(2,+Rx_training_symbols_deno(3,+Rx_training_symbols_deno(4,;

Rx _ training _ symbols _ nume = Rx _ training _ symbols(1,)+Rx_training_symbols(2,)+ Rx_training_symbols(3,)+Rx_training_symbols(4,);

Rx _ training _ symbols _ nume = conj(Rx _ training _ symbols _ nume);

%取4個向量的導頻符號進行平均優化。

%對“線向量”即單個OFDM符號進行操作。

%的原理:求1/H對FFT後的數據進行頻域補償。

% 1/H = conj(H)/H^2因為H^2 = H * conj(H)

Rx _ training _ symbols = Rx _ training _ symbols _ nume。/Rx _ training _ symbols _ deno;

Rx _ training _ symbols = Rx _ training _ symbols _ nume。/Rx _ training _ symbols _ deno;

Rx_training_symbols _ 2 = cat(1,Rx _ training _ symbols,Rx _ training _ symbols);

Rx _ training _ symbols _ 4 = cat(1,Rx_training_symbols_2,Rx _ training _ symbols _ 2);

Rx _ training _ symbols _ 8 = cat(1,Rx_training_symbols_4,Rx _ training _ symbols _ 4);

Rx _ training _ symbols _ 16 = cat(1,Rx_training_symbols_8,Rx _ training _ symbols _ 8);

Rx _ training _ symbols _ 32 = cat(1,Rx_training_symbols_16,Rx _ training _ symbols _ 16);

Rx _ training _ symbols _ 48 = cat(1,Rx_training_symbols_32,Rx _ training _ symbols _ 16);

Rx _ training _ symbols _ 50 = cat(1,Rx_training_symbols_48,Rx _ training _ symbols _ 2);

Rx _ training _ symbols = cat(1,Rx_training_symbols_50,Rx _ training _ symbols);

Rx _ carriers = Rx _ training _ symbols。* Rx _ carriers%用於頻域單抽頭均衡。

Rx_phase =角度(Rx _ carriers)*(180/pi);

phase _ negative = find(Rx _ phase & lt;0) ;

% -使用“rem”的測試-

% Rx _ phase 1 = Rx _ phase;

% Rx _ phase2 = Rx _ phase

% Rx _ phase 1(phase _ negative)= rem(Rx _ phase 1(phase _ negative)+360,360);

% Rx _ phase 2(phase _ negative)= Rx _ phase 2(phase _ negative)+360;

% if Rx _ phase 2(phase _ negative)= = Rx _ phase 1(phase _ negative)

%fprintf('\n在負相位轉換中不需要使用rem。\n ')

%否則

% fprintf('\n我們需要在負相變中使用rem。\n ')

%結束

% -

Rx _ phase(phase _ negative)= rem(Rx _ phase(phase _ negative)+360,360);%將負相位轉換為正相位

Rx _ decoded _ phase = diff(Rx _ phase);

%這就是為什麽要在它前面加初始階段。

% "此處零的行向量位於訓練符號和數據符號之間!!!"

phase _ negative = find(Rx _ decode _ phase & lt;0) ;

Rx _ decoded _ phase(phase _ negative)= rem(Rx _ decoded _ phase(phase _ negative)+360,360);%將負相位再次轉換為正相位。

% - %

% QDPSK解調%

% - %

base _ phase = 360 /2^bits_per_symbol;

δ_ phase = base _ phase/2;

Rx_decoded_symbols =零(size(Rx_decoded_phase,1),size(Rx_decoded_phase,2));

對於I = 1:(2^bits_per_symbol-1)

center _ phase = base _ phase * I;

plus_delta =中心_相位+delta _相位;%決策閾值1

minus_delta =中心相位-delta _相位;%決策閾值2

decoded = find((Rx _ decoded _ phase & lt;= plus _ delta)& amp;(Rx _ decoded _ phase & gtMINUS _ delta));

Rx_decoded_symbols(已解碼)= I;

結束

%只對三個領域進行了評判。

剩余區域的%是零相位空間。

%定義解調矩陣時,該區域已被定義為零。

Rx _ serial _ symbols = reshape(Rx _ decoded _ symbols ',1,size(Rx_decoded_symbols,1)* size(Rx _ decoded _ symbols,2));

對於i =每符號比特數:-1: 1

如果i ~= 1

Rx_binary_matrix(i,)= rem(Rx_serial_symbols,2);

Rx _串行_符號= floor(Rx _串行_符號/2);

其他

Rx_binary_matrix( i,)= Rx _ serial _ symbols

結束

結束

%整數對二進制

baseband _ in = shape(Rx _ binary _ matrix,1,size(Rx_binary_matrix,1)*size(Rx_binary_matrix,2));

% - %

%錯誤率計算%

% - %

% bit _ errors(idx)= find(baseband _ in ~ = baseband _ out);

% find的結果的每個元素都是滿足邏輯條件的輸入向量的標簽,它的向量長度也是發送和接收不同的比特數。

% bit _ error _ count(idx)= size(bit _ error,2);

%total_bits = size(基帶_輸出,2);

%位錯誤率=位錯誤計數/總位數;

%fprintf ( '%f \n ',bit _ error _ rate);

[number_err(idx),BER(idx)] = biterr(基帶_out,基帶_ in);

結束

半對數(SNR,BER,' r * ');

圖例(' OFDM BER-SNR ');

xlabel(' SNR(dB)');y label(' BER ');

標題(“OFDM”);

網格打開;

% - %

%結束%

% - %

%

% 1.這個程序執行壹個簡單的LMS信道估計,沒有增加與其他信道估計算法的比較,如MMSE;

%

%2.仿真條件是系統處於理想同步狀態。

  • 上一篇:應用程序編程接口API究竟是什麽呢,我就是不理解
  • 下一篇:海南主要旅遊景點分布及介紹
  • copyright 2024編程學習大全網