菜鸟之MATLAB学习——NRZ & RZ& sinc信号及其频谱分析

本人MATLAB学习小白,仅做笔记记录和分享~~

clc;
close all;

Ts=1;
N_sample=8;
dt=Ts/N_sample;

N=1000;
t=0:dt:(N*N_sample-1)*dt;


%码型构建%

gt1=ones(1,N_sample);  % 1s时长高电平 NRZ波形
gt2=[ones(1,N_sample/2),zeros(1,N_sample/2)]; % RZ波形 
mt3=sinc((t-5)/Ts);
gt3=mt3(1:1000*N_sample);

%plot(t(1:10*N_sample),gt3);

d=(sign(randn(1,N))+1)/2;   %生成1*N的均值为0,方差为1的随机数;sign函数返回值有3种,+1、-1、0;取0值概率为0

data=sigxpand(d,N_sample); %等间隔插入7个0
st1=conv(data,gt1);
st2=conv(data,gt2);

d=2*d-1;
data=sigxpand(d,N_sample);
st3=conv(data,gt3);

figure(1);
subplot(321),plot(t(1:1000),st1(1:1000));axis([0,t(1000),0,2]);
subplot(323),plot(t(1:1000),st2(1:1000));axis([0,t(1000),0,2]);
subplot(325),plot(t(1:1000),st3(1:1000));axis([0,t(1000),-3,3]);


[f,stf1]=T2F(t,st1(1:length(t)));
[f,stf2]=T2F(t,st2(1:length(t)));
[f,stf3]=T2F(t,st3(1:length(t)));


subplot(322),plot(f,10*log10(abs(stf1).^2));grid;
axis([-5,5,-40,100]);xlabel('单极性NRZ信号功率谱密度');
subplot(324),plot(f,10*log10(abs(stf2).^2));grid;
axis([-5,5,-40,100]);xlabel('单极性RZ信号功率谱密度');
subplot(326),plot(f,10*log10(abs(stf3).^2));grid;
axis([-5,5,-40,100]);xlabel('sinc波形功率谱密度');



%%%%%%%----函数定义必须在结尾-----%%%%%%%%%%%%%%%%%%
function[out]=sigxpand(d,M)
N=length(d);
out=zeros(M,N);
out(1,:)=d;
out=reshape(out,1,M*N);
end
%%%%%%%--------end--------------%%%%%%%%%%%%%%%%%%



%------------------FFT变换函数--------------%
function[f,sf]=T2F(t,st)
dt=t(2)-t(1);
N=length(st);
fs=1/dt;
df=fs/N;
f=0:df:(N-1)*df;
sf=fft(st);
sf=fftshift(sf);
f=f-N/2*df;
end
%------------------end-----------------%

代码运行结果

在这里插入图片描述

小结

1、生成0 1相间的随机序列

d=(sign(randn(1,N))+1)/2;
% or
d=randi([0,1],1,N);

2、同理生成-1 1相间的随机序列

d=randi([0,1],1,N);
d=2*d-1;     %在上述的基础上,加上此语句

3、为什么要等间隔插入N_sample-1个0呢

gt1=[1,1,1]				 %基本码元
data=[1,0,1,1,1,0,1];	 %码元序列
st1=conv(gt1,data);
plot(st1);

运行结果
在这里插入图片描述
如果data等间隔插入2个0

clc;
close all;
 

gt1=[1,1,1];			 %基本码元
data=[1,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0];	 %码元序列
st1=conv(gt1,data);
plot(st1);

axis([1,24,0,1.5]);grid;

