boai033 发表于 2007-6-23 19:53

求助用matlab画QPSK波形

设载波频率为20Hz,信息速率为2Baud,用MatLab画出QPSK信号波形。

yf2002043227 发表于 2007-6-23 20:33

不知道原理啊

happy 发表于 2007-6-23 20:34

%file name: qpsk.m
%Written by Dr. James S. Kang, Cal Poly Pomona.
%Plot of QPSK waveform and spectrum.
%d = input data such as .
%fb = data rate in bps.
%fc = carrier frequency.
%Ac = Amplitude of the carrier.
%fstart = start frequency for spectrum plot.
%fend = end frequency for spectrum plot.
%To run the program, try
% >>qpsk(,500,1000,1,0,4000)<Enter>
function = qpsk(d,fb,fc,Ac,fstart,fend)
N=size(d,2);        %N = number of data bits.
if rem(N,2) == 1
        N=N+1
        d(N)=0
end
N2=N/2;
M=32;        %M = number of samples per bit duration.
tb=1/fb;tc=1/fc;
Nc=floor(M*tc/tb); %Nc = number of samples per period of carrier.
step=tb/M;        %step = sampling interval.
for j = 1:N
        if d(j) == 1
           for i = 1:M
                m((j-1)*M+i)=1;
           end
        else
           for i = 1:M
                m((j-1)*M+i)=-1;
           end
        end
end
for j = 1:N2
        if d(j*2-1) == 1
           for i = 1:2*M
                mi((j-1)*2*M+i)=1;
                si((j-1)*2*M+i)=Ac*cos(2*pi*(i-1)/Nc);
           end
        else
           for i = 1:2*M
                mi((j-1)*2*M+i)=-1;
                si((j-1)*2*M+i)=Ac*cos(2*pi*(i-1)/Nc+pi);

           end
        end
        if d(j*2) == 1
           for i = 1:2*M
                mq((j-1)*2*M+i)=1;
                sq((j-1)*2*M+i)=Ac*sin(2*pi*(i-1)/Nc);
           end
        else
           for i = 1:2*M
                mq((j-1)*2*M+i)=-1;
                sq((j-1)*2*M+i)=Ac*sin(2*pi*(i-1)/Nc+pi);

           end
        end
end
for k=1:M*N
        t(k)=(k-1)*step;
        s(k)=si(k)+sq(k);
end
figure
subplot(3,1,1)
plot(t,m)
grid
%xlabel('Time')
ylabel('Amplitude')
title('Input Waveform')
subplot(3,1,2)
plot(t,mi)
grid
%xlabel('Time')
ylabel('Amplitude')
title('I Channel Waveform')
subplot(3,1,3)
plot(t,mq)
grid
xlabel('Time')
ylabel('Amplitude')
title('Q Channel Waveform')
figure
subplot(3,1,1)
plot(t,si)
grid
%xlabel('Time')
ylabel('Amplitude')
title('I Channel Modulated Waveform')
subplot(3,1,2)
plot(t,sq)
grid
%xlabel('Time')
ylabel('Amplitude')
title('Q Channel Modulated Waveform')
subplot(3,1,3)
plot(t,s)
grid
xlabel('Time')
ylabel('Amplitude')
title('QPSK Waveform')
%
%Spectrum of QPSK
%
M1=64;        %M1 = number of points per lobe.
fstep=fb/M1; %fstep = freq. step.
Nf=floor((fend-fstart)/fstep); %Nf = total number of freq. points computed.
for i = 1:Nf
f(i)=(i-1)*fstep+fstart;
        if f(i) == fc S(i)=Ac^2*tb;
        else
       S(i)=(Ac^2*tb)*(sin(pi*(f(i)-fc)*2*tb)/(pi*(f(i)-fc)*2*tb))^2;
        end
end
for i = 1:Nf
dBS(i) = 10*log(S(i));
if dBS(i) < -200 dBS(i)=-200; end
end
figure
subplot(2,1,1)
plot(f,S)
grid
%xlabel('Frequency')
ylabel('Magnitude')
title('QPSK Spectrum (Linear)')
subplot(2,1,2)
plot(f,dBS)
grid
xlabel('Frequency')
ylabel('Magnitude')
title('QPSK Spectrum (dB)')
end

boai033 发表于 2007-6-23 20:39

不能运行啊!!!

happy 发表于 2007-6-23 20:41

原帖由 boai033 于 2007-6-23 20:39 发表 http://www.chinavib.com/forum/images/common/back.gif
不能运行啊!!!

自己先学学怎么调用子程序吧
别看不看就喊

boai033 发表于 2007-6-23 21:06

我有看啊,可是写得太专业点了吧,很多都看不懂。我以前只是学过一些简单的程序!

happy 发表于 2007-6-23 21:10

如果连调用函数还不会,建议还是先不要做什么东西了
找本matlab基础看看怎么回事吧

boai033 发表于 2007-6-23 21:19

我也不想做啊,可是老师布置的作业。不能不去完成啊!!
页: [1]
查看完整版本: 求助用matlab画QPSK波形