(完整版)OFDMmatlab实现

发布时间 : 星期六 文章(完整版)OFDMmatlab实现更新完毕开始阅读

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段 for a = 0:(averages-1)

subset_ofdm = Tx_data_withoutwindow

(((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,平均相加 end

average_fft_log = 20*log10(average_fft); figure (6) subplot(2,1,1);

plot((0:(avg_temp_time-1))/avg_temp_time, average_fft_log)%归一化 0/avg_temp_time : (avg_temp_time-1)/avg_temp_time hold on

plot(0:1/IFFT_bin_length:1, -35, 'rd') grid on

axis([0 0.5 -40 max(average_fft_log)]) ylabel('Magnitude (dB)')

xlabel('Normalized Frequency (0.5 = fs/2)') title('OFDM Signal Spectrum without windowing')

%===============加窗的发送信号频谱================================= 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段 for a = 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,平均相加 end

average_fft_log = 20*log10(average_fft); 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_time hold on

plot(0:1/IFFT_bin_length:1, -35, 'rd') grid on

axis([0 0.5 -40 max(average_fft_log)]) ylabel('Magnitude (dB)')

xlabel('Normalized Frequency (0.5 = fs/2)') title('Windowed OFDM Signal Spectrum') %====================添加噪声

============================================ 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);%标准差sigma

noise=randn(1,((symbols_per_carrier)*(IFFT_bin_length+GI))+GIP)*noise_scale_factor;%产生正态分布噪声序列

%noise=wgn(1,length(windowed_Tx_data),noise_sigma,'complex');%产生复GAUSS白噪声信号

Rx_data=windowed_Tx_data +noise;%接收到的信号加噪声 %=====================接收信号 串/并变换 去除前缀与后缀==========================================

Rx_data_matrix=zeros(symbols_per_carrier,IFFT_bin_length+GI+GIP); for i=1:symbols_per_carrier;

Rx_data_matrix(i,:)=Rx_data(1,(i-1)*(IFFT_bin_length+GI)+1:i*(IFFT_bin_length+GI)+GIP);%串并变换 end

Rx_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(7);

polar(Rx_phase, Rx_mag,'bd');%极坐标坐标下画出接收信号的星座图

%======================================================================

[M, N]=pol2cart(Rx_phase, Rx_mag); Rx_complex_carrier_matrix = complex(M, N); figure(8);

plot(Rx_complex_carrier_matrix,'*r');%XY坐标接收信号的星座图 axis([-4, 4, -4, 4]); grid on

%====================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(9); subplot(2,1,1);

stem(baseband_out(1:100)); subplot(2,1,2);

stem(baseband_in(1:100)); %================误码率计算

============================================= bit_errors=find(baseband_in ~=baseband_out); bit_error_count = size(bit_errors, 2) ber=bit_error_count/baseband_out_length

联系合同范文客服:xxxxx#qq.com(#替换为@)