%DPSK调制解调程序清单%仿真DPSK信号的产生及相干解调过程%将成形滤波器系数量化为10比特后,写入tra_lpf.coe文件中%将接收滤波器系数量化为10比特后,写入rec_lpf.coe文件中%将DPSK已调数据量化为8比特后,写入Dpsk.txt文件中ps=1*10^6;%码速率为1MHza=0.8;%成形滤波器系数为0.8B=(1+a)*ps;%中频信号处理带宽Fs=8*10^6;%采样速率为8MHzfc=2*10^6;%载波频率为2MHzN=20000;%仿真数据的长度t=0:1/Fs:(N*Fs/ps-1)/Fs;%产生长度为N,频率为fs的时间序列s=randint(N,1,2);%产生随机数据作为原始数据,%并将绝对码变换为相对码ds=ones(1,N);fori=2:Nifs(i)==1ds(i)=-ds(i-1);elseds(i)=ds(i-1);endend%对相对码数据以Fs频率采样Ads=upsample(ds,Fs/ps);%设计平方升余弦滤波器n_T=[-22];rate=Fs/ps;T=1;Shape_b=rcosfir(a,n_T,rate,T);%figure(4);freqz(Shape_b)%对采样后的数据进行升余弦滤波;rcos_Ads=filter(Shape_b,1,Ads);%产生载频信号f0=sin(2*pi*fc*t);%产生DPSK已调信号dpsk=rcos_Ads.*f0;%与相干载波相乘,实现相干解调demod_mult=dpsk.*f0;%设计接收端低通滤波器fc=[ps3.1*10^6];%过渡带mag=[10];%窗函数的理想滤波器幅度dev=[0.010.01];%纹波[n,wn,beta,ftype]=kaiserord(fc,mag,dev,Fs)%获取凯塞窗参数fpm=[0fc(1)*2/Fsfc(2)*2/Fs1];%firpm函数的频段向量magpm=[1100];%firpm函数的幅值向量rec_lpf=firpm(n,fpm,magpm);%firpm函数返回的最优滤波器系数%对乘法运算后的数据进行低通滤波,输出解调后的基带信号demod_lpf=filter(rec_lpf,1,demod_mult);figure(1)%绘制成形滤波后信号频谱、DPSK信号频谱、DPSK信号时域波形m_rcos_Ads=20*log10(abs(fft(rcos_Ads,1024)));m_rcos_Ads=m_rcos_Ads-max(m_rcos_Ads);m_dpsk=20*log10(abs(fft(dpsk,1024)));m_dpsk=m_dpsk-max(m_dpsk);%设置幅频响应的横坐标单位为MHzx_f=[0:(Fs/length(m_dpsk)):Fs/2];x_f=x_f/10^6;%只显示正频率部分的幅频响应mrcos_Ads=m_rcos_Ads(1:length(x_f));mdpsk=m_dpsk(1:length(x_f));%设置时域波表的横坐标单位为usLen=100;%设置时域波形显示的点数x_t=1:Len;%产生长度为Len的时间序列x_t=x_t/Fs*10^6;%显示所需的频谱及时域波形subplot(311);plot(x_f,mrcos_Ads);legend('成形滤波后信号频谱');xlabel('频率(MHz)');ylabel('幅度(dB)');gridon;subplot(312);plot(x_f,mdpsk);legend('DPSK已调信号频谱');xlabel('频率(MHz)');ylabel('幅度(dB)');gridon;subplot(313);plot(x_t,dpsk(101:Len+100));gridon;legend('DPSK时域信号波形');xlabel('时间(us)');ylabel('幅度(V)');gridon;figure(2)%对相对码重复Fs/ps倍采样,便于绘图比较s_Ads=rectpulse(ds,Fs/ps);Len=500;%设置时域波形显示的点数x_t=1:Len;%产生长度为Len的时间序列x_t=x_t/Fs*10^6;%绘制DPSK解调前后时域波形delay=18;%为便于观察,对解调后的基带波形超前显示delay个点。plot(x_t,s_Ads(1:Len)/2,'-',x_t,demod_lpf(delay:Len+delay-1)/max(demod_lpf),'--');legend('相对码信号波形','DPSK解调后基带波形');xlabel('时间(us)');ylabel('幅度(V)');gridon;