MATLAB数字信号处理基础
1、波形产生函数
函数 | 说明 |
---|---|
square | 方波 |
sawtooth | 锯齿波 |
sinc | sinc函数 |
diric | diric函数 |
rectpuls | 非周期方波 |
tripuls | 非周期三角波 |
pulstran | 脉冲序列 |
chirp | 调频余弦波 |
-
square函数:调用方式如下:
-
x = square(t):产生周期为2pi、幅度最大值为1的方波。
-
x = square(t, duty):产生周期为2pi、幅度最大值为1的方波,duty为占空比。
用square函数产生周期为1,占空比分别为50%和30%的方波:
t = 0:0.001:4; y1 = square(2*pi*t); y2 = square(2*pi*t, 30); subplot(1, 2, 1); plot(t, y1); subplot(1, 2, 2); plot(t, y2); axis([0, 4, -1.5, 1.5]);
-
-
sawtooth函数: 调用方式如下:
- x = sawtooth(t, width):产生周期为2pi、峰值为1的锯齿波,width表示该位置横坐标与周期的比值。
用sawtooth函数产生周期为1的锯齿波和方波:
t = 0:0.001:4; y1 = sawtooth(2*pi*t); y2 = sawtooth(2*pi*t, 0.5); subplot(1, 2, 1); plot(t, y1); subplot(1, 2, 2); plot(t, y2); axis([0, 4, -1, 1]);
-
sinc函数: 调用方式如下:
- x = sinc(t):产生sinc函数波形。
用sinc函数产生波形:
t = -5:0.001:5; y = sinc(t); plot(t,y); axis([-5 5 -1 1]);
-
diric函数: 调用方式如下:
- x = diric(x, n):当n为奇数时,函数周期为2pi;当n为偶数时,函数周期为4pi。
用diric函数产生波形:
t = -15:0.05:15; y1 = diric(t, 5); y2 = diric(t, 6); subplot(121); plot(t, y1); subplot(122); plot(t, y2); axis([-15 15 -1 1]);
-
rectpuls函数: 调用方式如下:
- x = rectpuls(t, w):产生宽度为w的非周期、单位高度的矩形波。
用rectpuls函数产生长度为1s,宽度为0.7s的非周期矩形波:
t = 0:0.01:1; y = rectpuls(t, 0.7); plot(t, y); axis([0 1 -0.2 1]);
-
tripuls函数: 调用方式如下:
-
x = tripuls(t, width, s):产生非周期单位高度、width宽度、倾斜度s的三角波。
用tripuls函数产生长度为1s,宽度为0.6s,倾斜度分别为0和0.9的非周期三角波:
t = 0:0.01:1; y1 = tripuls(t, 0.6, 0); subplot(121); plot(t, y1); y2 = tripuls(t, 0.6, 0.9); subplot(122); plot(t, y2); axis([0 1 -0.2 1]);
-
-
pulstran函数: 调用方式如下:
- x=pulstran(t,d,’func’):其中参数func取值为gauspuls(高斯调制正弦信号);rectpuls(非周期方波);tripuls(非周期三角波)。该函数产生以d为采样间隔的func指定形状的冲激串;
- x=pulstran(t,d,’func’,p1,p2):将参数p1和p2传递给func函数;
- x= pulstran(t,d,p,Fs):向量p表示原始序列,Fs为采样率。对原始序列多次延迟相加得到输出序列。
用pulstran函数产生三角波冲激串:
t = 0:0.001:1; d= 0:1/3:1; y = pulstran(t, d, 'tripuls'); plot(t, y); axis([0 1 1.3 1.75]);
-
chirp函数: 调用方式如下:
- chirp(t,f0,t1,f1):产生线性调频余弦信号。f0和f1分别是0时刻和t1时刻的瞬时频率。
- chirp(t,f0,t1,f1,method):参数method指定不同的扫频方式,取值方式三种包括:
Linear线性的
quadratic二次的
logarithmic对数的
用chirp函数产生二次扫频信号,绘出时域波形和时频图:
t = 0:1/400:1; y = chirp(t, 10, 1, 100, 'quadratic'); plot(t, y); spectrogram(y,128,120,128,1000,'yaxis'); axis([0 1 -1 1]);
t = 0:1/400:1;
y = chirp(t, 10, 1, 100, 'quadratic');
plot(t, y);
%spectrogram(y,128,120,128,1000,'yaxis');
axis([0 1 -1 1]);
2、傅里叶变换函数
函数 | 说明 |
---|---|
fft | 计算快速离散傅里叶变换 |
fftshift | 调整fft函数的输出顺序,将零频位置移动到频谱的中心 |
ifft | 计算离散傅里叶反变换 |
- fft函数: 调用方式如下:
- y=fft(x):计算信号x的快速傅立叶变换y。当x的长度为2的幂时,用基2算法,否则采用较慢的分裂基算法。
- y=fft(x,n):计算n点FFT。当length(x)>n时,截断x,否则补零。
- fftshift函数: 调用方式如下:
- y=fftshift(x):如果x为向量,fftshift(x)直接将x的左右两部分交换;如果x为矩阵(多通道信号),将x的左上、右下和右上、左下四个部分两两交换。
- ifft函数: 调用方式如下:
- y=ifft(x):计算信号x的傅立叶反变换
- y=ifft(x,n):计算n点IFFT。如果length(x)>n,以n为长度截短x,否则补零。
3、滤波器分析与实现函数
函数名 | |
---|---|
conv | 求卷积 |
impz | 数字滤波器的冲激响应 |
zplane | 离散系统的零极点图 |
abs | 求幅值 |
angle | 求相角 |
filter | 直接II型滤波器 |
-
conv函数: 调用方式如下:
- c=conv(a,b):返回向量a、b的卷积c。
-
impz函数: 调用方式如下:
- [h,t]=impz(b,a):b、a分别为系统传递函数的分子和分母的系数向量。返回系统(b,a)的冲激响应h和相应的时间轴向量t。
- [h,t]=impz(b,a,n):返回n点冲激响应。
- [h,t]=impz(b,a,n,Fs):指定冲激响应采样点间隔1/Fs。Fs为相对频率,缺省值为1。
计算线性系统(b,a)的冲激响应:
b = [0.2 0.1 0.3 0.1 0.2]; a= [1 -1.1 1.5 -0.7 0.3]; impz(b,a,50);
-
zplane函数: 调用方式如下:
- zplane(z,p):绘制系统零极点图,“o”表示零点,“x” , 表示极点。z,p分别为零点和极点向量。
- zplane(b,a):b、a分别为系统传递函数的分子和分母系
数向量。
计算线性系统(b,a)的零点和极点:
b = [0.2 0.1 0.3 0.1 0.2]; a= [1 -1.1 1.5 -0.7 0.3]; zplane(b, a);
-
abs函数: 调用方式如下:
- y=abs(x):返回复数向量x的幅值向量y。
绘出一个正弦信号的傅里叶变换的幅度谱:
t = (0:99)/100; x = sin(2*pi*40*t); y = fft(x); m = abs(y); f = (0:length(y)-1)/length(y)*100; plot(f,m);
-
angle函数: 调用方式如下:
- p = angle(h):返回复数向量h的相位向量p。
绘出方波信号的相频特性:
t = (0:99)/10000; x = sin(2*pi*t); y = fft(x); m = angle(y); f = (0:length(y)-1)/length(y)*100; plot(f,m);
-
filter函数: 调用方式如下:
- y=filter(b,a,x):计算输入信号x经过传递函数分子分母系数向量(降幂排列)为b、a的滤波器后的输出y。
- [y,zf]=filter(b,a,x):返回最终的状态向量zf。
- […]=filter(b,a,x,zi):指定滤波器的初始条件zi。