📄 hdb3.txt
字号:
这个文件只是对一个序列进行hdb3的编码运算。把横线下面的内容保存为hdb3.m然后在主程序生成一个序列,调用这个文件就可以了。
-------------------------------------------------------------------------------------
%对一个二进制序列进行hdb3编码运算
%y=hdb3(x)
%x为原始序列
function y=hdb3(x)
n=length(x);
last_V=-1;
last_one=-1;
y=zeros(size(x)); %初始化输出序列
count=0; %连0计数器
for i=1:n
if x(i)==1 %遇1则极性反转
y(i)=-last_one;
last_one=y(i);
count=0;
else
count=count+1;
if count==4
count=0;
y(i)=-last_V; %遇4连零则置为V,相邻的V极性反转
last_V=y(i);
if y(i)*last_one==-1 %V与前一个非0符号必须同极性
y(i-3)=y(i); %否则置B
end
last_one=y(i);
end
end
end
-------------------------------------------
主文件如下:
%hdb3码及其功率谱密度
clear all
close all
k=input('取样点数=2^k,k=[14]');
if isempty(k),
k=14;
end
N=2^k; %采样点数
L=64; %每码元采样点数
M=N/L; %码元数
Rb=1; %码元速率
Ts=1/Rb; %码元间隔
dt=Ts/L; %时域取样间隔
df=1/(N*dt); %频域取样间隔
T=N*dt; %时域截短时间
Bs=N*df/2; %频域系统带宽
t=[-T/2+dt/2:dt:T/2]; %时域横坐标
f=[-Bs+df/2:df:Bs]; %频域横坐标
%定义全零距阵,将来作为求功率的累加器
Ep=zeros(size(f));
for ii=1:30
a=rand(1,M)>0.75; % 产生低密度的二进制序列
b=hdb3(a);
hdb=zeros(L,M);
init=zeros(L,M);
for loop=1:L/2
init(loop,:)=a; %init第loop行元素
end
for loop=1:L/2
hdb(loop,:)=b; %hdb3第loop行元素
end
hdb=reshape(hdb,1,N);
init=reshape(init,1,N);
HDB=t2f(hdb,dt);
P=HDB.*conj(HDB)/T;
Ep=(Ep*(ii-1)+P)/ii;
end
%画原始序列
subplot(3,1,1)
plot(t,init,'m')
grid on
axis([0,T/10,-1.5,1.5])
set(gca,'XTick',[0:1:T/10])
xlabel('t(Tb)')
ylabel('s(t)')
title('原始序列')
%画HDB3码波形
subplot(3,1,2)
plot(t,hdb,'b')
grid on
axis([0,T/10,-1.5,1.5])
set(gca,'XTick',[0:1:T/10])
xlabel('t(Tb)')
ylabel('s(t)')
title('HDB3码编码序列')
%画功率谱密度
subplot(3,1,3)
aa=30+10*log10(Ep+eps);
plot(f,aa,'r')
grid on
axis([-5,5,-50,50])
xlabel('f(Rb)')
ylabel('Ps(f)')
title('HDB3码功率谱密度')
-----------------------------------
另外一个调用的文件t2f.m
%将时域信号做傅立叶变换到频域
%限制条件是x必须是阶二的距阵
%dt是信号的时域分辨率
function X=t2f(x,dt)
X=fftshift(fft(x))*dt;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -