📄 leng.m
字号:
close all;
clear all;
clc;
IFFT_bin_length=1024;
carrier_count=1000;
bits_per_symbol=2;
symbols_per_carrier=12;
N=carrier_count*symbols_per_carrier*bits_per_symbol;
carriers=1:carrier_count;
GI=10;
N_snr=10;
snr=3;
td=1;
%------------------------------------------------------------
E=zeros(1,N);
XX=zeros(1,N);
dif_bit=zeros(1,N);
dif_bit1=zeros(1,N);
dif_bit2=zeros(1,N);
dif_bit3=zeros(1,N);
R=randint(1,N);%***************************************产生二进制随即序列
%--------------------------------------------------------
%************************************************************QPSK调制
s=(R.*2-1)/sqrt(2);
sreal=s(1:2:N);
simage=s(2:2:N);
qpskdata=sreal+j.*simage;
%--------------------------------------------------------
%********************************************************************串并转换
data2=reshape(qpskdata,carrier_count,symbols_per_carrier).';
%---------------------------------------------------------
signal=1:carrier_count;%1:
% signal(pilot)=[];
% X3(:,pilot)=training_symbols;
% X3(:,signal)=X2;
% %X3=cat(1,training_symbols,X2);
% IFFT_modulation=zeros(symbols_per_carrier,IFFT_bin_length);
IFFT_modulation(:,carriers)=data2;
%IFFT_modulation(:,conjugate_carriers)=conj(X3);
data4=ifft(IFFT_modulation,IFFT_bin_length,2);%********************iff变换
%data5=data4.';
%**************************************************************加循环前缀)
for k=1:symbols_per_carrier;%
for i=1:IFFT_bin_length;%
data6(k,i+GI)=data4(k,i);
end
for i=1:GI;
data6(k,i)=data4(k,i+IFFT_bin_length-GI); %
end
end
%---------------------------------------------------------
%**************************************************************并串转换
X7=reshape(data6.',1,symbols_per_carrier*(IFFT_bin_length+GI));
%---------------------------------------------------------
%***************************************************************多径信道
fd=100;
r=4;
a=[0.15 0.4 0.55 0.7 ];
d=[ 4 6 8 10];
T=1;
th=[0 72 144 90 216 288]*pi./180;
% h=zeros(1,carrier_count);
hh=[];
for k=1:r
h1=a(k)*exp(j*((2*pi*T*fd*d(k)/carrier_count)));
hh=[hh,h1];
end
% %--------------------------------------------------------
%
channel1=zeros(size(X7));
channel1(1+d(1):length(X7))=hh(1)*X7(1:length(X7)-d(1));
channel2=zeros(size(X7));
channel2(1+d(2):length(X7))=hh(2)*X7(1:length(X7)-d(2));
channel3=zeros(size(X7));
channel3(1+d(3):length(X7))=hh(3)*X7(1:length(X7)-d(3));
channel4=zeros(size(X7));
channel4(1+d(4):length(X7))=hh(4)*X7(1:length(X7)-d(4));
%---------------------------------------------------------------
Tx_data=X7+channel1+channel2+channel3+channel4;
%---------------------------------------------------------------
%---------------------------------------------------------------
%----------------------------------------------------------------
%********************************************************加高斯白噪声
Error_ber=[];
for snr_db=-20:snr:N_snr
code_power=0;
code_power=[norm(Tx_data)]^2/(length(Tx_data));
bit_power=code_power/bits_per_symbol;
noise_power=10*log10((bit_power/(10^(snr_db/10))));
noise=wgn(1,length(Tx_data),noise_power,'complex');
Y7=Tx_data+noise;
%-------------------------------------------------------
%*********************************************************串并变换
Y6=reshape(Y7,IFFT_bin_length+GI,symbols_per_carrier).';
%***********************************************************去保护间隔
for k=1:symbols_per_carrier;
for i=1:IFFT_bin_length;
Y5(k,i)=Y6(k,i+GI);
end
end
Y4=fft(Y5,IFFT_bin_length,2);%*********************fft变换
%-------------------------------------------------------------
H=[];
Y2=Y4(:,signal);
%-------------------------------------------------------------------
%-------------------------------------------------------------
%************************************************************并串变换
YY=reshape(Y2.',1,N/bits_per_symbol);
%------------------------------------------------------------
%****************************************************************QPSK解调
y_real=sign(real(YY));
y_image=sign(imag(YY));
y_re=y_real./sqrt(2);
y_im=y_image./sqrt(2);
ofdm=[];
ofdm_data=[];
for k=1:length(y_real);
ofdm=[ofdm,[y_real(k),y_image(k)]];
end;
for k=1:length(y_re);
ofdm_data=[ofdm_data,[y_re(k),y_im(k)]];
end;
figure(2)
subplot(211)
stem(ofdm_data)
subplot(212)
stem(s)
%-------------------------------------------------------------
%*************************************************************误比特率
dif_bit=s-ofdm_data;
ber_snr=0;
for k=1:N;
if dif_bit(k)~=0;
ber_snr=ber_snr+1;
end;
end
Error_ber=[Error_ber,ber_snr];
end
BER=zeros(1,length(0:snr:N_snr));
BER=Error_ber./N;
%-------------------------------------------------------------
% figure(1)
% scatterplot(qpskdata)
%-------------------------------------------------------------画图
figure(3)
i=-20:snr:N_snr;
semilogy(i,BER,'-*g');
xlabel('信噪比');
ylabel('BER');
grid on;
% figure(4)
scatterplot(qpskdata)
fs=1000;
S1=fft(data2,1024); %求出原始信号的傅立叶变换
w=(0:511)/512*(fs/4);
figure(20)
plot(w,abs(S1(1:512)'));
title(' 滤波前' );
set(gcf,'color' ,'white' );
xlabel(' Frequency(Hz)' );
ylabel(' Mag.of frequency response' ); grid;
fs=1000;
S1=fft(Y4,1024); %求出原始信号的傅立叶变换
w=(0:511)/512*(fs/4);
figure(19)
plot(w,abs(S1(1:512)'));
title(' 滤波前' );
set(gcf,'color' ,'white' );
xlabel(' Frequency(Hz)' );
ylabel(' Mag.of frequency response' ); grid;
S1=fft(data4,1024); %求出原始信号的傅立叶变换
w=(0:511)/512*(fs/4);
figure(21)
plot(w,abs(S1(1:512)'));
title(' 滤波前' );
set(gcf,'color' ,'white' );
xlabel(' Frequency(Hz)' );
ylabel(' Mag.of frequency response' ); grid;
S1=fft(Y5,1024); %求出原始信号的傅立叶变换
w=(0:511)/512*(fs/4);
figure(22)
plot(w,abs(S1(1:512)'));
title(' 滤波前' );
set(gcf,'color' ,'white' );
xlabel(' Frequency(Hz)' );
ylabel(' Mag.of frequency response' ); grid;
S1=fft(data6,1024); %求出原始信号的傅立叶变换
w=(0:511)/512*(fs/4);
figure(23)
plot(w,abs(S1(1:512)'));
title(' 滤波前' );
set(gcf,'color' ,'white' );
xlabel(' Frequency(Hz)' );
ylabel(' Mag.of frequency response' ); grid;
S1=fft(Y6,1024); %求出原始信号的傅立叶变换
w=(0:511)/512*(fs/4);
figure(24)
plot(w,abs(S1(1:512)'));
title(' 滤波前' );
set(gcf,'color' ,'white' );
xlabel(' Frequency(Hz)' );
ylabel(' Mag.of frequency response' ); grid;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -