下面四段代码主要实现了单极性归零、单极性不归零、双极性归零、双极性不归零四个信号的变化
function y = dnrz(x)
%本函数实现将输入的一段二进制代码编为相应的双极性非归零码输出
%输入x为二进制码,输出y为编好的码
%给出计算每一个码元的点数,因为我们只是用离散的点来得出连续的函数表达
grid = 300;
t = 0:1/grid:length(x);
for i = 1:length(x) %计算码元的值
if(x(i) == 1) %如果信息为1
for j = 1:grid %该码元对应的点值为1
y((i-1)*grid+j)=1;
end
else
for j = 1:grid %反之,信息为0,码元对应的值取-1
y((i-1)*grid+j)=-1;
end
end
end
y = [y,x(i)];
M = max(y);
m = min(y);
subplot(2,1,1);
plot(t,y);
axis([0,i,m-0.1,M+0.1]);
title('1 0 0 1 1 0 0 0 0 1 0 1双极性不归零信号');
subplot(2,1,2);
w = -90:0.05:90;
z = fftshift(abs(fft(y)));
plot(w,z);
title('双极性不归零信号幅度谱');
axis([-5,5,0,1600]);
Test:
clear all;
figure(1);
x = [1 0 0 1 1 0 0 0 0 1 0 1];
y1 = dnrz(x)
function y = drz(x)
%double return to zero
%本函数实现将输入的一段二进制代码编为相应的双极性归零码输出
%输入x为二进制码,输出y为编好的码
grid = 300;
t = 0:1/grid:length(x); %定义相应的时间序列
for i = 1:length(x) %进行编码
if(x(i) == 1) %若输入的信息为1
for j = 1:grid/2
y(grid/2*(2*i-2)+j)=1; %定义前半时间值为1
y(grid/2*(2*i-1)+j)=0; %定义后半时间值为0
end
else
for j = 1:grid/2 %反之输入信息为0
y(grid/2*(2*i-2)+j)=-1; %定义所有时间值为0
y(grid/2*(2*i-1)+j)=0; %定义后半时间为0
end
end
end
y = [y,x(i)];
M = max(y);
m = min(y);
subplot(2,1,1);
plot(t,y);
axis([0,i,m-0.1,M+0.1]);
title('1 0 0 1 1 0 0 0 0 1 0 1双极性归零信号');
subplot(2,1,2);
w = -90:0.05:90;
z = fftshift(abs(fft(y)));
plot(w,z);
title('双极性归零信号幅度谱');
axis([-5,5,0,1600]);
% 做完傅立叶变换之后负频率信号移到到了正频率之后,fftshift函数可将负频率移回
% 去,这样零频率就由原来的频谱最左面移动了中间
Test:
clear all;
figure(2);
x = [1 0 0 1 1 0 0 0 0 1 0 1];
y = drz(x)
function y = snrz(x)
%single not return zero
%本函数实现将输入的一段二进制代码编为相应的单极性非归零码输出
%输入x为二进制码,输出y为编好的码
%给出计算每一个码元的点数,因为我们只是用离散的点来得出连续的函数表达
grid = 300;
t = 0:1/grid:length(x);
for i = 1:length(x) %计算码元的值
if(x(i) == 1) %如果信息为 1
for j = 1:grid %该码元对应的点值取 1
y((i-1)*grid+j)=1;
end
else
for j = 1:grid %反之,信息为0,码元对应点值取0
y((i-1)*grid+j)=0;
end
end
end
y = [y,x(i)];
M = max(y);
m = min(y);
subplot(2,1,1);
plot(t,y);
axis([0,i,m-0.1,M+0.1]);
title('1 0 0 1 1 0 0 0 0 1 0 1单极性不归零信号');
subplot(2,1,2);
w = -90:0.05:90;
z = fftshift(abs(fft(y)));
plot(w,z);
title('单极性不归零信号幅度谱');
axis([-5,5,0,1600]);
Test:
clear all;
figure(3);
x = [1 0 0 1 1 0 0 0 0 1 0 1];
y = snrz(x)
function y = srz(x)
%single return to zero
%本函数实现将输入的一段二进制代码编为相应的单极性归零码输出
%输入x为二进制码,输出y为编好的码
grid = 500;
t = 0:1/grid:length(x); %给出对应的时间序列
for i = 1:length(x) %进行码型变换
if(x(i) == 1) %若输入的信息是 1
for j = 1:grid/2
y(grid/2*(2*i-2)+j)=1; %定义前半时间值为1
y(grid/2*(2*i-1)+j)=0; %定义后半时间值为0
end
else
for j = 1:grid/2 %反之输入信息为0
y(grid*(i-1)+j)=0; %定义所有时间值为0
end
end
end
y = [y,x(i)];
M = max(y);
m = min(y);
subplot(2,1,1);
plot(t,y);
axis([0,i,m-0.1,M+0.1]);
title('1 0 0 1 1 0 0 0 0 1 0 1单极性归零信号');
subplot(2,1,2);
w = -90:0.05:90;
z = fftshift(abs(fft(y)));
plot(w,z);
title('单极性归零信号幅度谱');
axis([-5,5,0,1600]);
Test:
clear all;
figure(4);
x = [1 0 0 1 1 0 0 0 0 1 0 1];
y = srz(x)
参考:
电子信息类专业MATLAB实验教材 李明明 李白萍 北京大学出版社