返回信息流
这是一条镜像帖。来源:北邮人论坛 / matlab / #9110同步于 2012/6/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖
北邮那本通信原理matlab仿真中的一个单极性归零码的例子,实现
buptronin
2012/6/17镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
呃。。。。。。题目漏掉了!补充:实现单极性归零码的时候为什么要使用sigexpand来扩充,而且扩充的都是0,这个不符合从随机序列转换成基带信号的原理啊,扩充以后不是0特别多,1则是独立的点???望高手指教,这其中的实现原理!谢谢
%数字基带信号的功率谱密度
clear all;
close all;
Ts=1;
N_sample=8; %每个码元的抽样点数
dt=Ts/N_sample; %抽样时间间隔
N=1000; %码元数
T=8000;
t=0:dt:(N*N_sample-1)*dt; %N*N_sample是总的抽样点数
gt1=ones(1,N_sample); %NRZ非归零波形
gt2=ones(1,N_sample/2); %RZ归零波形
gt2=[gt2 zeros(1,N_sample/2)]; %生成全零函数
mt3=sinc((t-5)/Ts); %sin(pi*t/Ts)/(pi*t/Ts)波形,截断取10个码元
gt3=mt3(1:10*N_sample);
d=(sign(randn(1,N))+1)/2; %randn函数是产生服从正态分布的随机数,randn(m,n)产生一个m*n的随机矩阵,这些数服从正态分布,而sign函数则是符号函数,大于零的取1,小于0的取-1,等于0则去0
%这个函数就是实现了:sign函数以后生成了-1到1的随机数,加上1后则是变成了0到2的随机序列,然后在这个基础上除以2则变成了0到1的随机序列了
data=sigexpand(d,N_sample); %对序列d的每两个数中插入N_sample-1个0,对数据进行扩充,相当于在原来的d序列上插入了(d-1)*(N_sample-1)个点
st1=conv(data,gt1); %调用Matlab的卷积函数,把扩充后的序列与gt1函数卷积,以便为后面的傅里叶变化做准备,相当于调制函数
st2=conv(data,gt2);
d=2*d-1;
data=sigexpand(d,N_sample);
st3=conv(data,gt3);
[f,st1f]=T2F(t,[st1(1:length(t))]);%傅里叶变换,调用t2f函数,这个函数是通用的,可以不管原理
[f,st2f]=T2F(t,[st2(1:length(t))]);
[f,st3f]=T2F(t,[st3(1:length(t))]);
figure(1)
subplot(3,2,1)
plot(t,[st1(1:length(t))]);grid
axis([0,20,-1.5,1.5]);ylabel('单极性NRZ波形');
subplot(3,2,2);
plot(f,10*log10(abs(st1f).^2/T));grid
axis([-5,5,-40,10]);ylabel('单极性NRZ功率谱密度(dB/Hz)');
subplot(3,2,3);
plot(t,[st2(1:length(t))]);
axis([0,20,-1.5,1.5]);grid
ylabel('单极性RZ波形');
subplot(3,2,4);
plot(f,10*log10(abs(st2f).^2/T));
axis([-5,5,-40,10]);grid
ylabel('单极性RZ功率谱密度(dB/Hz)');
subplot(3,2,5)
plot(t-5,[st3(1:length(t))]);
axis([0,20,-2,2]);grid
ylabel('单极性sinc波形');xlabel('t/Ts');
subplot(3,2,6)
plot(f,10*log10(abs(st3f).^2/T));
axis([-5,5,-40,10]);grid
ylabel('sinc波形功率谱密度(dB/Hz)');xlabel('f*Ts');