您现在的位置:首页 >> 通信 >> 内容

CPOFDM-16QAM性能仿真,输出接收端的星座图

时间:2022/12/17 23:18:25 点击:

  核心提示:A125,,包括程序操作录像...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/Y5qVlJtv

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览



3.算法概述

       CP-OFDM(Cyclic Prefix Orthogonal Frequency Division Multiplexing,循环前缀正交频分复用)通信系统采用多个正交子载波(Orthogonalsub-Carrier)并行传输数据,可以高效传输数据并且有效对抗频率选择性衰落信道带来的影响。但是在数据传输过程中,对子载波的正交性有严苛的要求,所以CP-OFDM系统对载波及采样时钟的频率偏差(即频偏)非常敏感,必须通过频偏估计与纠正技术,使得频率偏差处于接收机可容忍范围内,从而保证数据的正确传输。CP-OFDM 技术利用多个平行窄带子载波来传输信息,而不使用单个宽带载波。该技术定义充分,已在 4G LTE 下行链路和Wi-Fi通信标准成功实施,因此也适合用于 5G NR 设计。

4.部分源码

v1 = 1;

v2 = 3;

nBit = 1024*2;

lSymbol = 4;

nChannel = 4;

baseFreq = 100; % 1Hz

tSymbol = nChannel/baseFreq; % time for one symbol

nSymbol = nBit/(nChannel*lSymbol);

bitSequence = bit_generate(nBit);

mapQAM = mapping_16QAM(v1,v2);

for k = 1:nBit/lSymbol

    rInd = fix((k-1)/nChannel) +1;

    cInd = k-(rInd-1)*nChannel;

    fr = (k-1)*lSymbol +1;

    bSymbol(rInd,cInd).bit = bitSequence(fr:fr+lSymbol-1);  

end

fBase = 100; %100Hz for base frequence

fFirst = 200; %500Hz for first channel

Fs = 1024;

rTg = 1/8; %Ratio of guard 

Tsym = 1/fBase;

Tg = Tsym*rTg;

Tsig = nSymbol*(Tsym+Tg);

bSymbol = generateSymbolWave(bSymbol,mapQAM,fBase,fFirst,rTg,Fs);

sOFDM = [];

for k=1:nSymbol

    tmpSignal = 0;

    for j= 1:nChannel

        tmpSignal = tmpSignal + bSymbol(k,j).symbol;

    end

    sOFDM = [sOFDM tmpSignal];

end

fftOFDM = fft(sOFDM);

fftOFDM = fftshift(fftOFDM);

freq = (-length(sOFDM)/2:length(sOFDM)/2-1)*fBase;

powerOFDM = 0;

for k= 1: length(pOFDM)

    powerOFDM = powerOFDM + pOFDM(k);

end

powerOFDM = powerOFDM/length(pOFDM);

snr_lin = 10^(5/10);    % 5dB

var = powerOFDM/snr_lin;

%var =2000;

noise = (var/sqrt(2))*(randn(1,length(sOFDM)) +i*randn(1,length(sOFDM)));

sOFDM_fft = fft(sOFDM) + noise*Fs/2;

%sOFDM = sOFDM + abs(noise);

sOFDM = ifft(sOFDM_fft);                  %add noise into signal

sorted_noise = sort(abs(noise));

dx = 0:0.001:20;

count =1;

Fx = zeros(1,length(dx));

k=1;

while ( k<= length(sorted_noise))

    if count <length(dx)

        if sorted_noise(k)<=dx(count)

        Fx(count)= Fx(count) +1; 

        k = k+1;

        else 

            count = count +1;

            Fx(count) = Fx(count-1);

        end

    else

        Fx(count)= Fx(count) +1; 

        k=k+1;

    end

end

Fx = Fx./length(sorted_noise);

dx1 = 0:0.1:20;

Px = zeros(1,length(dx1));

Px(1) = Fx(100)/(dx(100));

for k = 2:length(dx1)-2

    Px(k) =(Fx(k*100)-Fx((k-1)*100))/(dx(k*100)-dx((k-1)*100));

end

A125

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168