Advertisement

数字信号处理_实验一_信号、系统及系统响应

阅读量:

文章目录

    • 实验内容
    • 实验要求
    • 代码实现
      • 基本离散信号
      • 系统响应
      • DTFT
      • 采样定理

实验内容

  • 离散信号的分析

离散时间非周期信号x(n)生成,时域观察,频域分析

  • 系统响应分析

生成实验用的输入序列x(n)和系统单位冲激响应序列h(n)、时域离散信号、系统和系统响应分析、卷积定理的验证


实验要求

  1. 附上所有信号序列,系统单位冲激响应及响应序列的时域和频域特性曲线,并对结果进行分析和解释
  2. 计算线性卷积、z变换和系统函数
  3. 编程计算DTFT
  4. 演示采样定理,即采样频率大于信号最高频率两倍才能避免频域混叠现象

代码实现

基本离散信号

  • 冲激信号
复制代码
    n=-5:5;
    x=n==0;%n=0时x=1
    stem(n,x,'filled');
    axis([-5 5 0 1.1*max(x)]);
    xlabel('time');ylabel('range')
    
    
      
      
      
      
      
    
在这里插入图片描述

  • 阶跃信号
复制代码
    n=-5:5;
    x=n>=0;%n>=0时x=1
    stem(n,x,'filled');
    axis([-5 5 0 1.1*max(x)]);
    xlabel('time');ylabel('range')
    
    
      
      
      
      
      
    
在这里插入图片描述

  • 实指数序列
复制代码
    function [x,n]=realindex(ns,nf,a)
    % a实指数的底数,ns序列起点,nf序列终点
    % x实指数序列的值,n序列位置
    n=ns:nf;
    x=a.^n;
    stem(n,x,'filled');
    if(a<0)
    axis([ns nf -1.1*max(x) 1.1*max(x)]);
    elseif(a>0)
    axis([ns nf 0 1.1*max(x)]);
    end
    
    
    ->
    subplot(1,2,1)
    [x,n]=realindex(-5,5,2);
    subplot(1,2,2)
    [x,n]=realindex(-5,5,-2);
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
在这里插入图片描述

  • 虚指数序列
复制代码
    function [x,n]=complexindex(ns,nf,w,q)
    % ns序列起点,nf序列终点
    % x复指数序列的值,n序列位置
    n=ns:nf;
    x=exp(1i*w+q).^n;
    xr=real(x);%实部
    xi=imag(x);%虚部
    xa=abs(x);%模
    xn=angle(x);%相角
    subplot(2,2,1),stem(n,xr,'filled'),title('实部');
    subplot(2,2,2),stem(n,xi,'filled'),title('虚部');
    subplot(2,2,3),stem(n,xa,'filled'),title('模');
    subplot(2,2,4),stem(n,xn,'filled'),title('相角');
    end
    
    
    >>[x,n]=complexindex(-5,5,0.5,-0.2)
    
    x =
    
      列 1 至 3
    
      -2.1777 - 1.6268i  -0.9262 - 2.0237i   0.1289 - 1.8176i
    
      列 4 至 6
    
       0.8060 - 1.2553i   1.0719 - 0.5856i   1.0000 + 0.0000i
    
      列 7 至 9
    
       0.7185 + 0.3925i   0.3622 + 0.5641i   0.0388 + 0.5474i
    
      列 10 至 11
    
      -0.1870 + 0.4086i  -0.2947 + 0.2202i
    
    
    n =
    
    -5    -4    -3    -2    -1     0     1     2     3     4     5
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
在这里插入图片描述

系统响应

栗子-01

系统的差分方程:
y(n-2)+2y(n-1)+77y(n)=x(n)

设一个系统输入
x(n)=10(0.8)^n~~~(-5\leq n\leq 5)
求解系统的单位冲激响应h(n)和系统对输入x(n)的响应y(n)

解:

线性时不变系统的的输入x(n)输出y(n)满足y(n)=x(n)*h(n)

复制代码
    function [y,ny]=conv_m(x,nx,h,nh)
    nys=nx(1)+nh(1);
    nyz=nx(length(x))+nh(length(h));
    ny=nys:nyz;
    y=conv(x,h);
    end
    
    
      
      
      
      
      
      
    
复制代码
    a=[1,2,77];b=[1];
    n=-5:5;
    x=n==0;
    h=filter(b,a,x);
    subplot(2,1,1),stem(n,h,'filled');title('冲激响应')
    xlabel('n');ylabel('h(n)')
    xn=10*(0.8).^n;
    [y,ny]=conv_m(xn,n,h,n);
    subplot(2,1,2),stem(ny,y,'filled'),title('输入响应');
    xlabel('n');ylabel('y(n)');
    
    
      
      
      
      
      
      
      
      
      
      
    
在这里插入图片描述

  • z变换

还是栗子-01式子(1)

H(z)=\frac{y(z)}{x(z)}=\frac{1}{77+2z^{-1}+z^{-2}}

复制代码
    top=[1,0];bottom=[77,2,1];
    [r,p,c]=residuez(top,bottom);%留数,极点,直接项
    disp('r=');disp(r');
    disp('p=');disp(p');
    disp('c=');disp(c');
    
    ->
    r=
       0.0065 - 0.0007i   0.0065 + 0.0007i
    
    p=
      -0.0130 - 0.1132i  -0.0130 + 0.1132i
    
    c=
    	[]
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

h(n)=[(0.065-0.0007i)(0.013+0.1132i)^n+(0.0065+0.0007i)(0.013-0.1132i)^n]u(n)


DTFT

以栗子-01中的输入信号x(n)=10(0.8)^n做离散时间信号的傅里叶变换
X(e^{j\omega})=DTFT(x(n))=\sum_{n=-\infty}^{\infty}x(n)e^{-j\omega n}

复制代码
    n=-5:5;
    xn=10*(0.8).^n;
    k=0:200;
    w=pi*k/200;
    nk=n'*k;%取样矩阵
    x_e=xn*(exp(-1j*pi/200)).^nk;
    magx=abs(x_e);%dtft的模
    angx=angle(x_e);%相位
    subplot(3,1,1),stem(n,xn),title('信号序列');
    subplot(3,1,2),plot(w/pi,magx),title('幅频特性');
    subplot(3,1,3),plot(w/pi,angx),title('相频特性');
    
    
      
      
      
      
      
      
      
      
      
      
      
    
在这里插入图片描述

采样定理

首先信号采样相当于原信号f(t)与抽取信号\delta_T(t)相乘,在周期N的整数倍点上的取样值等于原来的序列值,时域相乘相当于频域卷积
x_p(t)=x(t)p(t)=\sum_{k=-\infty}^{\infty}x(kT)\delta(t-kT)\\

复制代码
    t = -0.1:0.001:0.1;%该参数用于画原信号图形
    k = 0:200;%时域取样
    n = -999:0;%频域取样
    f = sin(2*pi*60*t)+cos(2*pi*25*t);%原函数, 由t的取值可得f有201个值
    s = exp(-j*2*pi/length(k));
    skn = s.^(k'*n);%代公式
    F = f*skn;%对原函数进行傅里叶变换
    subplot(2,1,1)
    plot(t, f);%画出采原函数序列图
    title('原信号');
    xlabel('时间t(s)');
    j = 1:length(F);
    subplot(2,1,2)
    plot(j,abs(F),'r')%画出序列的DFT图
    title('原信号的DFT图');
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
在这里插入图片描述
复制代码
    function Signal_Rebuilt(frequency)
    %需要输入采样频率frequency
    T= 1/frequency;%抽样周期
    gs = -0.1:T:0.1;
    fg = sin(2*pi*60*gs)+cos(2*pi*25*gs);
    figure(2)
    subplot(2,1,1)
    stem(gs, fg)
    title('采样信号');
    xlabel('时间t(s)');
    %绘制由采样信号重建的信号图
    y = -0.1:0.001:0.1;
    ln = -0.1/T:0.1/T;
    M=ones(length(ln),1)*y-ln'*T*ones(1,length(y));
    fs = fg*sinc(frequency*M);
    subplot(2,1,2)
    plot(y,fs,'r')
    title('重建信号');
    xlabel('时间t(s)');
    end
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
复制代码
    Signal_Rebuilt(100)
    
    
      
    
在这里插入图片描述
复制代码
    Signal_Rebuilt(400)
    
    
      
    
在这里插入图片描述
复制代码
    Signal_Rebuilt(600)
    
    
      
    
在这里插入图片描述

全部评论 (0)

还没有任何评论哟~