matlab dpsk,Matlab之DPSK

% communication DPSK demodulation

% name:Chen Yu

% student ID:12353032

function Lab9

%

% 参数设置

%

Ts=1/100; %码元周期

Rs=1/Ts; %码元频率

n1=10; %载波频率系数

fc=Rs*n1; %载波频率

n2=64; %采样频率系数

fs=fc*n2; %采样频率,N_sample = 640

N_sample=fs*Ts; %每个码元的抽样点数=n1*n2,经测试小于128时,效果较差

dt=Ts/N_sample; %抽样时间间隔

N=10; %码元数

t=0:dt:((N+1)*N_sample-1)*dt;%传输序列持续时间,考虑了参考电平0

%

%基本码元g(t)=1,还有高斯白噪声

%

gt=cos(2*pi*fc*t(1:N_sample)+pi); %相位pi对应码元1

%噪声,均值=0,标准差=0.01

noise=normrnd(0,0.1,1,length(t));

s=zeros(1,(N+1)*N_sample);%采样点

absolute_code = randi([0,1],1,N); %生成绝对码

relative_code = zeros(1,N+1);

relative_code(1) = 0; %参考码元为0,为第一个码元

for k = 2:N+1

relative_code(k) = xor(absolute_code(k-1),relative_code(k-1));%生成相对码

end

%生成调制信号

s(1:N_sample) = -1*gt;

for i = 2:N+1

if relative_code(i) == 1 %得到波形图

s((i-1)*N_sample+1:i*N_sample) = gt; %码元为1

else

s((i-1)*N_sample+1:i*N_sample) = -1*gt; %码元为0

end

end

figure(1);

plot(t,s);

title('调制信号前两个码元');

axis([0,0.02,-1.5,1.5]);

grid on

%加入高斯白噪声

st = s + noise;

figure(2);

plot(t,st);

title('加入高斯白噪声后,调制信号前两个码元');

axis([0,0.02,-1.5,1.5]);

grid on

%带通滤波,去除AWGN

w1 = 2*(fc-Rs)/fs; %下截止频率

w2 = 2*(fc+Rs)/fs; %上截止频率

numerator= fir1(60,[w1,w2]); %FIR滤波器,numerator是FIR滤波器的系数

sfBandpass=filter(numerator,1,st); %st为时间信号

figure(3);

plot(t,sfBandpass);

title('通过带通滤波器后,调制信号前两个码元');

axis([0,0.02,-1.5,1.5]);

grid on

%进行相干解调

sfModulation = sfBandpass.*cos(2*pi*fc*t);

figure(4);

plot(t,sfModulation);

title('通过解调后,解调信号前两个码元');

axis([0,0.02,-1.5,1.5]);

grid on

%低通滤波

w1 = [];

w2 = 2*(Rs)/fs; %截止频率

numerator= fir1(60,[w1,w2]); %FIR滤波器,numerator是FIR滤波器的系数

sfLowpass=filter(numerator,1,sfModulation); %st为时间信号

figure(5);

plot(t,sfLowpass);

title('通过低通滤波器后的调制信号');

axis([0,0.1,-1.5,1.5]);

grid on

%抽样判决,我选取的是中间时刻

decide=zeros(1,N+1);

for k=1:N+1

if(sfLowpass((k-1)*N_sample+N_sample/2)>0)

decide(k)=1;

else

decide(k)=0;

end

end

%还原绝对码

get_absolute_code = zeros(1,N);

for j = 1:N

get_absolute_code(j) = xor(decide(j),decide(j+1));

end

%画出绝对码前后对比

n=1:N;

%输出原始码元

figure(6);

stem(n,absolute_code,'r','LineStyle','none');

%输出解调码元

hold on

stem(n,get_absolute_code,'*','b','LineStyle','none');

hleg=legend('原始码元','解调码元');

set(hleg,'Location','Northeast');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值