当前位置:文档之家› Matlab数字信号处理

Matlab数字信号处理


1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
0
0.01
0.02
0.03
0.04
0.05
0.06
0.07
9、sinc函数信号
y=sinc(x); 产生周期为2*pi,随x的增加衰减震荡的 偶函数,在n*pi处值为零

1 0.8
0.6
0.4
0.2
0
-0.2
-0.4
0
0.01
程序实现: clc; clear; x=[1 zeros(1,63)]; b=[0.2 0.1]; a=[1 –0.4 –0.5]; h=filter(b,a,x); h1=impz(b,a); figure; stem(h); title(‘Filter function’); figure; stem(h1) title(‘Impz function’)
250 300 Frequency (Hz)
350
400
450
500



(2)切比雪夫法设计滤波器 切比雪夫法设计滤波器可以分为切比雪夫1法 和切比雪夫2法两种,这里我们只介绍切比雪 夫1法。 其语法结构为: [b,a]=cheby1(n,Rp,wn); [b,a]=cheby1(n,Rp,wn,’ftype’); …… 设计的是一个阶数为n,截止频率为wn,通带 波纹衰减为Rp的低通滤波器。返回值a,b分别是 阶数为n+1的向量,表示滤波器系统函数的分 母和分子的多项式系数,滤波器的传递函数可 以表示为:

它有如下两种形式: y=filter(b,a,x) 由上图可以知道:b=[0.2,0.1] a=[1,-0.4,-0.5] 则系统的单位抽样响应为:h=filter(b,a,x) (2)impz函数实现 Impz(b,a)可以直接得到单位抽样响应,并画出 响应图形



6、信号的卷积 Matlab提供了内部函数conv来实现两个有限长 序列的卷积,该函数假定两个序列的是从n=0 开始的。 例:x=[3,11,7,0,-1,4,2]; h=[2,3,0,-5,2,1]; y=conv(x,h); %y=[6,31,47,6,-51,-5,41,18,-22,-3,8,2] (共n+m-1项)
%产生单位抽样信号 1 0 . 2 0 . 1z % h (z)
1 0.4z 1 0.5z 2
Filter function 0.2
Impz function 0.2
0.18
0.18
0.16
0.16
0.14
0.14
0.12
0.12
0.1
0.1
0.08
0.08
0.06
0.06
5、指数序列 n=1:N; x=a.^n; %此处必须用.^而不能直接用^ 6、随机序列 rand(m,n) %产生m行,n列的在[0,1] 上服 %从均匀分布的随机数矩阵 randn(m,n) %产生均值为0,方差为1的高斯随机 %序列 7、方波信号 x=square(t,duty); 产生周期为2*pi,幅值为正负1的方波信号,其中 duty为正幅值部分占周期的百分数
0.2
0.15
0.1
0.05
0
-0.05
-0.1
-0.15
-0.2
-0.25
0
10
20
30
40
50
60
70
80
90
100
例: 信号采样频率为1000Hz,设计一个阶数为
9,截止频率为300Hz的高通巴特沃思滤波 器。 [b,a]=butter(9,300/500,‘high’); Freqz(b,a,128,1000);
Matlab数字信号处理
1、信号的产生 2、信号的运算 3、差分方程与Z变换 4、快速傅里叶变换 5、数字滤波器的设计 6、使用中的一些技巧
一、信号的产生
1、单位采样序列

x=zeros(1,n); x(k)=1;
2、单位阶跃序列
x=ones(1,n); 3、正弦序列 n=0:N-1; x=sin(2*pi*f*n*Ts+fai); 4、复正弦序列 n=0:N-1; x=exp(j*w*n);


函数的截止频率wn是指通带的边缘,在那滤波 器的幅度响应为-RpdB,wn的取值范围为0-1, 其中1表示采样频率的一半。越小的通带波 纹,会导致越大的过渡带宽。如果wn=[w1 w2] 为两个元素的向量,则函数返回的是阶数为 2*n的带通滤波器系统函数有理多项式的系 数,滤波器的通带范围为w1-w2。 用[b,a]=cheby1(n,Rp,wn,’ftype’)设计搞通和带阻 滤波器,ftype确定滤波器的形式,为high时, 为阶数为n,截至频率为wn的高通滤波器;为 stop时,阶数为2*n,阻带为w1-w2的带阻滤波 器。
差分方程与Z变换

