⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gan.m

📁 ofdm调制 星座图的输出 和 结果都正确 解调星座图的输出
💻 M
字号:
%*******OFDM系统仿真*******clear;clc;%******参数设置************SNR=10;           % 信噪比为10dBMu=2;             % 调制水平Ndata=256;        % 复值符号个数Sdata=64;         % 每次64个复值符号进行IFFT/FFT、子载波个数fl=128;           % IFFT/FFT长、并行子信道数Nsym=Ndata/Sdata; % OFDM符号数GIlen=144;        % 加循环前缀后的符号长GI=16;            % 循环前缀(取IFFT长的1/8)Tu=64e-6;         % 一个有用符号周期BW=1/Tu ;         %系统带宽T=Tu/64;          % 基带码元周期     %*****列向量初始化***X=zeros(Ndata,1);Y1=zeros(Ndata,1);Y2=zeros(Ndata,1);Y3=zeros(fl,1);z0=zeros(fl,1);z1=zeros(Nsym*fl,1);        g=zeros(GIlen,1);z2=zeros(GIlen*Nsym,1);     z3=zeros(GIlen*Nsym,1);TR=zeros(1,GIlen*Nsym);%******发射端(调制部分)******signal=rand(1,Ndata*Mu)>0.5;    % 随机信号(0、1)zh=2*signal-ones(1,Ndata*Mu);   % 转化为双极性码序列data=reshape(zh,Sdata,Nsym*Mu); % 串并转换,行数Sdata,列数为Nsym*2%******QPSK调制*****for j=1:Nsym    ich1(:,j)=data(:,2*j-1);    qch1(:,j)=data(:,2*j);     % 把数据分为两个通道endkmod=1/sqrt(2);                                                I1=ich1.*kmod;Q1=qch1.*kmod;                  % QPSK调制时,要乘上1/sqrt(2)系数FX=I1+Q1.*i;                    % 产生复信号figure(1);plot(FX,'k.');grid;     % QPSK调制星座图,'k.'表示矢量为黑点text(kmod,kmod,'11');text(-kmod,kmod,'01');text(-kmod,-kmod,'00');text(kmod,-kmod,'10');        % 矢量表示的意义xlabel('x轴');ylabel('y轴');title('QPSK调制星座图');Y2=reshape(FX,Ndata,1);    % 把FX变为一列放Y2for j=1:Nsym;    for h=1:Sdata;      Y3(h+fl/2-Sdata/2,1)=Y2(h+(j-1)*Sdata,1);  % 补零    end    z0=ifft(Y3); %******IFFT*****    for s=1:fl;        z1(((j-1)*fl)+s,1)=z0(s,1);   %  IFFT后的的总序列    end    %****插入循环前缀**    for m=1:fl;        g(m+16,1)=z0(m,1);    end       for m=1:GI;       g(m,1)=z0(m+fl-GI,1);    %  把z0后16个符号复制放到前面       end    for d=1:GIlen;        z2(((j-1)*GIlen)+d,1)=g(d,1);  %插入循环前缀后的总序列    end   end%*****OFDM信号时域图形*****figure(2);ff = -1:1:512;df=abs(z1);plot(ff(1:512),df(1:512));gridxlabel('符号长度');ylabel('幅值');title('插入循环前缀前的幅值图形');figure(3);f = -1:1:576;y=abs(z2);y1=y(1:16);y2=y(129:144);y3=y(145:160);y4=y(273:288);y5=y(289:304);y6=y(417:432);y7=y(433:448);y8=y(561:576);plot(f(1:576),y(1:576),...f(1:16),y1,'r',f(129:144),y2,'r',...f(145:160),y3,'k',f(273:288),y4,'k',...f(289:304),y5,'m',f(417:432),y6,'m',...f(433:448),y7,'g',f(561:576),y8,'g');grid  % 画循环前缀位置xlabel('符号长度');ylabel('幅值');title('插入循环前缀后的幅值图形');%********OFDM信号频域图形***Y4 =fft(z1);                  %画频谱for j=1:Ndata/Sdata*fl;if abs(Y4(j)) < 0.01    Y4(j)=0.01;       % 若Y4 is 小于 0.01, Y4=0.01endendY4 = 10*log10(abs(Y4));figure(4);f = linspace(-(fl/2)/Tu,(fl/2)/Tu,length(Y4/Tu));plot(f,Y4);gridaxis([-(fl/2)/Tu (fl/2)/Tu -20 20]);xlabel('带宽(Hz)');ylabel('峰值(dB)');title('未插入循环前缀的频谱图形');%Y5=fft(z2);                 %画频谱for j=1:Ndata/Sdata*GIlen;if abs(Y5(j)) < 0.01        % 若 Y4 is小于 0.01, Y4=0.01    Y5(j)=0.01;endendY5= 10*log10(abs(Y5));figure(5);f = linspace(-(GIlen/2)/Tu,(GIlen/2)/Tu,length(Y5/Tu));plot(f,Y5);gridaxis([-(GIlen/2)/Tu (GIlen/2)/Tu -20 20]);xlabel('带宽(Hz)');ylabel('峰值(dB)');title('插入循环前缀后的频谱图形');figure(6)subplot(211),pwelch(z1,[],[],[],2/T); % 画功率谱密度subplot(212),pwelch(z2,[],[],[],2/T);%TR=reshape(z2,1,GIlen*Nsym);       % 并串转换,发射串行复信号%

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -