?? qpsk.m
字號:
data=rand(1,10)>0.5;
fb=500;fc=500;
M=32;
tb=1/fb;tc=1/fc;
step=tb/M; ebn0=25; fs=M/tb;
data1=data*2-1;
datai=data1(1:2:10-1);
dataq=data1(2:2:10);
for i = 1:10
for j = 1:M
m((i-1)*M+j)=data1(i);
end
end
m1=abs(fft(m));
for j = 1:5
for i = 1:2*M
mi((j-1)*2*M+i)=datai(j);
end
for i= 1:2*M
mq((j-1)*2*M+i)=dataq(j);
end
end
for k=1:M*10
t(k)=(k-1)*step;
si(k)=mi(k)*cos(2*pi*fc*t(k));
sq(k)=mq(k)*sin(2*pi*t(k)*fc);
s(k)=si(k)+sq(k);
end
s1=abs(fft(s));
spow=sum(mi.*mi+mq.*mq)/10;
attn=0.5*spow*250/fb*10.^(-ebn0/10);
attn=sqrt(attn);
n0=randn(1,320).*attn;
ss=s+n0;
mi_r=ss.*cos(2*pi*fc*t);
mq_r=ss.*sin(2*pi*fc*t);
B=fir1(60,0.01);
i_filter=filter(B,1,mi_r);
q_filter=filter(B,1,mq_r);
% f=0:0.01:0.1;
% xrc=0.5+0.5*cos(pi*f);
% i_filter=conv(mi_r,xrc)/5.5;
% q_filter=conv(mq_r,xrc)/5.5;
for j=1:5
ichsum(j)=sum(i_filter((j-1)/step+1:j/step))*step;
if ichsum(j)>=0
i_r(j)=1;
else
i_r(j)=0;
end
qchsum(j)=sum(q_filter((j-1)/step+1:j/step))*step;
if qchsum(j)>=0
q_r(j)=1;
else
q_r(j)=0;
end
end
datar=zeros(1,10);
for i=1:5
datar(2*i-1)=i_r(i);
datar(2*i)=q_r(i);
end
int=0;
for i=1:10
if datar(i)~=data(i)
int=int+1;
end
end
pe=int/10
h = spectrum.welch;
figure
subplot(3,1,1)
plot(t,m)
grid
title('Input Waveform')
subplot(3,1,2)
plot(t,mi)
grid
title('I Channel Waveform')
subplot(3,1,3)
plot(t,mq)
grid
title('Q Channel Waveform')
figure
subplot(3,1,1)
plot(t,si)
grid
title('I Channel Modulated Waveform')
subplot(3,1,2)
plot(t,sq)
grid
title('Q Channel Modulated Waveform')
subplot(3,1,3)
plot(t,s)
grid
title('QPSK Waveform')
figure
plot(t,ss)
title('QPSK of adding noise')
figure
subplot(2,1,1)
plot(t,mi_r)
subplot(2,1,2)
plot(t,mq_r)
figure
subplot(2,1,1)
plot(i_filter)
subplot(2,1,2)
plot(q_filter)
figure
subplot(2,1,1)
plot(fftshift(m1)),title('base signal spectrum')
subplot(2,1,2)
psd(h,m,'fs',fs),title('baseband signal power spectrum');
figure
subplot(2,1,1)
plot(fftshift(s1))
subplot(2,1,2)
psd(h,s,'fs',fs),title('Modulated signal power spectrum');
figure
for i=1:10/2
plot(si(i),sq(i),'ro'),title('constellation');hold on;
axis([-2 2 -2 2]);
plot(i_r(i),q_r(i),'*');hold on;
legend('before channel','after channel');
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -