通信人家园

 找回密码
 注册

只需一步,快速开始

短信验证,便捷登录

搜索

军衔等级:

  新兵

注册:2016-3-23
跳转到指定楼层
1#
发表于 2016-3-23 16:15:40 |只看该作者 |倒序浏览
clear;
clc;
carr=256;   %子载波个数
sym_c=10;   %每个子载波使用的符号数
bit_sym=2;  %每个符号含有的比特数,QPSK调制
IFFT_n=256; %IFFT点数
r=1/10;     %保护间隔和OFDM数据的比例;
SNR=10;     %信噪比 dB
%产生信号
sum=carr*sym_c*bit_sym;
signal=rand(1,sum)>0.5;   %初始信号
%QPSK调制,QPSK_sig里面存放的是调制后的信号,数目sumQ
sumQ=sum/2;
imag=sqrt(-1);                          % 虚部 j
QPSK=[-1+imag,-1-imag,1+imag,1-imag];   %创建QPSK 映射表
SIGNAL=zeros(1,sumQ);      %计算并存放调制前的十进制数据
QPSK_sig=zeros(1,sumQ);    %存放调制后的QPSK信号
for n=1:sumQ
SIGNAL(n)=signal(2*n-1)*2+signal(2*n); %将二进制换算成十进制
end
for i=1:sumQ
    if SIGNAL(i)==0;
        QPSK_sig(i)=QPSK(1);
    elseif SIGNAL(i)==1;
            QPSK_sig(i)=QPSK(2);
    elseif SIGNAL(i)==2;
         QPSK_sig(i)=QPSK(3);
    elseif SIGNAL(i)==3;
               QPSK_sig(i)=QPSK(4);
    end
end                     
%串/并转换  计算第i个载波上面的信号to_par(i,:)
colume=sumQ/carr;    %调制后的数目除以子载波数=每个子载波含有的符号数
to_par=reshape(QPSK_sig,carr,colume);
%每个子载波上进行 IFFT变换  (调制后的QPSK信号进行IFFT)
y=ifft(to_par,IFFT_n);
yr=real(y);   %实部
yi=(y-yr)*sqrt(-1)*(-1);  
%加入循环前缀
CP_len=r*colume;  %保护间隔长度
yr=[yr(:,colume-CP_len+1:colume),yr];%(:,colume-CP_len+1:colume)表示所有的行 第colume-CP_len+1:colume的列 yr变为colume+CP_len列
yi=[yi(:,colume-CP_len+1:colume),yi];
%并/串转换
y_=yr+yi*sqrt(-1);%重新建立虚实部
y_series=reshape(y_,1,(colume+CP_len)*carr);%y_series变为一行   (colume+CP_len)*carr列的矩阵(实现并串变换)
%加入高斯白噪声
y_s_noi=awgn(y_series,SNR,'measured');%若加入measured则函数在加入噪声之前测定信号强度(结果更准确)
%串/并转换
y_par=reshape(y_s_noi,carr,colume+CP_len);
%去掉保护间隔
y_r=real(y_par);%实部
y_i=(y_par-y_r)*(-1)*sqrt(-1);%虚部
y_r=y_r(:,CP_len+1:colume+CP_len);
y_i=y_i(:,CP_len+1:colume+CP_len);
%FFT变换
y_complex=y_r+y_i*sqrt(-1); %变为复数
y_fft=fft(y_complex,IFFT_n);
%并/串 转换
y_receive=reshape(y_fft,1,sumQ);
% QPSK逆映射  
QPSK=[-1+imag,-1-imag,1+imag,1-imag];
Y_r=real(y_receive);
Y_i=(y_receive-Y_r)*(-1)*sqrt(-1);
for  i=1:21  
    if Y_r(i)<0;
        Y_r(i)=0;
    else
        Y_r(i)=1;
    end
    if Y_i(i)<0;
        Y_i(i)=1;
    else
        Y_i(i)=0;
    end
    Y=signal;
    Y(2*i-1)=Y_r(i);
    Y(2*i)=Y_i(i);
    [bit_err_num,bit_ratio]=biterr(signal,Y);      %误比特判断函数-biterr,错误比特个数存入bit_err_num,误比特率存入bit_ratio
    err_bit(i)=bit_ratio;                               %循环每一次不同信噪比都对应不同的误比特率,将其存入数组err_bit当中
end
SNR=[0:0.5:10]
figure(1)  
semilogy(SNR,err_bit,'-.k');
title('误比特');
legend('仿真误比特率');
xlabel('信噪比/dB');
ylabel('㏒-误比特率')
grid on;

举报本楼

本帖有 1 个回帖,您需要登录后才能浏览 登录 | 注册
您需要登录后才可以回帖 登录 | 注册 |

手机版|C114 ( 沪ICP备12002291号-1 )|联系我们 |网站地图  

GMT+8, 2024-11-26 07:19 , Processed in 0.170118 second(s), 15 queries , Gzip On.

Copyright © 1999-2023 C114 All Rights Reserved

Discuz Licensed

回顶部