📄 新建 文本文档.txt
字号:
我怀疑我写的OFDM的瑞利多径程序原理上有问题,能否请高手帮忙参考参考!多谢多谢。
为了避免占用论坛太多空间,问题解决后上传所有m文件,给新手共享。
N=1024; % 1024个子载波
GI=64; % 保护间隔
CH=(1-exp(-1))*[ exp(0:-1:-5) ]; % 瑞利多径信道的功率分布。我用6径模型。1-exp(-1)把能量归一化
SNR = 20 ; % 信噪比dB
sig2=1/(N*10^(SNR/10)); % 加性高斯白噪声的方差。
trellis=poly2trellis([7],[133 171]); %卷积码的编码格行图
load ENC16.mat %加载16QAM映射用的星座图
btot=N/2-4; %一个OFDM码元的传输bit总数
TransmitIter=100; %传输OFDM符号总数
totalErrors=0; %错误比特总数
for k=1:TransmitIter
Msg=[randn(1,btot)>0 zeros(1,4)]; %发送的信息序列
Msg_coden=convenc(Msg,trellis); %卷积编码
Msg_mod=modulate(Msg_coden,s16,N); %16qam星座图映射(不是matlab自带的)
ofdm_symbol=ifft(Msg_mod,N); % 1024点ifft
ofdm_symbol_cp=[ofdm_symbol(end-GI+1:end) ofdm_symbol]; % 加保护间隔
ch=sqrt(CH/2).*(randn(1,6)+j*randn(1,6)); % 多径信道。
symb_multpath = filter(ch,1,ofdm_symbol_cp); %多径
noise = sqrt( sig2/2 ) * ( randn(1,N+GI) + i*randn(1,N+GI) ); %高斯白噪声
y = symb_multpath + noise; % 信号加白噪声
rec_symbol = fft( y(GI+1:N+GI) ,N); %去循环前缀,做1024点fft
rec_symbol = rec_symbol./fft(ch,N); % 一阶频域均衡,设信道估计非常准确
% y_demod = demodulate(rec_symbol,s16,c16,N); %硬判决(不是matlab自带的)
% Y_temp = vitdec( y_demod ,trellis,tblen,'term','hard' ); %硬判决维特比译码
y_demod = softdecision(rec_symbol,sig2*N,s16,3); % 软判决 (不是matlab自带的)
Y_temp = vitdec( y_demod ,trellis,tblen,'term','soft',3 ); %判判决特比译
Errors_temp = sum( xor( Y_temp( 1:end-4 ) , Msg(1:end-4) ) ); %计算单个OFDM符号中错误bit数量
totalErrors=totalErrors+Errors_temp; % 统计总共错了多少bit
end
ber=totalErrors/(btot*TransmitIter) % 计算误比特率
我有以下几个问题:
1、瑞利信道模型。不知道这仿真中的模型是否正确。一直没有考虑明白如何确定多径信道抽头数量。仿真中的是6径模型;
2、瑞利信道中的信噪比是否就是指ofdm_symbol(即ifft输出信号)与白噪声的功率之比;还是指等效信噪比?
3、仿真在高斯信道下,性能比较理想,而且软判决的确要比硬判决多大约3dB的软判决增益。但是在这个瑞利信道中软判决增益却只有1dB不到,但据许多文章上讲,应该要大于高斯信道下的软判决增益才对。
4、高斯信道下,当SNR=10dB时,软、硬判决ber大约分别是5*10^(-5)和7*10^(-3).SNR每增加减小1dB,性能变化非常明显。但是在这个瑞利模型中,虽然经过了一阶频域均衡,但是ber比高斯时候差了好多,在SNR=20dB时候,软、硬判决ber分别大约是3.6*10^(-4)和4.7*10^(-4),并且随着信噪比的增加变化非常缓慢。在SNR=30dB时候,软、硬判决ber才达1.1*10^(-5)。20dB、30dB可是100倍、1000倍啊!太可怕了。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -