matlab编写关于信号波形的产生

信号波形的产生

前言

在MATLAB中,对基本信号的产生提供了许多相应的函数,下面将对一些基本的函数进行介绍。

1.线性调频函数与方波函数

在MATLAB中,产生线性调频扫频信号函数chirp调用格式如下;y=chirp(t,f0,t1,f1):产生一个线性(频率随时间线性变化)信号,其时间轴设置由数组t定义。时刻0的瞬间频率为f0,时刻t1的瞬间频率为f1.默认情况,f0 = 0Hz,t1=1,f1 = 100Hz。

y= chirp(t,f0,t1,f1, ‘method’);指定改变扫频的方法。可用的方法有linear(线性扫频) .quadratie(二次扫频)和logarithmic(对数扫频),默认时为linear.注意:对于对数扫频,必须有f1> f0。

y= chirp(t,f0,t1,f1, ‘method’ ,phi):指定信号的初始相位为phi(单位为度),默认时phi=0。

y= chirp(t, f0,t1,f1,‘quadratic’ ,phi, ‘shape’):根据指定的方法在时间t上产生余弦扫频信号,f0为第一时刻的瞬时频率,f1为t1时刻的瞬时频率,f0和f1单位都为Hz。如果未指定,f0默认为e- 6(对数扫频方法)或0(其他扫频方法),t1为1,f1为100Hz。

扫频方法有linear 线性扫频.quadratic二次扫频.logarithmie对数扫频。

phi允许指定一个初始相位(以度为单位),默认为0,如果想忽略此参数,直接设置后面的参数,可以指定为0或[ ];shape指定二次扫频方法的抛物线的形状是凹还是凸,值为concave或convex,如果此信号被忽略,则根据f0和f1的相对大小决定是凹还是凸。

在MATLAB中,使用square丽数可以得到方波函数.该函数的调用函数是:
x= square(t);类似于sin(t),产生周期为2* pi,幅值为1的方波。
x=square(t,duty);产生制定周期的矩形波,其中duty用于指定脉冲宽度与整个周期的比例。

例1:chirp函数的实现实例

clear
t=0:0.01:2;
y = chirp(t,0,1,120);
plot(t,y);
axis([0,1,0,1]);
ylabel('x(t)');
xlabel('t');
grid on;

结果:
在这里插入图片描述
例2:计算谱图与现行调频信号瞬时频率偏差

clear al1;
t= 0:0.002:2;
y=chirp(t,0,1,150);
subplot(311);spectrogram(y, 256, 250,256, 1E3, 'yaxis');
xlabel('t= 0:0 002:2');
title('不同采样时间的条件下');
t =-2:0.002:2;
y=chirp(t, 100, 1, 200,'quadratic');
subplot(323); spectrogram(y, 128, 120, 128, 1E3, 'yaxis');
xlabel('t= -2:0.002:2');
t =-1:0.002:1;
fo=100;f1=400;
y = chirp(t, fo,1,f1, 'q',[], 'convex'); 
subplot(324); spectrogram(y,256, 200, 256, 1000, 'yaxis')
xlabel('t= -1:0. 002:1');
t = 0:0.002:1;
fo=100;f1=25;
y = chirp(t,fo,1,f1, 'q',[], 'concave');
subplot(325); spectrogram( y,hanning(256),128,256, 1000, 'yaxis');
xlabel('t= 0:0.002:1');
t=0:0.002:10;
fo=10;f1=400;
y = chirp(t, fo,10, f1, 'logarithmic');
subplot(326);spectrogram(y, 256, 200,256, 1000, 'yaxis')
xlabel('t= 0:0. 002:10');

结果如下:
在这里插入图片描述
例3:一个连续的周期性矩形信号频率为6kHz,信号幅度为0~3V之间,脉冲寬度与周期的比例为1 : 4,且要求在窗口上显示其两个周期的信号波形,并对信号的一个周期进行15点采样来获得离散信号,显示原连续信号与采样获得的离散信号。

f = 6000;nt= 3;
N= 15;T= 1/f;
dt = T/N;
n=0:nt* N- 1;
tn=n*dt;
x=square(2*f*pi*tn,25) + 1;
%产生时城信号,且幅度在0~2之间
subplot(2,1,1);stairs(tn,x, 'k');
axis([0 nt*T 1.1 *min(x) 1.1 * max(x)]);
ylabel('x(t)');
subplot(2,1,2);stem(tn,x, 'filled', 'k');
axis([0 nt*T 1.1 * min(x) 1.1*max(x)]);
ylabel( 'x(n)');

结果如下:
在这里插入图片描述

2.随机函数与三角波函数

在实际系统的研究和处理中,常常需要产生随机信号,在MATLAB中,rand函数可以生成随机信号。该函数的调用方法如下:
Y = rand(n):返回一个n X n的随机矩阵。如果n不是数量,则返回错误信息。
Y = rand(m,n)或Y = rand([mn]):返回一个m X n的随机矩阵。
Y = rand(m,n,…)或Y = rand([m n…]):产生随机数组。
Y = rand(size(A)): 返回一个和A有相同尺寸的随机矩阵。
在MATLAB中,函数sawtooth用于产生锯齿波或三角波信号,该函数的调用方法为:
x= sawtooth(t):产生周期为2pi,振幅从一1到1的锯齿波。在2pi的整数倍处值为-1到1,这一段波形
斜率为1/pi。
sawtooth(t,width):产生三角波,width在0到1之间。

