Advertisement

MATLAB数字信号处理基础

阅读量:

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。

全部评论 (0)

还没有任何评论哟~