OFDM调制解调系统的设计与仿真 实现源程序.doc
文本预览下载声明
clear?all;?
close?all;?
IFFT_bin_length?=?1024;???%?FFT的点数?
carrier_count?=?200;??????%?载波的数量??
bits_per_symbol?=?2;??????%?每个符号代表的比特数?
symbols_per_carrier?=?50;??%?每个载波使用的符号数?
SNR?=?10;??????????????%?信道中的信噪比(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));?
conjugate_carriers?=?IFFT_bin_length?-?carriers?+?2;?
%发送端
%产生随机二进制数据:?
baseband_out?=?round(rand(1,baseband_out_length));?
convert_matrix=reshape(baseband_out,bits_per_symbol,length(baseband_out)/bits_per_symbol);?
for?k?=?1:(length(baseband_out)/bits_per_symbol) modulo_baseband(k)?=?0;????
for?i?=?1:bits_per_symbol?modulo_baseband(k)=modulo_baseband(k)+convert_matrix(i,k)*2^(bits_per_symbol-i);?
end?
end?
%?串并转换?
carrier_matrix?=?reshape(modulo_baseband,?carrier_count,?symbols_per_carrier);?%?对每一个载波的符号进行差分编码
carrier_matrix?=?[zeros(1,carrier_count);carrier_matrix];?
for?i?=?2:(symbols_per_carrier?+?1)?
?carrier_matrix(i,:)=rem(carrier_matrix(i,:)+carrier_matrix(i-1,:),2^bits_per_symbol);?
end?
%?把差分符号代码转换成相位?
carrier_matrix?=?carrier_matrix?*?((2*pi)/(2^bits_per_symbol));?%?把相位转换成复数?
[X,Y]?=?pol2cart(carrier_matrix,?ones(size(carrier_matrix,1),size(carrier_matrix,2)));?
complex_carrier_matrix?=?complex(X,Y);?%?分配载波到指定的IFFT位置?
IFFT_modulation?=?zeros(symbols_per_carrier?+?1,?IFFT_bin_length);?
IFFT_modulation(:,carriers)?=?complex_carrier_matrix;?
IFFT_modulation(:,conjugate_carriers)?=?conj(complex_carrier_matrix);?%?画出频域中的OFDM信号代表?
figure?(1)?
stem(0:IFFT_bin_length-1,?abs(IFFT_modulation(2,1:IFFT_bin_length)),b*-)?
grid?on?
axis?([0?IFFT_bin_length?-0.5?1.5])
ylabel(Magnitude)?
xlabel(IFFT?Bin)?
title(OFDM?Carrier?Frequency?Magnitude)
?%??
figure?(2)?
plot(0:IFFT_bin_length-1,?(180/pi)*angle(IFFT_modulation(2,1:IFFT_bin_length)),?go)?
hold?on?
stem(carriers-1,?(180/pi)*angle(IFFT_modulation(2,carriers)),b*-)?
stem(conjugate_carriers-1,?(180/pi)*angle(IFFT_modulation
显示全部