




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
通信工程實驗報告班級:___通信1班____學號:________姓名:華億超市實驗一FPGA實驗BDPSK調制解調器設計一、實驗目的⒈掌握BDPSK的調制和解調原理。⒉掌握倍頻和分頻的概念以及原理。⒊用VerilogHDL硬件描述語言建模時序邏輯電路,實現BDPSK基帶調制解調系統。實驗報告要求⒈調制器和解調器的外引腳圖和內部結構圖。(MicrosoftVisio中截圖)⒉調制器模塊和解調器模塊的VerilogHDL代碼及注釋。⒊功能仿真和時序仿真結果的波形。(ModelSim中截圖)⒋(選做)開發板驗證后的波形。(示波器上拍照)實驗結果BDPSK調制系統的結構圖。BDPSK調制器模塊的VerilogHDL代碼及注釋。分頻器:modulefre_div(clk,cp0);//分頻器inputclk;outputregcp0;parameterN=32;integeri=0;initialbegincp0<=0;endalways@(posedgeclk)beginif(i<N/2-1)i=i+1;elsebegini=0;cp0=~cp0;endendendmodule隨機碼序列產生器(m序列):modulePN_Seq(clk,reset_n,dataout); inputclk; inputreset_n; outputdataout; reg[7:1]c; always@(posedgeclkornegedgereset_n) begin if(!reset_n)c<=7'b1001110; else begin c[7]<=c[6]; c[6]<=c[5]; c[5]<=c[4]; c[4]<=c[3];c[3]<=c[2]; c[2]<=c[1]; c[1]<=c[2]^c[3]^c[4]^c[7]; end end assigndataout=c[7]; endmodule差分編碼器:moduledif(clk,reset_n,in,out);inputclk;inputreset_n;inputin;outputout;reg[1:0]o;always@(posedgeclkornegedgereset_n) beginif(!reset_n) o<=1; else begin o<=in^o; end end assignout=o;endmodule控制器:moduleController(clk,reset_n,s,address,cp);inputclk;inputreset_n;inputcp;inputs;//相對碼output[4:0]address;reg[4:0]address_data;reg[4:0]count;regsign;always@(posedgecp)beginif(s==0)count<=5'b10000;elseif(s==1)count<=5'b00000; sign<=1;endalways@(posedgeclkornegedgereset_n)beginif(!reset_n) address_data<=5'b00000;elsebeginif(sign==1) begin address_data<=count; sign<=0; endaddress_data<=address_data+1'b1; if(address_data==32) address_data<=5'b00000;endend assignaddress=address_data;endmodule正弦波形查找表:moduleLookUpTable(clk,reset_n,address,dataout);//正弦載波采樣表 inputclk; inputreset_n; input[4:0]address; output[7:0]dataout; reg[7:0]LUT[0:31]; always@(posedgeclkornegedgereset_n) begin if(!reset_n) begin LUT[0]<=128;//用C編程計算出的查找表采樣值填在這里 LUT[1]<=152; LUT[2]<=176; LUT[3]<=198; LUT[4]<=218; LUT[5]<=234; LUT[6]<=245; LUT[7]<=253; LUT[8]<=255; LUT[9]<=253; LUT[10]<=245; LUT[11]<=234; LUT[12]<=218; LUT[13]<=198; LUT[14]<=176; LUT[15]<=152; LUT[16]<=128; LUT[17]<=103; LUT[18]<=79; LUT[19]<=57; LUT[20]<=37; LUT[21]<=22; LUT[22]<=10; LUT[23]<=2; LUT[24]<=0; LUT[25]<=2; LUT[26]<=10; LUT[27]<=22; LUT[28]<=37; LUT[29]<=57; LUT[30]<=79; LUT[31]<=103; end end assigndataout=LUT[address]; endmodule功能仿真和時序仿真結果的波形功能仿真:時序仿真:實驗二MATLAB實驗OFDM誤碼率仿真(AWGN)一、實驗目的:1、掌握OFDM的基本原理。2、掌握用Matlab搭建OFDM系統的基本方法3、用MATLAB進行OFDM系統在AWGN信道下誤碼率分析。二、實驗報告要求1.所有程序完整的源代碼(.m文件)以及注釋。2.仿真結果。對于所有的圖形結果(包括波形與仿真曲線等),將圖形保存成.tif或者.emf的格式并插入word文檔。三、實驗結果1、所有程序完整的源代碼(.m文件)以及注釋:%16QAM的調制函數function[complex_qam_data]=qam16(bitdata)%modulationof16QAM,modulatebitdatato16QAMcomplexsignalX1=reshape(bitdata,4,length(bitdata)/4)';d=1;%mindistanceofsymblefori=1:length(bitdata)/4;forj=1:4X1(i,j)=X1(i,j)*(2^(4-j));endsource(i,1)=1+sum(X1(i,:));%converttothenumber1to16endmapping=[-3*d3*d; -d3*d;d3*d; 3*d3*d; -3*dd; -dd; dd; 3*dd; -3*d-d; -d-d; d-d;3*d-d; -3*d-3*d; -d-3*d; d-3*d; 3*d-3*d];fori=1:length(bitdata)/4qam_data(i,:)=mapping(source(i),:);%datamappingendcomplex_qam_data=complex(qam_data(:,1),qam_data(:,2));%16QAM的解調函數。function[demodu_bit_symble]=demoduqam16(Rx_serial_complex_symbols)%將得到的串行16QAM數據解調成二進制比特流complex_symbols=reshape(Rx_serial_complex_symbols,length(Rx_serial_complex_symbols),1);d=1;mapping=[-3*d3*d; -d3*d;d3*d; 3*d3*d; -3*dd; -dd; dd; 3*dd; -3*d-d; -d-d; d-d;3*d-d; -3*d-3*d; -d-3*d; d-3*d; 3*d-3*d];complex_mapping=complex(mapping(:,1),mapping(:,2));fori=1:length(Rx_serial_complex_symbols);forj=1:16;metrics(j)=abs(complex_symbols(i,1)-complex_mapping(j,1));end[min_metricdecode_symble(i)]=min(metrics);%將離某星座點最近的值賦給decode_symble(i)enddecode_bit_symble=de2bi((decode_symble-1)','left-msb');demodu_bit_symble=reshape(decode_bit_symble',1,length(Rx_serial_complex_symbols)*4);%加窗函數function[rcosw]=rcoswindow(beta,Ts)%定義升余弦窗,其中beta為滾降系數,Ts為包含循環前綴的OFDM符號的長度,Ts為正偶數t=0:(1+beta)*Ts;rcosw=zeros(1,(1+beta)*Ts);fori=1:beta*Ts;rcosw(i)=0.5+0.5*cos(pi+t(i)*pi/(beta*Ts));endrcosw(beta*Ts+1:Ts)=1;forj=Ts+1:(1+beta)*Ts+1;rcosw(j-1)=0.5+0.5*cos((t(j)-Ts)*pi/(beta*Ts));endrcosw=rcosw';%變換為列向量%OFDM主程序clearall;closeall;carrier_count=200;%子載波數symbols_per_carrier=12;%每子載波含符號數bits_per_symbol=4;%每符號含比特數,16QAM調制IFFT_bin_length=512;%FFT點數PrefixRatio=1/4;%保護間隔與OFDM數據的比例1/6~1/4GI=PrefixRatio*IFFT_bin_length;%每一個OFDM符號添加的循環前綴長度為1/4*IFFT_bin_length即保護間隔長度為128beta=1/32;%窗函數滾降系數GIP=beta*(IFFT_bin_length+GI);%循環后綴的長度20SNR=15;%信噪比dB%==================================================%================信號產生===================================baseband_out_length=carrier_count*symbols_per_carrier*bits_per_symbol;%所輸入的比特數目carriers=(1:carrier_count)+(floor(IFFT_bin_length/4)-floor(carrier_count/2));%共軛對稱子載波映射復數數據對應的IFFT點坐標conjugate_carriers=IFFT_bin_length-carriers+2;%共軛對稱子載波映射共軛復數對應的IFFT點坐標baseband_out=round(rand(1,baseband_out_length));%輸出待調制的二進制比特流%==============16QAM調制====================================complex_carrier_matrix=qam16(baseband_out);%列向量complex_carrier_matrix=reshape(complex_carrier_matrix',carrier_count,symbols_per_carrier)';%symbols_per_carrier*carrier_count矩陣figure(1);plot(complex_carrier_matrix,'*r');%16QAM調制后星座圖title('16QAM調制后星座圖')axis([-4,4,-4,4]);gridon%=================IFFT===========================IFFT_modulation=zeros(symbols_per_carrier,IFFT_bin_length);%添0組成IFFT_bin_lengthIFFT運算IFFT_modulation(:,carriers)=complex_carrier_matrix;%未添加導頻信號,子載波映射在此處IFFT_modulation(:,conjugate_carriers)=conj(complex_carrier_matrix);%共軛復數映射%=================================================================signal_after_IFFT=ifft(IFFT_modulation,IFFT_bin_length,2);%OFDM調制即IFFT變換time_wave_matrix=signal_after_IFFT;%時域波形矩陣,行為每載波所含符號數,列ITTF點數,N個子載波映射在其內,每一行即為一個OFDM符號%=====================添加循環前綴與后綴============XX=zeros(symbols_per_carrier,IFFT_bin_length+GI+GIP);fork=1:symbols_per_carrier;fori=1:IFFT_bin_length;XX(k,i+GI)=signal_after_IFFT(k,i);endfori=1:GI;XX(k,i)=signal_after_IFFT(k,i+IFFT_bin_length-GI);%添加循環前綴endforj=1:GIP;XX(k,IFFT_bin_length+GI+j)=signal_after_IFFT(k,j);%添加循環后綴endendtime_wave_matrix_cp=XX;%添加了循環前綴與后綴的時域信號矩陣,此時一個OFDM符號長度為IFFT_bin_length+GI+GIP=660%==============OFDM符號加窗================================windowed_time_wave_matrix_cp=zeros(1,IFFT_bin_length+GI+GIP);fori=1:symbols_per_carrierwindowed_time_wave_matrix_cp(i,:)=real(time_wave_matrix_cp(i,:)).*rcoswindow(beta,IFFT_bin_length+GI)';%加窗升余弦窗end%========================生成發送信號,并串變換=====================windowed_Tx_data=zeros(1,symbols_per_carrier*(IFFT_bin_length+GI)+GIP);windowed_Tx_data(1:IFFT_bin_length+GI+GIP)=windowed_time_wave_matrix_cp(1,:);fori=1:symbols_per_carrier-1;windowed_Tx_data((IFFT_bin_length+GI)*i+1:(IFFT_bin_length+GI)*(i+1)+GIP)=windowed_time_wave_matrix_cp(i+1,:);%并串轉換,循環后綴與循環前綴相疊加end%=======================================================Tx_data=reshape(windowed_time_wave_matrix_cp',(symbols_per_carrier)*(IFFT_bin_length+GI+GIP),1)';%加窗后循環前綴與后綴不疊加的串行信號%=================================================================temp_time1=(symbols_per_carrier)*(IFFT_bin_length+GI+GIP);%加窗后循環前綴與后綴不疊加發送總位數figure(2)subplot(2,1,1);plot(0:temp_time1-1,Tx_data);%循環前綴與后綴不疊加發送的信號波形gridonylabel('Amplitude(volts)')xlabel('Time(samples)')title('循環前后綴不疊加的OFDMTimeSignal')temp_time2=symbols_per_carrier*(IFFT_bin_length+GI)+GIP;subplot(2,1,2);plot(0:temp_time2-1,windowed_Tx_data);%循環后綴與循環前綴相疊加發送信號波形gridonylabel('Amplitude(volts)')xlabel('Time(samples)')title('循環前后綴疊加的OFDMTimeSignal')%===============加窗的發送信號頻譜=================================symbols_per_average=ceil(symbols_per_carrier/5);%符號數的1/5,10行avg_temp_time=(IFFT_bin_length+GI+GIP)*symbols_per_average;%點數,10行數據,10個符號averages=floor(temp_time1/avg_temp_time);average_fft(1:avg_temp_time)=0;%分成5段fora=0:(averages-1)subset_ofdm=Tx_data(((a*avg_temp_time)+1):((a+1)*avg_temp_time));%利用循環前綴后綴未疊加的串行加窗信號計算頻譜subset_ofdm_f=abs(fft(subset_ofdm));%分段求頻譜average_fft=average_fft+(subset_ofdm_f/averages);%總共的數據分為5段,分段進行FFT,平均相加endaverage_fft_log=20*log10(average_fft);figure(3)subplot(2,1,2)plot((0:(avg_temp_time-1))/avg_temp_time,average_fft_log)%歸一化0/avg_temp_time:(avg_temp_time-1)/avg_temp_timeholdonplot(0:1/IFFT_bin_length:1,-35,'rd')gridonaxis([00.5-40max(average_fft_log)])ylabel('Magnitude(dB)')xlabel('NormalizedFrequency(0.5=fs/2)')title('加窗的發送信號頻譜')%====================添加噪聲=================================Tx_signal_power=var(windowed_Tx_data);%發送信號功率linear_SNR=10^(SNR/10);%線性信噪比noise_sigma=Tx_signal_power/linear_SNR;noise_scale_factor=sqrt(noise_sigma);%標準差sigmanoise=randn(1,((symbols_per_carrier)*(IFFT_bin_length+GI))+GIP)*noise_scale_factor;%產生正態分布噪聲序列Rx_data=windowed_Tx_data+noise;%接收到的信號加噪聲%=============接收信號串/并變換去除前綴與后綴==================Rx_data_matrix=zeros(symbols_per_carrier,IFFT_bin_length+GI+GIP);fori=1:symbols_per_carrier;Rx_data_matrix(i,:)=Rx_data(1,(i-1)*(IFFT_bin_length+GI)+1:i*(IFFT_bin_length+GI)+GIP);%串并變換endRx_data_complex_matrix=Rx_data_matrix(:,GI+1:IFFT_bin_length+GI);%去除循環前綴與循環后綴,得到有用信號矩陣%=========================================================%OFDM解碼16QAM解碼%=================FFT變換=================================Y1=fft(Rx_data_complex_matrix,IFFT_bin_length,2);%OFDM解碼即FFT變換Rx_carriers=Y1(:,carriers);%除去IFFT/FFT變換添加的0,選出映射的子載波Rx_phase=angle(Rx_carriers);%接收信號的相位Rx_mag=abs(Rx_carriers);%接收信號的幅度figure(4);polar(Rx_phase,Rx_mag,'bd');%極坐標坐標下畫出接收信號的星座圖title('極坐標下的接收信號的星座圖')%===========================================================[M,N]=pol2cart(Rx_phase,Rx_mag);Rx_complex_carrier_matrix=complex(M,N);figure(5);plot(Rx_complex_carrier_matrix,'*r');%XY坐標接收信號的星座圖title('XY坐標接收信號的星座圖')axis([-4,4,-4,4]);gridon%====================16qam解調=================================Rx_serial_complex_symbols=reshape(Rx_complex_carrier_matrix',size(Rx_complex_carrier_matrix,1)*size(Rx_complex_carrier_matrix,2),1)';Rx_decoded_binary_symbols=demoduqam16(Rx_serial_complex_symbols);%============================================================baseband_in=Rx_decoded_binary_symbols;figure(6);subplot(2,1,1);stem(baseband_out(1:100));title('輸出待調制的二進制比特流')subplot(2,1,2);stem(baseband_in(1:100));title('接收解調后的二進制比特流')%================誤碼率計算===============================bit_errors=find(baseband_in~=baseband_out);bit_error_count=size(bit_errors,2)ber=bit_error_count/baseband_out_length仿真結果誤碼率實驗三MATLAB實驗OFDM誤碼率仿真(衰落)一、實驗目的:1、了解瑞利信道產生的原因及其特征。2、用MATLAB進行OFDM系統在瑞利信道下誤碼率分析。二、實驗報告要求1.所有程序完整的源代碼(.m文件)以及注釋。2.仿真結果。對于所有的圖形結果(包括波形與仿真曲線等),將圖形保存成.tif或者.emf的格式并插入word文檔。三、實驗結果1.%16QAM的調制函數function[complex_qam_data]=qam16(bitdata)%modulationof16QAM,modulatebitdatato16QAMcomplexsignalX1=reshape(bitdata,4,length(bitdata)/4)';d=1;%mindistanceofsymblefori=1:length(bitdata)/4;forj=1:4X1(i,j)=X1(i,j)*(2^(4-j));endsource(i,1)=1+sum(X1(i,:));%converttothenumber1to16endmapping=[-3*d3*d; -d3*d;d3*d; 3*d3*d; -3*dd; -dd; dd; 3*dd; -3*d-d; -d-d; d-d;3*d-d; -3*d-3*d; -d-3*d; d-3*d; 3*d-3*d];fori=1:length(bitdata)/4qam_data(i,:)=mapping(source(i),:);%datamappingendcomplex_qam_data=complex(qam_data(:,1),qam_data(:,2));%16QAM的解調函數。function[demodu_bit_symble]=demoduqam16(Rx_serial_complex_symbols)%將得到的串行16QAM數據解調成二進制比特流complex_symbols=reshape(Rx_serial_complex_symbols,length(Rx_serial_complex_symbols),1);d=1;mapping=[-3*d3*d; -d3*d;d3*d; 3*d3*d; -3*dd; -dd; dd; 3*dd; -3*d-d; -d-d; d-d;3*d-d; -3*d-3*d; -d-3*d; d-3*d; 3*d-3*d];complex_mapping=complex(mapping(:,1),mapping(:,2));fori=1:length(Rx_serial_complex_symbols);forj=1:16;metrics(j)=abs(complex_symbols(i,1)-complex_mapping(j,1));end[min_metricdecode_symble(i)]=min(metrics);%將離某星座點最近的值賦給decode_symble(i)enddecode_bit_symble=de2bi((decode_symble-1)','left-msb');demodu_bit_symble=reshape(decode_bit_symble',1,length(Rx_serial_complex_symbols)*4);%加窗函數function[rcosw]=rcoswindow(beta,Ts)%定義升余弦窗,其中beta為滾降系數,Ts為包含循環前綴的OFDM符號的長度,Ts為正偶數t=0:(1+beta)*Ts;rcosw=zeros(1,(1+beta)*Ts);fori=1:beta*Ts;rcosw(i)=0.5+0.5*cos(pi+t(i)*pi/(beta*Ts));endrcosw(beta*Ts+1:Ts)=1;forj=Ts+1:(1+beta)*Ts+1;rcosw(j-1)=0.5+0.5*cos((t(j)-Ts)*pi/(beta*Ts));endrcosw=rcosw';%變換為列向量%瑞利信道模擬functionr=Ray1(fm,fc,baseband_out_length)f=1:2*fm-1;%通頻帶長度y=0.5./((1-((f-fm)/fm).^2).^(1/2))/pi;%多普勒功率譜(基帶)Sf=zeros(1,baseband_out_length);Sf1=y;%多普勒濾波器的頻響Sf(fc-fm+1:fc+fm-1)=y;%(把基帶映射到載波頻率)x1=randn(1,baseband_out_length);x2=randn(1,baseband_out_length);nc=ifft(fft(x1+i*x2).*sqrt(Sf));%同相分量x3=randn(1,baseband_out_length);x4=randn(1,baseband_out_length);ns=ifft(fft(x3+i*x4).*sqrt(Sf));%正交分量r0=(real(nc)+j*real(ns));%瑞利信號r=abs(r0);%瑞利信號幅值%OFDM主程序clearall;closeall;fm=450;fc=4500;carrier_count=200;%子載波數symbols_per_carrier=12;%每子載波含符號數bits_per_symbol=4;%每符號含比特數,16QAM調制IFFT_bin_length=512;%FFT點數PrefixRatio=1/4;%保護間隔與OFDM數據的比例1/6~1/4GI=PrefixRatio*IFFT_bin_length;%每一個OFDM符號添加的循環前綴長度為1/4*IFFT_bin_length即保護間隔長度為128beta=1/32;%窗函數滾降系數GIP=beta*(IFFT_bin_length+GI);%循環后綴的長度20SNR=15;%信噪比dB%==================================================%================信號產生===================================baseband_out_length=carrier_count*symbols_per_carrier*bits_per_symbol;%所輸入的比特數目carriers=(1:carrier_count)+(floor(IFFT_bin_length/4)-floor(carrier_count/2));%共軛對稱子載波映射復數數據對應的IFFT點坐標conjugate_carriers=IFFT_bin_length-carriers+2;%共軛對稱子載波映射共軛復數對應的IFFT點坐標baseband_out=round(rand(1,baseband_out_length));%輸出待調制的二進制比特流%==============16QAM調制====================================complex_carrier_matrix=qam16(baseband_out);%列向量complex_carrier_matrix=reshape(complex_carrier_matrix',carrier_count,symbols_per_carrier)';%symbols_per_carrier*carrier_count矩陣figure(1);plot(complex_carrier_matrix,'*r');%16QAM調制后星座圖title('16QAM調制后星座圖')axis([-4,4,-4,4]);gridon%=================IFFT===========================IFFT_modulation=zeros(symbols_per_carrier,IFFT_bin_length);%添0組成IFFT_bin_lengthIFFT運算IFFT_modulation(:,carriers)=complex_carrier_matrix;%未添加導頻信號,子載波映射在此處IFFT_modulation(:,conjugate_carriers)=conj(complex_carrier_matrix);%共軛復數映射%=================================================================signal_after_IFFT=ifft(IFFT_modulation,IFFT_bin_length,2);%OFDM調制即IFFT變換time_wave_matrix=signal_after_IFFT;%時域波形矩陣,行為每載波所含符號數,列ITTF點數,N個子載波映射在其內,每一行即為一個OFDM符號%=====================添加循環前綴與后綴============XX=zeros(symbols_per_carrier,IFFT_bin_length+GI+GIP);fork=1:symbols_per_carrier;fori=1:IFFT_bin_length;XX(k,i+GI)=signal_after_IFFT(k,i);endfori=1:GI;XX(k,i)=signal_after_IFFT(k,i+IFFT_bin_length-GI);%添加循環前綴endforj=1:GIP;XX(k,IFFT_bin_length+GI+j)=signal_after_IFFT(k,j);%添加循環后綴endendtime_wave_matrix_cp=XX;%添加了循環前綴與后綴的時域信號矩陣,此時一個OFDM符號長度為IFFT_bin_length+GI+GIP=660%==============OFDM符號加窗================================windowed_time_wave_matrix_cp=zeros(1,IFFT_bin_length+GI+GIP);fori=1:symbols_per_carrierwindowed_time_wave_matrix_cp(i,:)=real(time_wave_matrix_cp(i,:)).*rcoswindow(beta,IFFT_bin_length+GI)';%加窗升余弦窗end%========================生成發送信號,并串變換=====================windowed_Tx_data=zeros(1,symbols_per_carrier*(IFFT_bin_length+GI)+GIP);windowed_Tx_data(1:IFFT_bin_length+GI+GIP)=windowed_time_wave_matrix_cp(1,:);fori=1:symbols_per_carrier-1;windowed_Tx_data((IFFT_bin_length+GI)*i+1:(IFFT_bin_length+GI)*(i+1)+GIP)=windowed_time_wave_matrix_cp(i+1,:);%并串轉換,循環后綴與循環前綴相疊加end%=======================================================Tx_data=reshape(windowed_time_wave_matrix_cp',(symbols_per_carrier)*(IFFT_bin_length+GI+GIP),1)';%加窗后循環前綴與后綴不疊加的串行信號%=================================================================temp_time1=(symbols_per_carrier)*(IFFT_bin_length+GI+GIP);%加窗后循環前綴與后綴不疊加發送總位數figure(2)subplot(2,1,1);plot(0:temp_time1-1,Tx_data);%循環前綴與后綴不疊加發送的信號波形gridonylabel('Amplitude(volts)')xlabel('Time(samples)')title('循環前后綴不疊加的OFDMTimeSignal')temp_time2=symbols_per_carrier*(IFFT_bin_length+GI)+GIP;subplot(2,1,2);plot(0:temp_time2-1,windowed_Tx_data);%循環后綴與循環前綴相疊加發送信號波形gridonylabel('Amplitude(volts)')xlabel('Time(samples)')title('循環前后綴疊加的OFDMTimeSignal')%===============加窗的發送信號頻譜=================================symbols_per_average=ceil(symbols_per_carrier/5);%符號數的1/5,10行avg_temp_time=(IFFT_bin_length+GI+GIP)*symbols_per_average;%點數,10行數據,10個符號averages=floor(temp_time1/avg_temp_time);average_fft(1:avg_temp_time)=0;%分成5段fora=0:(averages-1)subset_ofdm=Tx_data(((a*avg_temp_time)+1):((a+1)*avg_temp_time));%利用循環前綴后綴未疊加的串行加窗信號計算頻譜subset_ofdm_f=abs(fft(subset_ofdm));%分段求頻譜average_fft=average_fft+(subset_ofdm_f/averages);%總共的數據分為5段,分段進行FFT,平均相加endaverage_fft_log=20*log10(average_fft);figure(3)subplot(2,1,2)plot((0:(avg_temp_time-1))/avg_temp_time,average_fft_log)%歸一化0/avg_temp_time:(avg_temp_time-1)/avg_temp_timeholdonplot(0:1/IFFT_bin_length:1,-35,'rd')gridonaxis([00.5-40max(average_fft_log)])ylabel('Magnitude(dB)')xlabel('NormalizedFrequency(0.5=fs/2)')title('加窗的發送信號頻譜')%====================瑞利信道=================================cd=length(windowed_Tx_data);t=1:cd;delay=[03171109173251];power=[0-1-9-10-15-20];y_in=[zeros(1,delay(6))windowed_Tx_data];Rx_data=zeros(1,cd);fori=1:6Rx_data+Ray1(fm,fc,cd);Rx_data=Rx_data+Ray1(fm,fc,cd).*y_in(delay(6)+1-delay(i):delay(6)+cd-delay(i))*10^(power(i)/20);end%=============接收信號串/并變換去除前綴與后綴==================Rx_data_matrix=zeros(symbols_per_carrier,IFFT_bin_length+GI+GIP);fori=1:symbols_per_carrier;Rx_data_matrix(i,:)=Rx_data(1,(i-1)*(IFFT_bin_length+GI)+1:i*(IFFT_bin_length+GI)+GIP);%串并變換endRx_data_complex_matrix=Rx_data_matrix(:,GI+1:IFFT_bin_length+GI);%去除循環前綴與循環后綴,得到有用信號矩陣%=========================================================%OFDM解碼16QAM解碼%=================FFT變換=================================Y1=fft(Rx_data_complex_matrix,IFFT_bin_length,2);%OFDM解碼即FFT變換Rx_carriers=Y1(:,carriers);%除去IFFT/FFT變換添加的0,選出映射的子載波Rx_phase=angle(Rx_carriers);%接收信號的相位Rx_mag=abs(Rx_carriers);%接收信號的幅度figure(4);polar(Rx_phase,Rx_mag,'bd');%極坐標坐標下畫出接收信號的星座圖title('極坐標下的接收信號的星座圖')%===========================================================[M,N]=pol2cart(Rx_phase,Rx_mag);Rx_complex_carrier_matrix=complex(M,N);figure(5);plot(Rx_complex_carrier_matrix,'*r');%XY坐標接收信號的星座圖title('XY坐標接收信號的星座圖')axis([-4,4,-4,4]);gridon%====================16qam解調=================================Rx_serial_complex_symbols=reshape(Rx_complex_carrier_matrix',size(Rx_complex_carrier_matrix,1)*size(Rx_complex_carrier_matrix,2),1)';Rx_decoded_binary_symbols=demoduqam16(Rx_serial_complex_symbols);%============================================================baseband_in=Rx_decoded_binary_symbols;figure(6);subplot(2,1,1);stem(baseband_out(1:100));title('輸出待調制的二進制比特流')subplot(2,1,2);stem(baseband_in(1:100));title('接收解調后的二進制比特流')%================誤碼率計算===============================bit_errors=find(baseband_in~=baseband_out);bit_error_count=size(bit_errors,2)ber=bit_error_count/baseband_out_length4、仿真結果實驗四MATLAB實驗多入多出(MIMO)系統接收端檢測一、實驗目的1.掌握MIMO系統信道模型2.掌握MIMO接收端檢測的算法原理3.掌握MIMO系統誤碼率仿真的過程與分析方法二、實驗要求1.所有程序完整的源代碼(.m文件)以及注釋。2.仿真結果。對于所有的圖形結果(包括波形與仿真曲線等),將圖形保存成.tif或者.emf的格式并插入word文檔。三、實驗結果1.所有程序完整的源代碼(.m文件)以及注釋。%ML-ZF-MMSE檢測算法比較%bpsk調制-瑞利衰落信道-2個發送端,2個接收端%%clcclearN=10^4;%發送的符號數目Eb_N0_dB=0:20;%信噪比范圍nTx=2;nRx=2;%%%MLforii=1:length(Eb_N0_dB)%發送端ip=rand(1,N)>0.5;%等概率產生0和1s=2*ip-1;%BPSK調制0->-1;1->0sMod=kron(s,ones(nRx,1));%sMod=reshape(sMod,[nRx,nTx,N/nTx]);%將矩陣轉換為[nRx,nTx,N/nTx]形式h=1/sqrt(2)*[randn(nRx,nTx,N/nTx)+j*randn(nRx,nTx,N/nTx)];%瑞利衰落信道n=1/sqrt(2)*[randn(nRx,N/nTx)+j*randn(nRx,N/nTx)];%0均值高斯白噪聲%加入噪聲后在信道中傳輸a=h.*sMod;%將兩個矩陣的第三維分別相乘b=sum(h.*sMod,2);%將第三維加為一列c=squeeze(sum(h.*sMod,2));%變換為2x10矩陣d=10^(-Eb_N0_dB(ii)/20)*n;%噪聲為2x10矩陣y=squeeze(sum(h.*sMod,2))+10^(-Eb_N0_dB(ii)/20)*n;%最大似然接收%----------------------------%當[s1s2]=[+1,+1]sHat1=[11]; sHat1=repmat(sHat1,[1,N/2]);sHat1Mod=kron(sHat1,ones(nRx,1)); sHat1Mod=reshape(sHat1Mod,[nRx,nTx,N/nTx]); %發送矩陣zHat1=squeeze(sum(h.*sHat1Mod,2));%接收矩陣%e=abs(y-zHat1);%取理論接收與實際接收的絕對值J11=sum(abs(y-zHat1),1);%將兩行加為一行%%%當[s1s2]=[+1,-1]sHat2=[1-1]; sHat2=repmat(sHat2,[1,N/2]);sHat2Mod=kron(sHat2,ones(nRx,1)); sHat2Mod=reshape(sHat2Mod,[nRx,nTx,N/nTx]); zHat2=squeeze(sum(h.*sHat2Mod,2));J10=sum(abs(y-zHat2),1);%%%當[s1s2]=[-1,+1]sHat3=[-11]; sHat3=repmat(sHat3,[1,N/2]);sHat3Mod=kron(sHat3,ones(nRx,1)); sHat3Mod=reshape(sHat3Mod,[nRx,nTx,N/nTx]); zHat3=squeeze(sum(h.*sHat3Mod,2));J01=sum(abs(y-zHat3),1);%%當[s1s2]=[-1,-1]sHat4=[-1-1]; sHat4=repmat(sHat4,[1,N/2]);sHat4Mod=kron(sHat4,ones(nRx,1)); sHat4Mod=reshape(sHat4Mod,[nRx,nTx,N/nTx]); zHat4=squeeze(sum(h.*sHat4Mod,2));J00=sum(abs(y-zHat4),1);%%%從四組數值中找出最小值jj,所在位置ddrVec=[J11;J10;J01;J00];[jjdd]=min(rVec,[],1);%%%mappingtheminimatobitsref=[11;10;01;00];ipHat=zeros(1,N);ipHat(1:2:end)=ref(dd,1);ipHat(2:2:end)=ref(dd,2);%%%統計錯誤f=find([ip-ipHat]);%發生錯誤所在位置nErrML(ii)=size(find([ip-ipHat]),2);%錯誤個數end%%%ZFforii=1:length(Eb_N0_dB)%發送端ip=rand(1,N)>0.5;%等概率生成0,1s=2*ip-1;%BPSK調制0->-1;1->0%a=ones(nRx,1)sMod=kron(s,ones(nRx,1));%sMod=reshape(sMod,[nRx,nTx,N/nTx]);%變換矩陣形式為[nRx,nTx,N/NTx]h=1/sqrt(2)*[randn(nRx,nTx,N/nTx)+j*randn(nRx,nTx,N/nTx)];%瑞利信道n=1/sqrt(2)*[randn(nRx,N/nTx)+j*randn(nRx,N/nTx)];%0均值高斯白噪聲%加入白噪聲后在信道中傳輸y=squeeze(sum(h.*sMod,2))+10^(-Eb_N0_dB(ii)/20)*n;%接收端%求偽逆矩陣G=inv(H^H*H)*H^H%H^H*H的矩陣維數為[nTxxnTx].即[2x2]%[2x2]矩陣的轉置為[ab;cd]=1/(ad-bc)[d-b;-ca]hCof=zeros(2,2,N/nTx);hCof(1,1,:)=sum(h(:,2,:).*conj(h(:,2,:)),1);%dhCof(2,2,:)=sum(h(:,1,:).*conj(h(:,1,:)),1);%ahCof(2,1,:)=-sum(h(:,2,:).*conj(h(:,1,:)),1);%chCof(1,2,:)=-sum(h(:,1,:).*conj(h(:,2,:)),1);%bhDen=((hCof(1,1,:).*hCof(2,2,:))-(hCof(1,2,:).*hCof(2,1,:)));%ad-bchDen=reshape(kron(reshape(hDen,1,N/nTx),ones(2,2)),2,2,N/nTx);%hInv=hCof./hDen;%inv(H^H*H)hMod=reshape(conj(h),nRx,N);%H^HyMod=kron(y,ones(1,2));%接收信號矩陣化yMod=sum(hMod.*yMod,1);%H^H*yyMod=kron(reshape(yMod,2,N/nTx),ones(1,2));%yHat=sum(reshape(hInv,2,N).*yMod,1);%inv(H^H*H)*H^H*y%接收端硬判決解碼ipHat=real(yHat)>0;%統計錯誤nErrZF(ii)=size(find([ip-ipHat]),2);end%%%MMSEforii=1:length(Eb_N0_dB)%發送端ip=rand(1,N)>0.5;s=2*ip-1;%BPSK調制0->-1;1->0sMod=kron(s,ones(nRx,1));%sMod=reshape(sMod,[nRx,nTx,N/nTx]);%[nRx,nTx,N/NTx]h=1/sqrt(2)*[randn(nRx,nTx,N/nTx)+j*randn(nRx,nTx,N/nTx)];n=1/sqrt(2)*[randn(nRx,N/nTx)+j*randn(nRx,N/nTx)];%加入高斯白噪聲后在信道中傳輸y=squeeze(sum(h.*sMod,2))+10^(-Eb_N0_dB(ii)/20)*n;%接收端%MMSEW=inv(H^H*H+sigma^2*I)*H^H%H^H*Hi的維數為[nTxxnTx].即[2x2]%[2x2]矩陣的逆[ab;cd]=1/(ad-bc)[d-b;-ca]hCof=zeros(2,2,N/nTx);hCof(1,1,:)=sum(h(:,2,:).*conj(h(:,2,:)),1)+10^(-Eb_N0_dB(ii)/10);%dhCof(2,2,:)=sum(h(:,1,:).*conj(h(:,1,:)),1)+10^(-Eb_N0_dB(ii)/10);%ahCof(2,1,:)=-sum(h(:,2,:).*conj(h(:,1,:)),1);%chCof(1,2,:)=-sum(h(:,1,:).*conj(h(:,2,:)),1);%bhDen=((hCof(1,1,:).*hCof(2,2,:))-(hCof(1,2,:).*hCof(2,1,:)));%ad-bchDen=reshape(kron(reshape(hDen,1,N/nTx),ones(2,2)),2,2,N/nTx);hInv=hCof./hDen;%inv(H^H*H)hMod=reshape(conj(h),nRx,N);%H^HyMod=kron(y,ones(1,2));yMod=sum(hMod.*yMod,1);%H^H*yyMod=kron(reshape(yMod,2,N/nTx),ones(1,2));yHat=sum(reshape(hInv,2,N).*yMod,1);%inv(H^H*H)*H^H*y%接收端ipHat=real(yHat)>0;%統計錯誤nErrMMSE(ii)=size(find([ip-ipHat]),2);end%%%無衰落bpsk調制forii=1:length(Eb_N0_dB)%Transmitterip=rand(1,N)>0.5;s=2*ip-1;n=1/sqrt(2)*[randn(1,N)+j*randn(1,N)];%Noiseadditiony=s+10^(-Eb_N0_dB(ii)/20)*n;%additivewhitegaussiannoise%receiver-harddecisiondecodingipHat=real(y)>0;%countingtheerrorsnErrBPSK(ii)=size(find([ip-ipHat]),2);end%%%比特錯誤率simBer1=nErrML/N;%仿真比特錯誤率simBer2=nErrZF/N;simBer3=nErrMMSE/N;%simBer4=nErrBPSK/N;EbN0Lin=10.^(Eb_N0_dB/10);%theoryBer_nRx1=0.5.*(1-1*(1+1./EbN0Lin).^(-0.5));%p=1/2-1/2*(1+1./EbN0Lin).^(-1/2);%theoryBerMRC_nRx2=p.^2.*(1+2*(1-p));theoryBerBPSK=0.5*erfc(sqrt(EbN0Lin));%bpsktheoreticalber0.5erfc(sqrt(r))%%%作圖closeallfigure%semilogy(Eb_N0_dB,theoryBer_nRx1,'bp-','LineWidth',2);%semilogy(Eb_N0_dB,theoryBerMRC_nRx2,'kd-','LineWidth',2);semilogy(Eb_N0_dB,simBer1,'*g-','LineWidth',2);%MLholdonsemilogy(Eb_N0_dB,simBer2,'oy-','LineWidth',2);%ZFsemilogy(Eb_N0_dB,simBer3,'+r-','LineWidth',2);%MMSE%semilogy(Eb_N0_dB,simBer4,'mx-','LineWidth',2);semilogy(Eb_N0_dB,theoryBerBPSK,'b.-','LineWidth',2);%BPSKaxis([02010^-5
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司房屋安全管理辦法
- 智慧場館業務管理辦法
- 自動化專業學生的就業前景與職業發展
- 退役磷酸鐵鋰正極衍生磷化鐵活性材料在鋰氧氣電池中的應用探究
- 金融基礎理論課程知識體系優化
- 堿溶處理對硅藻土保水滲透性能的作用機制探討
- 餐飲業新店開業策劃全攻略
- 功能文體學視角下的歐洲小說人物塑造深度解讀
- 高校心理危機干預機制建設與實施研究
- 晉江市封控區管理辦法
- 余料使用管理制度
- 農業面源防治課件
- 2025至2030中國氨基吡啶行業項目調研及市場前景預測評估報告
- 2025-2030中國商業展示道具市場應用前景及投資價值評估報告
- 2025年甘肅省武威市民勤縣西渠鎮人民政府選聘專業化管理村文書筆試參考題庫及1套完整答案詳解
- 防洪防汛安全知識試題及答案
- T/CCMA 0137-2022防撞緩沖車
- 江蘇省2025年中職職教高考文化統考數學試題答案
- 浙江省公路工程監理用表-監理旁站記錄2025
- 產科促宮縮藥
- 2024年貴州省余慶縣事業單位公開招聘醫療衛生崗筆試題帶答案
評論
0/150
提交評論