发布时间 : 星期一 文章基于MATLAB的OQPSK调制解调实现课程设计更新完毕开始阅读
附录1:OQPSK调制与解调程序清单
%程序1名称:oqpsk.m
%程序1功能:产生四进制数字基带信号,实现OQPSK调制、产生调制后波形图及频谱图、对调制信号添加不同信噪比的噪声、实现OQPSK解调、查看错码个数和误码率。 %程序1作者:周翌 %最后修改时间:2014-1-10 %===================== 程序1代码:
a=100; %基带信号码元个数
x = randint(a,1,[0 3]); % 随机产生a个四进制数
figure(1)
stairs(x) %基带信号
y =oqpskmod(x);% 进行oqpsk调制 scatterplot(y) %解调信号的星座图 fc=100; %载波频率 fs=1600; %抽样频率 b=0; %设置初始相位为0
s=0; %调制信号的波形图纵坐标初始化 n=0; %调制信号波形图二维初始化 snr=10.01; %信噪比
for i=1:a %判断星座图上值的象限位置,以确定相位 if real(y(i))>0 & imag(y(i))>0
b=(pi)/4; %第一象限,取相位为(pi)/4 end;
if real(y(i))<0 & imag(y(i))>0
b=(3*pi)/4; %第二象限,取相位为(3*pi)/4 end;
if real(y(i))<0 & imag(y(i))<0
b=(5*pi)/4; %第三象限,取相位为(5*pi)/4 end;
if real(y(i))>0 & imag(y(i))<0
b=(7*pi)/4; %第四象限,取相位为(7*pi)/4 end;
if real(y(i))>0 & imag(y(i))==0
b=0; %在实轴正轴上,取相位为0 end;
if real(y(i))<0 & imag(y(i))==0
b=pi; %在实轴负轴上,取相位为pi end;
if real(y(i))==0 & imag(y(i))>0
b=pi/2; %在虚轴正轴上,取相位为pi/2
end;
if real(y(i))==0 & imag(y(i))<0
b=(3*pi)/2; %在虚轴负轴上,取相位为(3*pi)/2 end;
for k=0:15 %取16个点画出波形图 m=(2*pi*fc*k)/fs+b; %合相位 s=sin(m); %生成波形图 n=[n sin(m)]; %将一维转换为二维 end; end;
g=1:length(n); %调制信号横坐标 figure(3)
plot(g,n) %调制信号波形图 noi=n +awgn(n,snr); %加入高斯噪声 figure(4)
plot(noi); %加入噪声后的调制信号 k=oqpskdemod(y); %解调信号 figure(5)
stairs(k) %解调信号
r=fft(x,1024); %对基带信号进行傅里叶变换 fr=(0:length(r)-1)*fs/length(r)-fs/2; %横坐标为频域 figure(6)
plot(fr,abs(r)); % OQPSK基带信号频谱图 xlabel('Frequency (Hz)')
s1=fft(n,1024); %调制信号频谱图
fs1=(0:length(s1)-1)*fs/length(s1)-fs/2; %横坐标为频域 figure(7)
plot(fs1,abs(s1)); %OQPSK调制信号频谱图 xlabel('Frequency (Hz)')
s2=fft(noi,1024); %加入噪声后OQPSK调制后的频谱图 fs2=(0:length(s2)-1)*fs/length(s2)-fs/2; %横坐标为频域
figure(8)
plot(fs2,abs(s2)) %加入噪声后OQPSK调制后的频谱图 xlabel('Frequency (Hz)')
jtpp=fft(k,1024); %解调信号的傅里叶变换
fj=(0:length(jtpp)-1)*fs/length(jtpp)-fs/2; %横坐标为频域 figure(9)
plot(fj,abs(jtpp)) %解调信号的频谱图 xlabel('Frequency (Hz)')
xx=awgn(y,snr); %对调制信号加入噪声
jjt=oqpskdemod(xx);%对加入噪声的调制信号进行解调 figure(10) %加入噪声后的解调信号 stairs(jjt)
jjtp=fft(jjt,1024); %求加入噪声后解调频谱
fp=(0:length(jjtp)-1)*fs/length(jjtp)-fs/2; %横坐标为频域 figure(11) %加入噪声后解调频谱图 plot(fp,abs(jjtp)) xlabel('Frequency (Hz)')
[num,ratio]=symerr(x,jjt) %计算错码个数num及误码率ratio