Advertisement

基于MATLAB的数字信号处理(2) 时域采样和频域采样

阅读量:

文章目录

  • 一、实验目的

  • 二、实验原理与方法

    • 1. 时域采样定理的要点
    • 2. 频域采样定理的要点
  • 三、实验内容及步骤

    • 1. 时域采样理论的验证
    • 2. 频域采样理论的验证
  • 四、实验总结

一、实验目的

时域采样理论与频域采样理论是数字信号处理中的重要理论。 要求掌握模拟信号采样前后频谱的变化, 以及如何选择采样频率才能使采样后的信号不丢失信息;要求掌握频域采样会引起时域周期化的概念,以及频率域采样定理及其对频域采样点数选择的指导作用。

二、实验原理与方法

1. 时域采样定理的要点

2. 频域采样定理的要点

三、实验内容及步骤

1. 时域采样理论的验证

MATLAB程序如下:

复制代码
    %时域采样验证程序 用矩阵法计算DFT test_03.m
    clear;
    
    A=444.128;a=50*sqrt(2)*pi;omega=50*sqrt(2)*pi;
    Fs1=1000;Fs2=300;Fs3=200;Tp=50*0.001;   %观测时间:50ms
    %采样间隔
    T1=1/Fs1;T2=1/Fs2;T3=1/Fs3;
    
    %时域等间隔理想采样
    n1=0:1:Tp/T1;     %采样点个数
    x1=A*exp(-a*n1*T1).*sin(omega*n1*T1);
    subplot(321);
    stem(n1,x1,'.','g');
    xlabel('n');ylabel('xa(nT)');
    title('Fs=1000Hz');
    axis([0 64 -20 170]);
    
    n2=0:1:Tp/T2;     %采样点个数
    x2=A*exp(-a*n2*T2).*sin(omega*n2*T2);
    subplot(323);
    stem(n2,x2,'.','r');
    xlabel('n');ylabel('xa(nT)');
    title('Fs=300Hz');
    axis([0 15 -20 170]);
    
    n3=0:1:Tp/T3;     %采样点个数
    x3=A*exp(-a*n3*T3).*sin(omega*n3*T3);
    subplot(325);
    stem(n3,x3,'.','m');
    xlabel('n');ylabel('xa(nT)');
    title('Fs=200Hz');
    axis([0 10 -20 170]);
    
    %DFT矩阵
    wN=dftmtx(64);
    %补零到64点
    x1=[x1,zeros(1,64-length(x1))];
    x2=[x2,zeros(1,64-length(x2))];
    x3=[x3,zeros(1,64-length(x3))];
    %利用矩阵法求DFT
    X1=(wN*x1')';
    X2=(wN*x2')';
    X3=(wN*x3')';
    %求幅度
    X_A1=abs(X1);
    X_A2=abs(X2);
    X_A3=abs(X3);
    %间隔
    n=1:Fs1/64:Fs1;
    subplot(322);
    plot(n,X_A1*T1,'g');
    axis([0,1000,0,1.2]);
    xlabel('f/Hz');ylabel('幅度')
    title('T*FT[xa(nT), Fs=1000Hz');
    
    n=1:Fs2/64:Fs2;
    subplot(324);
    plot(n,X_A2*T2,'r');
    axis([0,300,0,1.2]);
    xlabel('f/Hz');ylabel('幅度')
    title('T*FT[xa(nT), Fs=300Hz');
    
    n=1:Fs3/64:Fs3;
    subplot(326);
    plot(n,X_A3*T3,'m');
    axis([0,200,0,1.2]);
    xlabel('f/Hz');ylabel('幅度');
    title('T*FT[xa(nT), Fs=200Hz');
复制代码
    %时域采样验证程序 用FFT计算DFT test_04.m
    clear;
    
    %初始化参数
    A=444.128;a=50*sqrt(2)*pi;omega=50*sqrt(2)*pi;
    Fs1=1000;Fs2=300;Fs3=200;Tp=50*0.001;%50ms
    %采样间隔
    T1=1/Fs1;T2=1/Fs2;T3=1/Fs3;
    
    %时域等间隔理想采样
    n1=0:1:Tp/T1;     %采样点个数  Fs=1000Hz
    x1=A*exp(-a*n1*T1).*sin(omega*n1*T1);
    subplot(321);
    stem(n1,x1,'.','g');
    xlabel('n');ylabel('xa(nT)');
    title('(a) Fs=1000Hz');
    axis([0 50 -20 170]);
    
    n2=0:1:Tp/T2;     %采样点个数  Fs=300Hz
    x2=A*exp(-a*n2*T2).*sin(omega*n2*T2);
    subplot(323);
    stem(n2,x2,'.','r');
    xlabel('n');ylabel('xa(nT)');
    title('(b) Fs=300Hz');
    axis([0 15 -20 170]);
    
    n3=0:1:Tp/T3;     %采样点个数  Fs=200Hz
    x3=A*exp(-a*n3*T3).*sin(omega*n3*T3);
    subplot(325);
    stem(n3,x3,'.','m');
    xlabel('n');ylabel('xa(nT)');
    title('(c) Fs=200Hz');
    axis([0 10 -20 170]);
    
    %补零到64点
    x1=[x1,zeros(1,64-length(x1))];
    x2=[x2,zeros(1,64-length(x2))];
    x3=[x3,zeros(1,64-length(x3))];
    %利用FFT求DTF
    X1=fft(x1,64);
    X2=fft(x2,64);
    X3=fft(x3,64);
    %求幅度 取绝对值
    X_A1=abs(X1);
    X_A2=abs(X2);
    X_A3=abs(X3);
    %取合适间隔  plot绘图
    n=1:Fs1/64:Fs1;
    subplot(322);
    plot(n,X_A1*T1,'g');
    axis([0,1000,0,1.2]);
    xlabel('f/Hz');ylabel('幅度')
    title('(a) T*FT[xa(nT), Fs=1000Hz');
    
    n=1:Fs2/64:Fs2;
    subplot(324);
    plot(n,X_A2*T2,'r');
    axis([0,300,0,1.2]);
    xlabel('f/Hz');ylabel('幅度')
    title('(b) T*FT[xa(nT), Fs=300Hz');
    
    n=1:Fs3/64:Fs3;
    subplot(326);
    plot(n,X_A3*T3,'m');
    axis([0,200,0,1.2]);
    xlabel('f/Hz');ylabel('幅度');
    title('(c) T*FT[xa(nT), Fs=200Hz');

运行效果如下:

时域采样定理的图验证了时域采样理论和时域采样定理,采样序列的频谱的确是以采样频率为周期对模拟信号频谱的周期延拓。当采样频率为 1000Hz 时频谱混叠很小;当采样频率为 300Hz 时,在折叠频率 150Hz 附近频谱混叠很严重;当采样频率为 200Hz 时,在折叠频率100Hz附近频谱混叠更严重。

2. 频域采样理论的验证

MATLAB程序如下:

复制代码
    %频域采样验证程序 test_05.m
    clear;
    
    %初始化参数
    M=27;N=32;
    n=0:M-1;   %根据表达式 0-26 共27个点
    
    %生成三角波序列x(n)
    xa=1:floor(M/2)+1;
    xb=ceil(M/2)-1:-1:1;
    xn=[xa,xb];
    
    %做FFT变换
    Xk=fft(xn,1024);    %1024点FFT用于近似序列FT[x(n)]
    X32k=fft(xn,32);
    x32n=ifft(X32k);
    X16k=X32k(1:2:N);
    x16n=ifft(X16k,N/2);
    %X16k=fft(xn,16);
    %x16n=ifft(X16k);
    
    %作图
    subplot(3,2,1);
    k=0:1023;kk=2*k/1024;
    plot(kk,abs(Xk),'g');xlabel('w/\pi');ylabel('|X(e^j^\omega)|');
    title('(a) FT[x(n)]');
    axis([0 1 0 200]);
    
    subplot(3,2,2);
    stem(n,xn,'.','g'); %这样会变成实心点
    xlabel('n');ylabel('x(n)');
    title('(b) 三角波序列x(n)');
    axis([0 32 0 20]);
    
    %16点频域采样
    subplot(3,2,3);
    k=0:15;
    stem(k,abs(X16k),'.','r');xlabel('k');ylabel('|X_1_6(k)|');
    title('(c) 16点频域采样');
    axis([0,8,0,200]);
    
    subplot(3,2,4);
    stem(k,x16n,'.','r');xlabel('n');ylabel('x_1_6(n)');
    axis([0,40,0,20]);%控制图像坐标范围
    title('(d) 16点IDFT[X16(k)]');
    
    %32点频域采样
    subplot(3,2,5);
    k=0:31;
    stem(k,abs(X32k),'.','m');xlabel('k');ylabel('|X_3_2(k)|');
    title('(e) 32点频域采样');
    axis([0 16 0 200]);
    
    subplot(3,2,6);
    stem(k,x32n,'.','m');xlabel('n');ylabel('x_3_2(n)');
    title('(f) 32点IDFT[X32(k)]');
    axis([0 32 0 20]);

运行效果如下:

频域采样定理的图验证了频域采样理论和频域采样定理。对信号 x(n) 的频谱函数 X(ejω) 在 [0,2π] 上等间隔采样 N=16 时, N点IDFT[XNk]得到的序列正是原序列 x(n) 以 16 为周期进行周期延拓后的主值区序列,频域采样点数 N 必须大于等于时域离散信号的长度 M (即N≥M),才能使时域不产生混叠。

四、实验总结

  • 时域采样定理的图验证了时域采样理论和时域采样定理,采样序列的频谱的确是以采样频率为周期对模拟信号频谱的周期延拓。当采样频率为 1000Hz 时频谱混叠很小;当采样频率为 300Hz 时,在折叠频率 150Hz 附近频谱混叠很严重;当采样频率为 200Hz 时,在折叠频率100Hz附近频谱混叠更严重。
  • 频域采样定理的图验证了频域采样理论和频域采样定理。对信号 x(n) 的频谱函数 X(ejω) 在 [0,2π] 上等间隔采样 N=16 时, N点IDFT[XNk]得到的序列正是原序列 x(n) 以 16 为周期进行周期延拓后的主值区序列,频域采样点数 N 必须大于等于时域离散信号的长度 M (即N≥M),才能使时域不产生混叠。
  • 对比上面叙述的时域采样原理和频域采样原理, 得到一个有用的结论, 即两个采样理论具有对偶性: “时域采样时频谱周期延拓, 频域采样时域信号周期延拓”。

全部评论 (0)

还没有任何评论哟~