实验一、数字信号采样与重建
    
   
    
     实验文档
    
   
    
     1.
    
    
     信号降采样
    
   
    
     
      
       
        decimate
       
      
     
    
   
    
     
      
       decimate
      
     
     
      
       函数只能降低采样率,或者说只能实现信号的抽取。
       
       比如:y = decimate(x,r)
       
       x是样本信号,这里将输入信号x的采样率降低r倍,即在x的数据点中每r个点中,只保留一个点。
      
     
    
   
    
     t = 0:.0003:1;
    
    % Time vector
   
    
     x = sin(2*pi*30*t) + sin(2*pi*60*t);
    
   
    
     y = decimate(x,5)
    
   
    
     subplot(1,2,1);
    
   
    
     stem(x(1:120)), axis([0 120 -2 2])
    
    % Original signal
   
    
     title(
    
    
     ‘Original Signal’
    
    
     )
    
   
    
     subplot(1,2,2);
    
   
    
     stem(y(1:30))
    
    % Decimated signal
   
    
     title(
    
    
     ‘Decimated Signal’
    
    
     )
    
   
     
   
     
   
    
     t=0:0.002:0.029;
    
   
    
     x = sin(2*pi*30*t) + sin(2*pi*60*t);
    
   
    
     y = interp(x,10);
    
   
    
     subplot(211);
    
   
    
     stem(x);
    
   
    
     title(
    
    
     ‘Original Signal’
    
    
     );
    
   
    
     subplot(212);
    
   
    
     stem(y);
    
   
    
     title(
    
    
     ‘Interpolated Signal’
    
    
     );
    
   
     
   
    
     3.
    
    
     任意降采样
    
   
    
     
      
       y=resample(x,p,q,n,beta)
      
     
    
    
    
     
      x
     
    
    
     
      :待重采样信号;
      
      p:目标采样率;
      
      q:待重采样信号的采样率;
      
      n:滤波器长度与n成正比,采用chebyshevIIR型低通滤波器的阶数,缺省值为10;
      
      beta:设置低通滤波器使使用Kaiser窗的参数,缺省值为5;
     
    
   
    
     Fs = 100;
    
   
    
     tx = linspace(0,1,21) + .015*rand(1,21);
    
   
    
     x = sin(2*pi*tx);
    
   
    
     [y, ty] = resample(x, tx, Fs);
    
   
    
     plot(tx,x,
    
    
     ‘–‘
    
    
     ,ty,y,
    
    
     ‘o:’
    
    
     )
    
   
    
     legend(
    
    
     ‘original’
    
    
     ,
    
    
     ‘resampled’
    
    
     );
    
   
    
     xlabel(
    
    
     ‘Time’
    
    
     )
    
   
    
     axis
    
    
     tight
    
   
     
   
    
     4
    
    
     采样定理与频谱分析
    
   
    
     Fs=10000;
    
   
    
     tx = 0:0.0002:1;
    
   
    
     a=50*sqrt(2)*pi;b=a;
    
   
    
     x=exp(-a*tx).*sin(b*tx);
    
   
    
     [y, ty] = resample(x, tx, Fs);
    
   
    
     [h,w]=freqz(x);
    
   
    
     [h1,w1]=freqz(y);
    
   
    
     subplot(211);
    
   
    
     plot(w(1:512),abs(h(1:512)));
    
   
    
     subplot(212);
    
   
    
     plot(w1(1:512),abs(h1(1:512)));
    
   
     
   
    
     Fs=100;
    
   
    
     tx = 0:0.0002:1;
    
   
    
     a=50*sqrt(2)*pi;b=a;
    
   
    
     x=exp(-a*tx).*sin(b*tx);
    
   
    
     [y, ty] = resample(x, tx, Fs);
    
   
    
     [h,w]=freqz(x);
    
   
    
     [h1,w1]=freqz(y);
    
   
    
     subplot(211);
    
   
    
     plot(w(1:512),abs(h(1:512)));
    
   
    
     subplot(212);
    
   
    
     plot(w1(1:512),abs(h1(1:512)));
    
   
     
   
    
     5
    
    
     连续时间傅里叶变换与离散时间傅里叶变换
    
   
    
     连续时间傅里叶变换
    
   
    
     dt = 0.00005;
    
   
    
     t = -0.005:dt:0.005;
    
   
    
     A=100;a=50*sqrt(2)*pi;b=a;
    
   
    
     xa=exp(-a*t).*sin(b*t);
    
   