在这里插入图片描述
这样就生成了以基本码元为基础的码元序列。——即sigxpand函数的功能.

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 首先,需要使用 `linspace` 函数生成一组时间点,例如: ``` t = linspace(0, 1, 1000); % 生成时间序列,每秒 1000 个点 ``` 然后,可以使用 `square` 函数生成 NRZ 信号,例如: ``` NRZ = square(2*pi*t*10); % 生成 NRZ 信号,频率为 10Hz ``` 可以使用 `plot` 函数绘制 NRZ 信号的时域图像,例如: ``` plot(t, NRZ); % 绘制 NRZ 信号的时域图像 ``` 可以使用 `fft` 函数计算 NRZ 信号的频域信息,例如: ``` NRZ_FFT = fft(NRZ); % 计算 NRZ 信号的频域信息 ``` 可以使用 `plot` 函数绘制 NRZ 信号的频域图像,例如: ``` plot(abs(NRZ_FFT)); % 绘制 NRZ 信号的频域图像 ``` RZ 信号的生成和绘制方法类似,可以使用 `pulstran` 函数生成 RZ 信号,例如: ``` t1 = linspace(0, 1, 1000); % 生成时间序列,每秒 1000 个点 RZ = pulstran(t1, [0 0.5], [1 -1], 10); % 生成 RZ 信号,频率为 10Hz ``` 然后可以使用 `plot` 函数绘制 RZ 信号的时域图像,例如: ``` plot(t1, RZ); % 绘制 RZ 信号的时域图像 ``` 可以使用 `fft` 函数计 ### 回答2: 以下是生成并绘制NRZ和RZ信号的时域和频域信息的MATLAB代码: ```matlab % 生成NRZ信号 T = 1; % 位周期 bit_duration = 0.1; % 位持续时间 bit_sequence = [1 0 0 1 1 0 1]; % 位序列 t = 0:bit_duration/100:bit_duration; % 时间点 nrz = zeros(1, length(t) * length(bit_sequence)); % 初始化NRZ信号 for i = 1:length(bit_sequence) if bit_sequence(i) == 1 nrz((i-1)*length(t)+1:i*length(t)) = 1; end end % 绘制NRZ信号的时域信息 figure; subplot(2, 1, 1); plot(0:length(nrz)-1, nrz); xlabel('时间'); ylabel('振幅'); title('NRZ信号的时域信息'); % 绘制NRZ信号频谱信息 nrz_freq = abs(fft(nrz)); f = (0:length(nrz_freq)-1) / max(length(nrz_freq)-1); subplot(2, 1, 2); plot(f, nrz_freq); xlabel('频率'); ylabel('幅度'); title('NRZ信号的频域信息'); % 生成RZ信号 rz = zeros(1, length(t) * length(bit_sequence)); % 初始化RZ信号 for i = 1:length(bit_sequence) if bit_sequence(i) == 1 rz((i-1)*length(t)+1:(i-1)*length(t)+length(t)/2) = 1; else rz((i-1)*length(t)+length(t)/2+1:i*length(t)) = -1; end end % 绘制RZ信号的时域信息 figure; subplot(2, 1, 1); plot(0:length(rz)-1, rz); xlabel('时间'); ylabel('振幅'); title('RZ信号的时域信息'); % 绘制RZ信号频谱信息 rz_freq = abs(fft(rz)); subplot(2, 1, 2); plot(f, rz_freq); xlabel('频率'); ylabel('幅度'); title('RZ信号的频域信息'); ``` 这段代码首先生成了一个NRZ信号和一个RZ信号,然后分别绘制了它们的时域信息和频域信息。NRZ信号的时域信息中,每个1都被表示为高电平,每个0都被表示为低电平。频域信息中,显示了NRZ信号频谱内容。同样,RZ信号的时域信息中,每个1都被表示为高电平,每个0都被表示为低电平加上负脉冲,频域信息也被绘制出来。 ### 回答3: 以下是生成并绘制NRZ和RZ信号的时域和频域信息的Matlab代码: %生成NRZ信号 T = 1; %信号周期为1秒 bit_duration = 0.1; %比特持续时间为0.1秒 t = 0:0.001:T; %时间采样点 bit = [0 1 0 1]; %数据比特序列 nrz_signal = []; for i = 1:length(bit) if bit(i) == 1 nrz_signal = [nrz_signal ones(1, bit_duration*1000)]; else nrz_signal = [nrz_signal zeros(1, bit_duration*1000)]; end end %绘制NRZ信号的时域图像 figure; subplot(2,2,1); plot(t, nrz_signal); title('NRZ信号的时域图像'); xlabel('时间(秒)'); ylabel('幅度'); %绘制NRZ信号的频域图像 subplot(2,2,2); freq = linspace(-1000, 1000, length(t)); nrz_spectrum = abs(fftshift(fft(nrz_signal))); plot(freq, nrz_spectrum); title('NRZ信号的频域图像'); xlabel('频率(Hz)'); ylabel('幅度'); %生成RZ信号 rz_signal = []; for i = 1:length(bit) if bit(i) == 1 rz_signal = [rz_signal ones(1, bit_duration*500) zeros(1, bit_duration*500)]; else rz_signal = [rz_signal zeros(1, bit_duration*1000)]; end end %绘制RZ信号的时域图像 subplot(2,2,3); plot(t, rz_signal); title('RZ信号的时域图像'); xlabel('时间(秒)'); ylabel('幅度'); %绘制RZ信号的频域图像 subplot(2,2,4); rz_spectrum = abs(fftshift(fft(rz_signal))); plot(freq, rz_spectrum); title('RZ信号的频域图像'); xlabel('频率(Hz)'); ylabel('幅度'); 代码中,我们首先设置了信号的周期T和比特的持续时间bit_duration,并且给出了数据比特序列bit。然后,我们利用每个比特的值来生成NRZ和RZ信号。对于NRZ信号,我们通过在每个比特持续时间内输出1或0来生成信号。对于RZ信号,我们通过在前一半比特持续时间内输出1,后一半持续时间内输出0来生成信号。最后,我们绘制了NRZ和RZ信号的时域和频域图像。在频域图像中,我们使用傅里叶变换来将信号转换到频域,并使用fftshift函数将频谱图中的零频移到中心。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值