登录论坛

查看完整版本 : [MATLAB混合编程] 【急求助】QPSK system的模拟(新手上路啊)


ray58
2009-11-20, 00:06
帮忙看下我的code ,请求指导sampling,decision 和 BER,SER的具体写法
要求:
-data rate= 100kbps
-4time oversampling(base band)
- Matched filter
* Root raised cosine filter
-waterfall curve(Monte calro simulation)
* BER of Eb/N0
* SER of SNR
同时还给出了 一个 “time domain sequence" (后面用rrcf)来conv后形成 filter
我的思路:1.建bitstream (data)2. 进行mapping 分出(1,-1) 3. 并串转换分出Real & Imag 4. 分别对Real & Imag

进行oversampling(4个4个一组) 5. 分别 通过 Pulse shapping filter 6. 把Real & Imag 转换成a+jb形式在加上noise

7.在与rrcf进行conv 8. 再分别对Real & Imag各部分采样
9.进行decision操作,把bitstream换成(1,0)的形式 9. 进行串并转换形成demo数据流 10. 与原数据流进行比较画出

bit error rate (BER) & symbol error rate(SER) 的关系图如要求

clear all

%********************%
% Preparation Part %
%********************%
br=100000; %bit rate
%nd= ; %number of symbol
%Eb_No=5; %Eb/No
sr=50000 ;% symbol rate

%********************%
% Filter Part %
%********************%
% IPOINT=4; % number of oversample
%R=0.2; %roll off factor

%irfn=21; % number of filter taps
%[xh] = hrollfcoef(irfn,IPOINT,sr,alfs,1); %T FILTER FUNCTION
%[xh2] = hrollfcoef(irfn,IPOINT,sr,alfs,0); %R FILTER FUNCTION

%BW=(1/2)*sr*(1+R); % bandwidth

data=[1 0 1 0 1 1 1 0 0 0 1 1 0 1 1 0 0];
for k=1:length(data)
if data(k)==0;
data(k)=-1;
else data(k)=1;
end
end


%for i=0:12; % SNR
error=0;
for k=1:length(data)/2
Re(k)=data(2*k-1)/sqrt(2);
Im(k)=data(2*k)/sqrt(2);
end
Re_over=zeros(1,length(data)/2*4);
Im_over=zeros(1,length(data)/2*4);
for k=1:length(data)/2
Re_over(4*k-3)=Re(k);
Im_over(4*k-3)=Im(k);
end

%****************************%
% Time domain sequence %

%squence
rrcf=[-0.0189 0.0106 0.0424 0.0520 0.0233 -0.0360 -0.0924 -0.1000
0.0263 0.1261 0.3136 0.4677 0.5273 0.4677 0.3136 0.1261 -0.0263
-0.1000 -0.0924 -0.0360 0.0233 0.0520 0.0424 0.0106 -0.0189];

R_sq=conv(Re_over,rrcf);
I_sq=conv(Im_over,rrcf);
tx=R_sq+j*I_sq; %transimte signle

%****************************%
% AWGN %
Eb_No= [-3:10];
noise_gain=10^(-Eb_No/20)/sqrt(2);
n0=randn(1)+j*randn(1);
n=n0* noise_gain;

rx=tx+n; % receive signle

Re_rx=real(rx);
Im_rx=imag(rx);

%Root raised cosine filter
R_rx=conv(Re_rx,rrcf);
I_rx=conv(Im_rx,rrcf);




%filter=rcosfir(R,n_T,rate,T);
%****************************%
% Sampling %



%****************************%
% Decision %
R_rx_de= ;
I_rx_de= ;

%****************************%
% Multiplexer %
QPSK_r=(sqrt(1/2).*R_rx_de+sqrt(1/2).*I_rx_de);


%****************************%
% Compare %
for i=1:length(data)
if QPSK_r(i)~=data(i)
error=error+1
end
end
ber=error/100000;



%****************************%
% PLOT %
%****************************%

% oversampling
figure(1)
subplot(2,1,1),stem(Re_over,'fill','--'),grid
subplot(2,1,2),stem(Im_over,'fill','--'),grid

% pulse shaping filter
figure(2)
subplot(2,1,1),stem(R_sq,'--'),grid
subplot(2,1,2),stem(I_sq,'--'),grid

figure(3)
subplot(2,1,1),stem(R_rx,'--'),grid
subplot(2,1,2),stem(I_rx,'--'),grid

%BER OF Eb/N0
figure(4)
semilogy(Eb_N0_dB,ber,'b.-');
hold on
axis([-3 10 10^-5 0.5])
grid on
xlabel('Eb/No, dB');
ylabel('Bit Error Rate');

% SER OF SNR
figure(5)
%axis([-1 11 -60 -5]);
title('QPSK');
xlabel('SNR(dB)');
ylabel('SER(dB)');
semilogy(snr,ser)
grid;


%end
拜托拜托了