OFDM误码率仿真源码程序 - matlab通信信号 - 谷速源码
下载频道> 资源分类> matlab源码> 通信信号> OFDM误码率仿真源码程序

标题:OFDM误码率仿真源码程序
分享到:

所属分类: 通信信号 资源类型: 文件大小: 1.83 KB 上传时间: 2016-01-30 12:54:54 下载次数: 13 资源积分:1分 提 供 者: 源码共享 OFDM误码率仿真源码程序
内容:
OFDM误码率仿真源码程序,程序员在编程的过程中可以参考学习使用,希望对IT程序员有用,此源码程序简单易懂、方便阅读,有很好的学习价值!
 
close all
clear all
clc
 
 
%%
% Generating and coding data
t_data=randint(9600,1)';
x=1;
si=1; %for BER rows
%%
for d=1:100;
data=t_data(x:x+95);
x=x+96;
k=3;
n=6;
s1=size(data,2);  % Size of input matrix
j=s1/k;
 
%%
% Convolutionally encoding data 
constlen=7;
codegen = [171 133];    % Polynomial
trellis = poly2trellis(constlen, codegen);
codedata = convenc(data, trellis);
 
 
 
%%
%Interleaving coded data
 
s2=size(codedata,2);
j=s2/4;
matrix=reshape(codedata,j,4);
 
intlvddata = matintrlv(matrix',2,2)'; % Interleave.
intlvddata=intlvddata';
 
 
%%
% Binary to decimal conversion
 
dec=bi2de(intlvddata','left-msb');
 
 
%%
%16-QAM Modulation
 
M=16;
y = qammod(dec,M);
% scatterplot(y);
 
 
%%
% Pilot insertion
 
lendata=length(y);
pilt=3+3j;
nofpits=4;
 
k=1;
 
for i=(1:13:52)
    
    pilt_data1(i)=pilt;
 
    for j=(i+1:i+12);
        pilt_data1(j)=y(k);
        k=k+1;
    end
end
 
pilt_data1=pilt_data1';   % size of pilt_data =52
pilt_data(1:52)=pilt_data1(1:52);    % upsizing to 64
pilt_data(13:64)=pilt_data1(1:52);   % upsizing to 64
 
for i=1:52
    
    pilt_data(i+6)=pilt_data1(i);
    
end
 
 
%%
% IFFT
 
ifft_sig=ifft(pilt_data',64);
 
 
%%
% Adding Cyclic Extension
 
cext_data=zeros(80,1);
cext_data(1:16)=ifft_sig(49:64);
for i=1:64
    
    cext_data(i+16)=ifft_sig(i);
    
end
 
 
%%
% Channel
 
 % SNR
 
 o=1;
for snr=0:2:50
 
ofdm_sig=awgn(cext_data,snr,'measured'); % Adding white Gaussian Noise
% figure;
% index=1:80;
% plot(index,cext_data,'b',index,ofdm_sig,'r'); %plot both signals
% legend('Original Signal to be Transmitted','Signal with AWGN');
 
 
%%
%                   RECEIVER
%%
%Removing Cyclic Extension
 
for i=1:64
    
    rxed_sig(i)=ofdm_sig(i+16);
    
end
 
 
%%
% FFT
 
ff_sig=fft(rxed_sig,64);
 
%%
% Pilot Synch%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 
for i=1:52
    
    synched_sig1(i)=ff_sig(i+6);
    
end
 
k=1;
 
for i=(1:13:52)
        
    for j=(i+1:i+12);
        synched_sig(k)=synched_sig1(j);
        k=k+1;
    end
end
 
% scatterplot(synched_sig)
 
 
%%
% Demodulation
dem_data= qamdemod(synched_sig,16);
 
 
%% 
% Decimal to binary conversion
 
bin=de2bi(dem_data','left-msb');
bin=bin';
 
 
%%
% De-Interleaving
 
 
deintlvddata = matdeintrlv(bin,2,2); % De-Interleave
deintlvddata=deintlvddata';
deintlvddata=deintlvddata(:)';
 
 
 
 
%%
%Decoding data
n=6;
k=3;
decodedata =vitdec(deintlvddata,trellis,5,'trunc','hard');  % decoding datausing veterbi decoder
rxed_data=decodedata;
 
%%
% Calculating BER
rxed_data=rxed_data(:)';
errors=0;
 
 
c=xor(data,rxed_data);
errors=nnz(c);
 
% for i=1:length(data)
%     
%        
%     if rxed_data(i)~=data(i);
%         errors=errors+1;     
%      
%     end
% end
 
 
BER(si,o)=errors/length(data);
o=o+1;
 
 end % SNR loop ends here
 si=si+1;
end % main data loop
 
%%
% Time averaging for optimum results
 
for col=1:25;        %%%change if SNR loop Changed
    ber(1,col)=0;  
for row=1:100;
  
    
        ber(1,col)=ber(1,col)+BER(row,col);
    end
end
ber=ber./100; 
 
%%
figure
i=0:2:48;
semilogy(i,ber);
title('BER vs SNR');
ylabel('BER');
xlabel('SNR (dB)');
grid on
 

文件列表(点击上边下载按钮,如果是垃圾文件请在下面评价差评或者投诉):

OFDM误码率仿真源码程序/
OFDM误码率仿真源码程序/code/
OFDM误码率仿真源码程序/code/OFDM.m

关键词: 误码率 源码 程序

Top_arrow
回到顶部
联系方式| 版权声明| 招聘信息| 广告服务| 银行汇款| 法律顾问| 兼职技术| 付款方式| 关于我们|
网站客服网站客服 程序员兼职招聘 程序员兼职招聘
沪ICP备19040327号-3
公安备案号:沪公网安备 31011802003874号
库纳格流体控制系统(上海)有限公司 版权所有
Copyright © 1999-2014, GUSUCODE.COM, All Rights Reserved