基于MPSK-OFDM的可见光通信盲信道估计matlab仿真

本文介绍了在可见光通信系统中,盲信道估计的重要性,尤其是在没有已知训练序列的情况下,如何利用接收端数据信号估计信道响应。文章详细阐述了MPSK调制、OFDM编码过程,以及在MATLAB中设计的盲信道估计算法和相应的信号处理步骤,最后展示了仿真结果。
摘要由CSDN通过智能技术生成

目录

1.可见光通信

2.MPSK调制与OFDM

3.盲信道估计

4.MATLAB程序

5.仿真结果


      在基于MPSK-OFDM的可见光通信(Visible Light Communication, VLC)系统中,盲信道估计是一项关键技术,它无需已知的训练序列或导频信号,仅依赖接收端接收到的数据信号来估计信道响应。

1.可见光通信

        可见光通信是一种利用可见光波段的光作为传输媒介,实现数据无线传输的技术。其主要原理是通过快速调制光源(如LED灯或激光器)发出的光强度、颜色或相位来编码信息,并由接收端解码这些变化以恢复原始信号。

        假设一个光源可以发射强度可调的光信号I(t),我们可以用一个基带信号s(t) 对其进行幅度调制:

其中,

I0​ 是光源的基本光强;

A 是调制幅度因子;

s(t) 是携带信息的基带信号。

         在实际应用中,通常采用脉冲幅度调制(Pulse Amplitude Modulation, PAM)、正交幅度调制(Quadrature Amplitude Modulation, QAM)或者相移键控(Phase Shift Keying, PSK)等调制方式。例如,对于二进制相移键控(Binary Phase Shift Keying, BPSK),信息比特 b 被映射到两个不同的相位状态:

这里,

  • Rb​ 是每个符号的平均能量;
  • fc​ 是载波频率;
  • ϕb​ 是根据信息比特取值为0或π的相位偏移。

在接收端,光电探测器将接收到的光信号转换成电信号:

其中,

h 是光检测器的响应系数;

n(t) 是噪声信号,包括热噪声、暗电流噪声和闪烁噪声等。

       然后,对光电流 r(t) 进行解调以提取出原始信息。对于BPSK而言,使用相干解调或非相干解调技术,通过比较相邻符号之间的相位关系来还原比特信息。

2.MPSK调制与OFDM

       在VLC系统中,首先使用多进制相移键控(M-ary Phase Shift Keying, MPSK)对信息符号进行编码,常见的如BPSK、QPSK、8PSK等。对于任意一个数据符号s,其表达式可以写作:

其中 ϕs​ 是根据信息比特确定的相位值。

       然后,将这些经过MPSK调制的信息符号映射到OFDM子载波上。对于第n 个子载波上的符号sn​,其复数表示为:

这里,N 是总的子载波数量,n 的范围是[0,N−1]。

        所有子载波上的符号经过IFFT(逆快速傅里叶变换)处理后,形成OFDM符号X ,并在每个OFDM符号前添加循环前缀(Cyclic Prefix, CP),以抵抗信道引起的ISI(符号间干扰)。

3.盲信道估计

        在接收端,经过光电转换和A/D采样后,接收到的信号受到可见光信道的衰减和多径效应影响,可以表示为:

其中,

Y 是接收信号;

H 是待估计的信道矩阵,每个元素 hnm​ 表示从第 m 个子载波到接收机的信道响应;

X 是发送的OFDM符号;

W 是加性高斯白噪声。

        由于是盲信道估计,我们没有可用的导频信号,而是采用信号本身的结构特性进行估计。一种常用的方法是利用循环前缀和时域相关性:

4.MATLAB程序

 
        %序列化psk数据
        CCserdata=reshape(CCqam_data_rx.', 1,[]).';

        %序列化psk数据
        CCbin_data_rx = reshape(de2bi(reshape(pskdemod(CCserdata, psk),1,[])).',1,[]);

        %计算BER
        CCBER(n,k)=sum((data(CCbits)~=CCbin_data_rx(CCbits)))/length(CCbits);

        %%这是块类型CE算法(3个数据包,1个导频包)
        %TX
        %并行化bin数据并进行psk调制
        BBBpsk_data_tx = reshape([(rand(subcar/2,nsym/3)>0.5)*2-1; reshape(psk_data_tx,subcar*1.5,[])],1,[]);
        
        %用于集体ifft的psk数据并行化
        BBBpar_data = reshape(BBBpsk_data_tx.', subcar/2, nsym*(1+1/3)).';

        %生成hermitian对称数据并在非数据子载波位置插入保护
        BBBpilot_ins_data=[zeros(nsym*(1+1/3),guard) BBBpar_data zeros(nsym*(1+1/3),1) conj(flip(BBBpar_data.').') zeros(nsym*(1+1/3),guard-1)] ;

        %对帧中的所有ofdm符号进行ifft
        BBBifft_data = sqrt(nfft*nfft/subcar)*ifft(ifftshift(BBBpilot_ins_data.',1)).';

        %向每个ofdm符号添加循环前缀
        BBBcyclic_add_data = [BBBifft_data(:,((nfft - ncp +1):nfft)) BBBifft_data];

        %按行排列符号并串级传输时域信号
        BBBofdm_tx = reshape(BBBcyclic_add_data.',nbitsym*nsym*(1+1/3),1);

        %将接收到的数据并行化   
        BBBt=(0:(nbitsym*nsym*(1+1/3)-1))*dt;
        BBBtheta=(theta_0(k)./(d0+v*BBBt+0.5*a*BBBt.^2).^3.346).';
        BBBch_data=BBBofdm_tx.*BBBtheta;
                
        
        %将接收到的数据并行化
        BBBpar_rec_data = reshape(BBBch_data.', nbitsym, nsym*(1+1/3)).';

        %删除循环前缀
        BBBcyclic_pre_rem=BBBpar_rec_data(:,ncp+1:end);

        %对时域ofdm符号进行fft
        BBBfft_data = fftshift(fft(BBBcyclic_pre_rem.'),1).'/sqrt(nfft*nfft/subcar);
        
        %移除防护以获取psk数据
        BBBrem_pilot = BBBfft_data(:,guard+(1:subcar/2));
    
        %通道效应2
        BBBch_rem_pilot = reshape((BBBrem_pilot.*alpha).',1,[])+noise4;
      
        %并行化ch数据
        BBBpardata=reshape(BBBch_rem_pilot, subcar*2,[]).';

        %单独的数据和训练矩阵
        BBBrecpilot=abs(repmat(BBBpardata(:,1:subcar/2),1,3));
        BBBrecdata=BBBpardata(:,subcar/2+1:end);
        
        %计算SNR
        BBBEsN0(n,k)=mean(abs(BBBch_rem_pilot(symbols)).^2)/mean(abs(noise4).^2);

        %估计psk_data_tx
        BBBpsk_data_rx=BBBrecdata./BBBrecpilot;

        %序列化psk数据
        BBBserdata=reshape(BBBpsk_data_rx.', subcar*nsym/2,[]).';

        %ofdm符号中psk数据的解调
        BBBbin_data_rx = reshape(de2bi(reshape(pskdemod(BBBserdata, psk),1,[])).',1,[]);

        %计算BER
        BBBBER(n,k)=sum((data(BBBbits)~=BBBbin_data_rx(BBBbits)))/length(BBBbits);

up4058

5.仿真结果

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值