的编程能力。回顾起此次通信原理课程实验,至今我仍感慨颇多,在整整两周的时间里,我的心情和课程设计的进展起起伏伏,一度怀疑自己的能力开始否定自己,直到最后把每处都弄通了、达到完美了,心情才真正舒畅开来。
但是,我确实学到很多很多的的东西,同时巩固了所学知识。整个设计的过程,可以说得是困难重重,这毕竟算是自己第一次独立完成,在设计的过程中发现了自己的不足之处,对软件不熟悉,动手能力比较欠缺。设计的过程很纠结,调试的过程也很痛苦,但是知识就是在这个过程中学习的,经验也是在这个过程中积累的。经历过困难才会有更多的收获。掌握正确的方法,保持认真的作风和平和的心态,这样才能真正的学到知识。
这次课程实验终于完成了,在设计中遇到了很多问题,多谢李晓峰老师的耐心讲解,从老师的身上我学到了很多实用的知识,也由衷地庆幸自己能遇到这样一位好老师,不仅专业知识扎实,而且品格高尚、谦和有礼,这就是我理想中的好老师。再次感谢李老师。同时,对给予我帮助的同学们也表示忠心的感谢。
附:完整代码
%%%%%%%%%%%% DPSK调制解调 %%%%%%%%%%%%%%%%%
%%%%%%%%%%%% 初始参量定义 %%%%%%%%%%%%% fc=1800; %载波频率
Rb=1200; %基带数据传输速率 Tb=1/Rb;
T=50; %每个Tb内进行的增样点数 M=8; %原始码字序列的长度 N=9; %差分码字序列的长度 sign=zeros(1,M);
sign=randint(1,N); %产生长度为M的随机二进制序列 SNR=1.5; %信噪比
%%%%%%%%%%%% 对sign进行T点增样后的基带数字信号 %%%%%%%%%% bn=[]; for n=1:M
if sign(n)==0; F=zeros(1,T); else
F=ones(1,T); end
16
bn=[bn,F]; end
%%%%%%%%%%%%% 差分编码得到差分码cfm %%%%%%%%%% cfm=[];
cfm(1)=1; %设cfm的初值为1 for i=1:M
cfm(i+1)=xor(sign(i),cfm(i)); end
%%%%%%%%%%%%% 对cfm进行T点增样 %%%%%%%%%%%%%% dn=[]; %差分信号 for n=1:N;
if cfm(n)==0;
A=zeros(1,T); %每个symbol进行T点增样 else
A=ones(1,T); end
dn=[dn A]; end
%%%%%%%%%%%%%%%% DPSK调制 %%%%%%%%%%%%%%%
t=Tb/T:Tb/T:Tb; %对Tb=1/Rb间隔进行T点划分 mod=cos(2*fc*pi*t); %调制后的信号 delta=0; %相位差 for n=1:M
if sign(n)==1;
delta=delta+pi; else
delta=delta; end
c2=cos(2*fc*pi*t+delta); mod=[mod c2]; end
%%%%%%%%%%% 调制信号过高斯白噪声的信道 %%%%%%% modz=awgn(mod,SNR); %过AWGN信道
%%%%%%%%%%% BPF %%%%%%%%%%%%%
modz_broad=[modz modz((N-1)*T+1:N*T)]; fs=Rb*T;
hBPF=fir1(100,2*pi*[fc-Rb fc+Rb]/fs); r0=filter(hBPF,1,modz_broad);
r=r0(T+1:(N+1)*T); %对r0进行截取
17
%%%%%%%%%%% 延时相乘 %%%%%%% r_shift=r(T+1:N*T); demod=[]; for i=1:M*T;
a=r_shift(i) .* r(i); demod=[demod a]; end
%%%%%%%%%%%%% LPF %%%%%%%%%%
demod_broad=[demod demod((M-1)*T+1:M*T)] hLPF=fir1(100,2*pi*[Rb]/fs); mt0=filter(hLPF,1,demod_broad);
mt=mt0(T+1:(M+1)*T); %对mt0进行截取
%%%%%%%%%%%%% 抽样判决 %%%%%%%%%% Bn=zeros(1,M*T); for i=1:M;
if sum( mt( (i-1)*T+1 :i*T ) ) > 0; Bn((i-1)*T+1:i*T)=0; else
Bn((i-1)*T+1:i*T)=1; end end
%%%%%%%%%%%% 画图 %%%%%%%%%%% %%%%%%%%%%%% figure(1) %%%%%%%%%% figure(1);
subplot(3,3,1); plot(bn);grid on;
axis([0 T*N -2 2]);title('基带数字信号bn');
figure(1);
subplot(3,3,2); plot(dn); grid on;
axis([0 T*N -2 2]);title('差分信号dn');
figure(1);
subplot(3,3,3); plot(mod); grid on;
axis([0 T*N -2 2]);title('DPSK调制信号mod');
18
figure(1);
subplot(3,3,4); plot(modz); grid on
axis([0 T*N -2 2]);
title('过AWGN信道后的modz信号');
figure(1);
subplot(3,3,5); plot(r);grid on
axis([0 T*N -2 2]); title('过BPF后的信号r')
figure(1);
subplot(3,3,6);
plot(demod);grid on axis([0 T*N -1 1]);
title('延时相乘后的信号demod')
figure(1);
subplot(3,3,7); plot(mt); grid on
axis([0 T*N -1 1]); title('过LPF后的信号mt');
figure(1);
subplot(3,3,8); plot(Bn); grid on
axis([0 T*N -2 2]);
title('经抽样判决后信号Bn')
%%%%%%%%%%%% figure(2) %%%%%%%%%% figure(2);
subplot(3,3,1);
plot(abs(fft(bn))); axis([0 T*N 0 50]); title('原始信号bn频谱');
figure(2);
subplot(3,3,2);
19
plot(abs(fft(mod))); axis([0 T*N 0 50]); title('DPSK信号mod频谱');
figure(2);
subplot(3,3,3);
plot(abs(fft(modz))); axis([0 T*N 0 50]);
title('加入白噪声的DPSK信号modz频谱');
figure(2);
subplot(3,3,4); plot(abs(fft(r))); axis([0 T*N 0 50]); title('过BPF后的信号r频谱');
figure(2);
subplot(3,3,5); plot(abs(fft(r))); axis([0 T*N 0 50]); title('信号r_shift频谱');
figure(2);
subplot(3,3,6);
plot(abs(fft(demod))); axis([0 T*N 0 50]); title('信号demod频谱');
figure(2);
subplot(3,3,7);
plot(abs(fft(mt))); axis([0 T*N 0 50]);
title('经低通滤波器后信号mt频谱');
figure(2);
subplot(3,3,8);
plot(abs(fft(Bn))); axis([0 T*N 0 50]);
title('经抽样判决后信号Bn频谱');
%%%%%%%%%%%%%%% PSD %%%%%%%%%%%%%%% window=boxcar(100); %矩形窗 window1=hamming(100); %海明窗
20
window2=blackman(100); %blackman窗 Nfft=N*T*Rb;
noverlap=0; %数据无重叠
range='onesided'; %频率间隔为[0 Fs/2],只计算一半的频率 [Pxx,f]=pwelch(mod,window,noverlap,Nfft,fs,range); [Pxx1,f]=pwelch(mod,window1,noverlap,Nfft,fs,range); [Pxx2,f]=pwelch(mod,window2,noverlap,Nfft,fs,range);
figure(3) subplot(311)
plot(f,Pxx);axis([0 5000 0 0.001]); title('rectangular window PSD');
subplot(312)
plot(f,Pxx1);axis([0 5000 0 0.0007]); title('Hamming PSD');
subplot(313)
plot(f,Pxx2);axis([0 5000 0 0.0007]); title('Blackman PSD');
21