1、离散系统的时域表示 由此可见,系统地输出,就是输入与单位抽样响应卷 积得到的。 例:如下离散系统:

系统的单位抽样信号的响应可以通过filter函数和impz 函数实现。 (1)filter函数 因为一个离散系统 可以看作是一个滤波器,该函数 就是利用滤波器来实现的。

mag=abs(h); ph=angle(h); ph=ph*180/pi; figure; plot(f,mag); title(‘f-m’); figure; plot(f,ph); title(‘f-p’);
快速傅里叶变换
在matlab中实现fft很简单,只需要通过命
-200
-300
-400
0
50
100
150
200
250 300 Frequency (Hz)
350
400
450
500
0 -200 Phase (degrees) -400 -600 -800 -1000
0
50
100
150
200
250 300 Frequency (Hz)
350
400
450
500

例:采样频率为1000Hz的采样信号,设计一个 10阶带通切比雪夫滤波器,通带范围为100200Hz,滤波器在通带的波纹为0.5dB,并画出 冲激响应曲线。 n=10; Rp=0.5; wn=[100,200]/500; [b,a]=cheby1(n,Rp,wn); [y,t]=impz(b,a,101); stem(t,y); 冲激响应曲线如下:
0.02
0.03
0.04
0.05
0.06
0.07
二、信号的运算

1、信号的延迟 给定信号x(n),若信号y1(n)、y2(n)分别定义为: y1(n)=x(n-k) y2(n)=x(n+k) 那么,y1(n)是整个x(n)在时间轴上右移k个时间 单位所得到的新序列, y2(n)是整个x(n)在时间 轴上左移k个时间单位所得到的结果。
例: 信号采样频率为1000Hz,设计一个阶数为
9,截止频率为300Hz的低通切比雪夫滤波 器,其中滤波器在通带的波纹为0.5dB。 [b,a]=cheby1(9,0.5,300/500); Freqz(b,a,512,1000);
滤波器的幅频特性与相频特性如下:
0
-100 Magnitude (dB)
令fft来实现,这里需要注意的是采样频 率不要太高,否则频谱的信息被掩盖。 另外,计算所得的序列中第k点所对应的 实际频率为,f=k*fs/N,其中N为进行傅利 叶变换的点数,fs为采样频率,一般取信 号最大频率的3-5倍。

例: clc; clear; load leleccum; x=leleccum; N=length(x); y=angle(fft(x)); fs=100; f= (1:N)*fs/N; plot(f,y);

例:采样频率为1000Hz的采样信号,设
计一个10阶带通butter滤波器,通带范 围为100-200Hz,并画出冲击响应曲线。 n=5; wn=[100 200]/500; [b,a]=butter(n,wn,’bandpass’); [y,t]=impz(b,a,101); stem(t,y);
0.04
0.04
0.02
0.02
0
0
10
20
30
40
50
60
70
0
0
50
100
150


2、离散系统的频率响应 Matlab中的freqz函数用来计算由a,b构成系统 的频率响应。 [h,f]=freqz(b,a,n,fs) 例: clc; clear; fs=1000; b=[0.2 0.1]; a=[1 –0.4 –0.5]; [h,f]=freqz(b,a,256,fs);
编程实现: function
[y,n]=sig_shift(x,m,n0) m为输入x的下标;n0为延迟单位 n=m+n0; y=x;

2、相加、相乘 x(n)=x1(n)+x2(n); x(n)=x1(n)*x2(n) 当两个向量相乘时,若用.*表示数组相乘, 此时,x1中对应元素与x2中对应元素相乘,所 得结果作为结果数组(矩阵),要求两原始数组 中元素个数相同,如果采用*是进行向量(矩阵) 的乘法,相加时要求两原始数组中元素个数相 同。
滤波器的幅频特性与相频特性如下:
相关主题