%contunites_time fourier transform
    
     Wmax = 2*pi* 2000;
    
   
    
     K = 500;
    
   
    
     k = 0: 1: K;
    
   
    
     W = k*Wmax/K;
    
   
    
     Xa = xa * exp(-1i * t’*W)*dt;
    
   
    
     Xa = real(Xa);
    
   
    
     W = [-fliplr(W),W(2:501)];
    
   
    
     Xa = [fliplr(Xa),Xa(2:501)];
    
   
    
     subplot(2,1,1);
    
   
    
     plot(t*10000,xa);grid
    
   
    
     title(
    
    
     ‘analog signal’
    
    
     );
    
   
    
     xlabel(
    
    
     ‘t  (ms)’
    
    
     );
    
   
    
     ylabel(
    
    
     ‘xa(t)’
    
    
     );
    
   
    
     subplot(2,1,2);
    
   
    
     plot(W/(2*pi*1000),Xa*1000);grid
    
   
    
     title(
    
    
     ‘continues_time fourier transform’
    
    
     );
    
   
    
     xlabel(
    
    
     ‘f   (Khz)’
    
    
     );
    
   
    
     ylabel(
    
    
     ‘Xa(jw) * 1000’
    
    
     );
    
   
     
   
    
     离散时间傅里叶变换
    
   
    
     dt = 0.00005;
    
   
    
     t = -0.005:dt:0.005;
    
   
    
     A=100;a=50*sqrt(2)*pi;b=a;
    
   
    
     xa=exp(-a*t).*sin(b*t);
    
   
    
     ts = 0.0002;
    
   
    
     n = -40:1:40;
    
   
    
     x=exp(-a*n*ts).*sin(b*n*ts);
    
   
    
     K = 500;
    
   
    
     k = 0:1:K;
    
   
    
     w = 2*pi*k/K;
    
   
    
     X = x*exp(-1i *n’*w);
    
   
    
     X= real(X);
    
   
    
     w = [-fliplr(w),w(2:K+1)];
    
   
    
     X = [fliplr(X),X(2:K+1)];
    
   
    
     subplot(2,1,1);
    
   
    
     plot(t*1000,xa);
    
   
    
     title(
    
    
     ‘discrete signal’
    
    
     );
    
   
    
     xlabel(
    
    
     ‘t in msec’
    
    
     );
    
   
    
     ylabel(
    
    
     ‘x(n)’
    
    
     );
    
   
    
     hold
    
    
     on
    
   
    
     stem(n*ts*1000,x);
    
   
    
     gtext(
    
    
     ‘ts = 0.2msec’
    
    
     ); hold
    
    
     off
    
   
    
     subplot(2,1,2);
    
   
    
     plot(w/pi, X);
    
   
    
     title(
    
    
     ‘discrete_time fourier transform’
    
    
     );
    
   
    
     xlabel(
    
    
     ‘frequence in pi unit’
    
    
     );
    
   
    
     ylabel(
    
    
     ‘X(w)’
    
    
     );
    
   
     
   
