基于SCFDE和MMSE均衡的matlab误码率仿真

目录

1.基于SCFDE的系统原理

2.MMSE均衡器原理

3.MATLAB程序

4.仿真结果

1.基于SCFDE的系统原理
SCFDE是一种在无线通信系统中,特别是在正交频分复用(Orthogonal Frequency Division Multiplexing, OFDM)系统中使用的技术,用于克服多径衰落信道的影响,并结合了信道编码与频域传输的优势。相较于传统的基于OFDM的并行星座映射和解映射方式,SCFDE通过序列编码将信息比特流以串行的方式映射到频域符号上,然后进行传输。在OFDM系统中,SCFDE是一种将信道编码与频域传输相结合的方法,通过在子载波符号上应用编码,增强系统的抗干扰能力。基本步骤如下:

编码阶段: 首先,原始数据比特经过一个高效的信道编码器,如卷积码或Turbo码等,生成具有冗余度的编码比特序列。这样可以利用编码增益提高系统的抗干扰能力。

串行-并行转换及调制阶段: 编码后的比特序列被分割成多个子序列,每个子序列对应于一个频域符号。这些子序列不是立即映射到各个子载波上,而是根据某种时域内插滤波器进行组合形成一个连续的时间序列。

映射:然后将编码后的比特序列映射到一组正交子载波上的复数数据符号。

SCFDE过程:

 

其中,Cm​ 是编码序列中的第m 个码元,p[n] 是时域内的脉冲成形滤波器响应,M 表示码元长度,N 是OFDM符号长度。

频域转换: 接下来,时域信号x[n] 经过逆快速傅里叶变换(Inverse Fast Fourier Transform, IFFT),从时域转换到频域,形成OFDM符号。每个OFDM符号包含了多个并行的子载波上的数据。

加CP和传输: 在频域符号前端添加循环前缀(Cyclic Prefix, CP),以防止符号间干扰(Inter-Symbol Interference, ISI)。然后将带有CP的OFDM符号发送至信道。

接收端处理: 接收端首先去除CP,然后执行FFT将信号转换回时域。由于采用序列编码和时域内的内插过程,接收到的时域信号可以看作是交织的、带有多径效应的编码符号序列。

MMSE均衡及解码阶段: 使用最小均方误差(Minimum Mean Square Error, MMSE)均衡器来抵消信道失真影响。在SCFDE中,均衡通常在频域进行,针对每个子载波独立应用均衡系数。之后,经过均衡处理的信号按照编码顺序重新排列,以便进行解码。

解码阶段: 最后,经过均衡处理后的符号序列输入到解码器中,恢复出原始的数据比特流。

2.MMSE均衡器原理
在接收端,MMSE均衡器用于抵消由多径衰落信道引入的干扰,其目标是最小化接收到的信号与理想信号之间的均方误差:

 

其中,y 是接收信号向量,x 是发送信号向量,H 是信道矩阵。MMSE均衡器系数,W 可以通过求解以下优化问题得到:

 

但在实际应用中,由于未知的瞬时信道状态信息(CSI),通常采用基于导频或训练序列的估计方法来计算MMSE均衡器系数:

 

这里,H^ 是信道估计矩阵,σn2​ 是噪声功率,I 是单位矩阵。

对于SCFDE系统,MMSE均衡器被应用于已进行FFT变换后的频域信号,每个子载波上的均衡操作独立进行,根据信道估计调整各子载波上的增益。

3.MATLAB程序

function SER = scfde(SP)

numSymbols = SP.FFTsize;
H_channel = fft(SP.channel,SP.FFTsize);

for n = 1:length(SP.SNR),
tic;
errCount = 0;

for k = 1:SP.numRun,
tmp = round(rand(2,numSymbols));
tmp = tmp*2 - 1;
inputSymbols = (tmp(1,:) + i*tmp(2,:))/sqrt(2);

TxSymbols = [inputSymbols(numSymbols-SP.CPsize+1:numSymbols) inputSymbols];

RxSymbols = filter(SP.channel, 1, TxSymbols); % Multipath Channel

tmp = randn(2, numSymbols+SP.CPsize);
complexNoise = (tmp(1,:) + i*tmp(2,:))/sqrt(2);
noisePower = 10^(-SP.SNR(n)/10);
RxSymbols = RxSymbols + sqrt(noisePower)*complexNoise;

EstSymbols = RxSymbols(SP.CPsize+1:numSymbols+SP.CPsize);
Y = fft(EstSymbols, SP.FFTsize);

if SP.equalizerType == 'ZERO'
Y = Y./H_channel;
elseif SP.equalizerType == 'MMSE'
C = conj(H_channel)./(conj(H_channel).*H_channel + 10^(-SP.SNR(n)/10));
Y = Y.*C;
end

EstSymbols = ifft(Y);

EstSymbols = sign(real(EstSymbols)) + i*sign(imag(EstSymbols));
EstSymbols = EstSymbols/sqrt(2);

I = find((inputSymbols-EstSymbols) == 0);
errCount = errCount + (numSymbols-length(I));
end
SER(n,:) = errCount / (numSymbols*SP.numRun);
[SP.SNR(n) SER(n,:)]
toc
end
up4050

4.仿真结果

 

posted @ 2024-03-19 10:19  fpga和matlab  阅读(102)  评论(0编辑  收藏  举报