数字信号处理信号抽样与插值MATLAB实现——实例
      
      
    
   
  
  
    
因为之前MATLAB没有好好学,而且DSP也没有好好学,做起作业来十分困难,为了好好写作业,我又重新研究了DSP和MATLAB,学了一下信号的抽样和插值
先看一看x(n)原本的图像 
代码如下
1 2 3 4 5 6 7 8 9 10 11 12
   | %定义基本参数 f=1;%原信号频率 fs=16;%抽样信号频率 N=52;%采样点数 n=0:N-1;
  %画原序列图像 xn=cos(2*pi*n*(f/fs)); stem(n,xn) title('原x(n)图像') xlabel('n') ylabel('幅度')
   | 
 
题目中说了f/fs=16,也就是说T=16,在图像中也吻合
那么我们要将其进行4倍的抽样,该怎么做
实现代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
   | %定义基本参数 f=1;%原信号频率 fs=16;%抽样信号频率 N=52;%采样点数 n=0:N-1;
  xn=cos(2*pi*n*(f/fs));
  %画M=4倍抽样的x(n) M=4; m=0:N/M-1;%52/4=13 13-1=12 0:12有13个点 xn1=decimate(xn,M);%对序列进行抽样 subplot(3,1,2) stem(m,xn1)%注意对上m和xn1 title('进行M=4倍抽取后的x(n)图像') xlabel('n') ylabel('幅度')
   | 
 
抽样函数
其中decimate()函数的意思就是抽样
1
   | decimate(xn,M)%表示对xn进行M倍的抽样,并不能进行插值
   | 
 
注意看图像的横坐标,之前的T=16,现在的T=4
下面对信号进行插值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
   | %定义基本参数 f=1;%原信号频率 fs=16;%抽样信号频率 N=52;%采样点数 n=0:N-1;
  xn=cos(2*pi*n*(f/fs));
  %画L=3倍插值的x(n) L=3; xn2=interp(xn,L); p=0:N*L-1; stem(p,xn2) title('进行L=3倍插值后的x(n)图像') xlabel('n') ylabel('幅度')
   | 
 
插值函数
1
   | interp(xn,L);%表示对xn进行L的插值,L必须为正整数
   | 
 
同样,观察横坐标,既然L=3,那么T就变成了48
在画图时要注意stem()里面的参数,常常会因为抽样点和信号对不上画不出来
完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
   | clear close all clc
  %定义基本参数 f=1;%原信号频率 fs=16;%抽样信号频率 N=52;%采样点数 n=0:N-1;
  %画原序列图像 xn=cos(2*pi*n*(f/fs)); %subplot(3,1,1) stem(n,xn) title('原x(n)图像') xlabel('n') ylabel('幅度')
  %画M=4倍抽样的x(n) M=4; m=0:N/M-1;%52/4=13 13-1=12 0:12有13个点 xn1=decimate(xn,M);%对序列进行抽样 subplot(3,1,2) stem(m,xn1)%注意对上m和xn1 title('进行M=4倍抽取后的x(n)图像') xlabel('n') ylabel('幅度')
  %画L=3倍插值的x(n) L=3; xn2=interp(xn,L); p=0:N*L-1; subplot(3,1,3) stem(p,xn2) title('进行L=3倍插值后的x(n)图像') xlabel('n') ylabel('幅度')
   | 
 