6.信号采样与重构
     
   
    
     clear
    
    
     all
    
    
     ;
    
   
    
     wm=1;
    
   
    
     wc=wm;
    
   
    
     Ts=pi/wm;
    
   
    
     ws=2*pi/Ts;
    
   
    
     n=-100:100;
    
   
    
     nTs=n*Ts;
    
   
    
     f=sinc(nTs/pi);
    
   
    
     t=-20:0.005:20;
    
   
    
     fa=f*Ts*wc/pi*sinc((wc/pi)*(ones(length(nTs),1)*t-nTs’*ones(1,length(t))));
    
   
    
     error=abs(fa-sinc(t/pi));
    
   
    
     t1=-15:0.5:15;
    
   
    
     f1=sinc(t1/pi);
    
   
    
     subplot(3,1,1);
    
   
    
     stem(t1,f1);
    
   
    
     xlabel(
    
    
     ‘kTs’
    
    
     ); ylabel(
    
    
     ‘f(kTs)’
    
    
     );
    
   
    
     title(‘sa(t)=sinc(t/pi)
    
    
     临界采样信号
    
    
     ‘);
    
   
    
     subplot(3,1,2);
    
   
    
     plot(t,fa);
    
   
    
     xlabel(
    
    
     ‘t’
    
    
     ); ylabel(
    
    
     ‘fa(t)’
    
    
     );
    
   
    
     title(‘
    
    
     由
    
    
     sa(t)=sinc(t/pi)
    
    
     的临界采样信号重构
    
    
     sa(t)’);
    
   
    
     grid
    
    
     on
    
    
     ;
    
   
    
     subplot(3,1,3);
    
   
    
     plot(t,error);
    
   
    
     xlabel(
    
    
     ‘t’
    
    
     ); ylabel(
    
    
     ‘error(t)’
    
    
     );
    
   
    
     title(‘
    
    
     临界采样信号与原信号的误差
    
    
     error(t)’);
    
   
     
   
    
     clear
    
    
     all
    
    
     ;
    
   
    
     wm=1;
    
   
    
     wc=wm;
    
   
    
     Ts=pi/wm;
    
   
    
     ws=4*2*pi/Ts;
    
   
    
     n=-100:100;
    
   
    
     nTs=n*Ts;
    
   
    
     f=sinc(nTs/pi);
    
   
    
     t=-20:0.005:20;
    
   
    
     fa=f*Ts*wc/pi*sinc((wc/pi)*(ones(length(nTs),1)*t-nTs’*ones(1,length(t))));
    
   
    
     error=abs(fa-sinc(t/pi));
    
   
    
     t1=-15:0.5:15;
    
   
    
     f1=sinc(t1/pi);
    
   
    
     subplot(3,1,1);
    
   
    
     stem(t1,f1);
    
   
    
     xlabel(
    
    
     ‘kTs’
    
    
     ); ylabel(
    
    
     ‘f(kTs)’
    
    
     );
    
   
    
     title(‘
    
    
     临界采样信号与原信号的误差
    
    
     error(t)’);
    
   
    
     subplot(3,1,2);
    
   
    
     plot(t,fa);
    
   
    
     xlabel(
    
    
     ‘t’
    
    
     ); ylabel(
    
    
     ‘fa(t)’
    
    
     );
    
   
    
     title(‘
    
    
     由
    
    
     sa(t)=sinc(t/pi)
    
    
     的过采样信号重构
    
    
     sa(t)’);
    
   
    
     grid
    
    
     on
    
    
     ;
    
   
    
     subplot(3,1,3);
    
   
    
     plot(t,error);
    
   
    
     xlabel(
    
    
     ‘t’
    
    
     ); ylabel(
    
    
     ‘error(t)’
    
    
     );
    
   
    
     title(‘
    
    
     过采样信号与原信号的误差
    
    
     error(t)’);
    
   
     
   
    
     clear
    
    
     all
    
    
     ;
    
   
    
     wm=1;
    
   
    
     wc=wm;
    
   
    
     Ts=3*pi/wm;
    
   
    
     ws=pi/Ts;
    
   
    
     n=-100:100;
    
   
    
     nTs=n*Ts;
    
   
    
     f=sinc(nTs/pi);
    
   
    
     t=-20:0.005:20;
    
   
    
     fa=f*Ts*wc/pi*sinc((wc/pi)*(ones(length(nTs),1)*t-nTs’*ones(1,length(t))));
    
   
    
     error=abs(fa-sinc(t/pi));
    
   
    
     t1=-15:0.5:15;
    
   
    
     f1=sinc(t1/pi);
    
   
    
     subplot(3,1,1);
    
   
    
     stem(t1,f1);
    
   
    
     xlabel(
    
    
     ‘kTs’
    
    
     ); ylabel(
    
    
     ‘f(kTs)’
    
    
     );
    
   
    
     title(‘sa(t)=sinc(t/pi)
    
    
     欠采样信号
    
    
     ‘);
    
   
    
     subplot(3,1,2);
    
   
    
     plot(t,fa);
    
   
    
     xlabel(
    
    
     ‘t’
    
    
     ); ylabel(
    
    
     ‘fa(t)’
    
    
     );
    
   
    
     title(‘
    
    
     由
    
    
     sa(t)=sinc(t/pi)
    
    
     的欠采样信号重构
    
    
     sa(t)’);
    
   
    
     grid
    
    
     on
    
    
     ;
    
   
    
     subplot(3,1,3);
    
   
    
     plot(t,error);
    
   
    
     xlabel(
    
    
     ‘t’
    
    
     ); ylabel(
    
    
     ‘error(t)’
    
    
     );
    
   
    
     title(‘
    
    
     欠采样信号与原信号的误差
    
    
     error(t)’);
    
   
     
   
 