例4 生成一组51点构成的连续随机信号和与之相应的随机序列

tn= 0:50;
N= length( tn);
x= rand(1,N);
subplot(1,2,1), plot(tn,x, 'k');
ylabel('x(t)');
subplot(1,2,2), stem(tn,x, 'filled', 'k');
ylabel('x(n)');

结果如下:
在这里插入图片描述
例5 产生周期为0.025的三角波

clear
Fs= 10000;t =0:1/Fs:1;
x1 = sawtooth(2*pi* 40* t,0);
x2= sawtooth(2*pi* 40* t,1);
subplot(2,1,1);
plot(t,x1);axis([0,0.25,-1,1]);
subplot(2,1,2);
plot(t,x2);axis([0,0.25, - 1,1]);

结果如下:
在这里插入图片描述

3.rectpuls函数与diric函数

非周期方波信号函数rectpuls,调用格式:
y= rectpuls(t,w):产生指定宽度为w的非周期方波。
dirie函数用于产生Dirichlet函数或周期Sinc函数,其调用的格式如下:
y=diric(x,n):返回一大小与x相同的矩阵,其元素为Dirichlet函数。

例6 非周期方波信号函数rectpuls的实现

clear
t=-3:0.001:3;
y= rectpuls(t);
subplot(121)
plot(t,y);
axis([-2 2 -1 2]);
grid on;
xlabel('t');
ylabel( 'w(t)');
y=2.5* rectpuls(t,2);
subplot(122)
plot(t, y);grid on;
axis([-2 2 -1 3]);
grid on;
xlabel('t');
ylabel('w(t)');

结果如下:
在这里插入图片描述
例7 产生sinc函数曲线与diric 函数曲线。

clf;
t=-3*pi:pi/40:4*pi;
subplot(2,1,1);
plot(t, sinc(t));
title( 'Sinc');
grid on; 
xlabel('t');
ylabel( 'sinc(t)');
subplot(2,1,2);
plot(t, diric(t,5));
title( 'Diric');
grid on; 
xlabel('t');
ylabel('diric(t)');

结果如下:
在这里插入图片描述

sinc函数与tripuls函数

sinc的函数定义为sinc(t)=sint/t,sinc函数的调用格式如下:
y=sinc(x):返回一个有sinc函数值为元素的矩阵。
tripuls函数用于产生非周期三角波信号,该函数的调用格式如下:
y= tripuls(t,w,s):产生周期为w的非周期方波,斜率为s(-1<s<1)。

例8 sinc函数发生器

clear
t=(1:12)';
x= randn(size(t));
ts = linspace(-10,10, 500)';
y = sinc(ts(:, ones(size(t))) -t(:, ones(size(ts)))')*x;
plot(t,x, 'o',ts,y)
ylabel( 'x(n)'); 
xlabel('n'); 
grid on;

结果:
在这里插入图片描述
例9 非周期三角波信号的实现

clear
t= -2:0.001:2;
y= tripuls(t,4,0.5);
plot(t,y);grid on; 
axis([-3 3 -1 2]);
grid on;
xlabel('t');
ylabel('y(t)');

结果如下:
在这里插入图片描述

5.gauspuls函数与pulstran函数

功能:gauspuls函数用于产生高斯正弦脉冲信号函数,该函数的调用格式如下:
yi= guaspuls(T,FC,BW,BWR):返回持续时间为T,中心频率为FC(Hz),宽带为
BW的幅度为1的高斯正弦脉冲(RF)信号的抽样。

TC = guaspuls( ‘eutoff’, FC, BE, BER,TPB):返回按参数TEP(dB)计算所对应的截
断时间TC。

pulstran函数用于脉冲序列发生器,其调用格式如下:
y= pulstran(t,d, ‘func’):该函数基于一个名为func的连续函数并以之为一个周期,从而产生一串周期性的连续函数(func函数可自定义)。pulstran函数的横坐标范围由向量t指定,而向量d用于指定周期性的偏移量(即各个周期的中心点),这样这个func函数会被计算length(d)次,从而产生-个周期性脉冲信号。pulstran函数的一般调用形式为
y= pulstran(t,d, ‘fune’,pl.2…): pl,p2,-.为需要传送给func丽数的额外输人参数值(除了变量t之外)。

例10 高斯正弦脉冲信号函数的实现

clear
tc = gauspuls( 'cutoff', 60e3,0.6,[], -40);
t =-tc:1e-6:tc;
yi = gauspuls(t, 60e3,0.6);
plot(t,yi)
xlabel('t');
ylabel('h(t)');
grid on

结果如下:
在这里插入图片描述
例11 脉冲序列发生器实现

clear
T=0:1/1E3:1;
D = 0:1/4:1;
Y= pulstran(T, D, 'rectpuls',0.1);
subplot(121)
plot(T,Y);
xlabel('t');
ylabel('w(t)');
grid on;axis([0,1, -0.1,1.1]);
T=0:1/1E3:1;
D=0:1/3:1;
Y= pulstran(T,D, 'tripuls',0.2,1);
subplot(122 )
plot(T,Y);
xlabel('t');
ylabel('m(t)');
grid on;axis([0,1, -0.1,1.1]);

结果如下:
在这里插入图片描述
上述都是常用信号波形的生成方式,有不懂的函数可以在matlab 命令窗口输入help+函数,即可了解函数的用法。

  • 7
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值