📄 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -