系列文章目录

数字信号处理(DSP:Digital Signal Process)是电子通信领域非常重要的研究方向,博主汇总了数字信号处理(DSP)中常用的经典案例分析,主要基于算法分析、MATLAB程序实现、信号图像显示,对数字信号处理的实际应用进行详细分析。

第一篇 常见离散信号的MATLAB产生和图形显示
常见离散信号的MATLAB产生和图形显示

第二篇 零极点分布对系统频率响应的影响
零极点分布对系统频率响应的影响

第三篇 基于matlab实现信号的线性卷积与循环卷积
基于matlab实现信号的线性卷积与循环卷积

第四篇 基于matlab和FFT算法实现信号频谱分析
基于matlab和FFT算法实现信号频谱分析



一、实验目的

  1. 进一步加深DFT算法原理和基本性质的理解(因为FFT只是DFT的一种快速算法,所以FFT的运算结果必然满足DFT的性质)

  2. 熟悉FFT算法原理及子程序的应用。

  3. 掌握用FFT对连续信号和时域离散信号进行频谱分析的基本方法。了解可能出现的分析误差和原因,以便在实际中正确应用FFT。


二、实验原理

  1. 如果用FFT对模拟信号进行谱分析,首先要把模拟信号转换成数字信号,转换时要求知道模拟信号的最高截止频率,以便选择满足采样定理的采样频率。一般选择采样频率是模拟信号中最高频率的3~4倍。另外要选择对模拟信号的观测时间,如果采样频率和观测时间确定,则采样点数也确定了。这里观测时间和对模拟信号进行谱分析的分辨率有关,最小的观测时间和分辨率成倒数关系。要求选择的采样点数和观测时间大于它的最小值。
  2. 用FFT作谱分析时,要求做FFT的点数服从2的整数幂,这一点在上面选择采样点数时可以考虑满足,即使满足不了,可以通过在序列尾部加0完成。
  3. 如果要进行谱分析的模拟信号是周期信号,最好选择观测时间是信号周期的整数倍。如果不知道信号的周期,要尽量选择观测时间长一些,以减少截断效应的影响。
  4. 用FFT对模拟信号作谱分析是一种近似的谱分析。首先一般模拟信号(除周期信号外)的频谱是连续频谱,而用FFT作谱分析得到的是数字谱,因此应该取FFT的点数多一些,用它的包络作为模拟信号的近似谱。另外,如果模拟信号不是严格的带限信号,会因为频谱混叠现象引起谱分析的误差,这种情况下可以预先将模拟信号进行预滤,或者尽量将采样频率取高一些。
  5. 一般频率混叠发生在折叠频率附近,分析时要注意因频率混叠引起的误差。最后要注意一般模拟信号是无限长的,分析时要截断,截断的长度和分辨率有关,但也要尽量取长一些,取得太短因截断引起的误差会很大。举一个极端的例子,一个周期性正弦波,如果所取观察时间太短,例如取小于一个周期,它的波形和正弦波相差太大,肯定误差很大,但如果取得长一些,即使不是周期的整倍数,这种截断效应也会小一些。

三、实验步骤及内容

  1. 复习DFT的定义、性质和用DFT作谱分析的有关内容。

  2. 复习FFT算法原理与编程思想。

  3. 编制信号产生程序,产生以下典型信号供谱分析用:
    在这里插入图片描述
    在这里插入图片描述

  4. 分别以变换区间N = 8 ,16 ,32 ,对x1(n)进行FFT,画出相应的幅频特性曲线。

  5. 分别以变换区间N = 8 ,16,对x2(n)、x3(n)进行FFT,画出相应的幅频特性曲线。

  6. 分别以变换区间 N = 4 ,8 ,16 ,对x4(n)进行FFT,画出相应的幅频特性曲线。

  7. 分别对模拟信号x5(t)、x6(t)选择采样频率和采样点数。

  8. 分别将模拟信号x5(t)、x6(t)转换成序列,用 x5(t)、x6(t) 表示,再分别对它们进行FFT,并画出相应的幅频特性曲线。

四、实验代码及图像结果

  1. 分别以变换区间N = 8 ,16 ,32 ,对x1(n)进行FFT
    matlab程序:
x1=[1,1,1,1];           
x2=[1,2,3,4,4,3,2,1];  
x3=[4,3,2,1,1,2,3,4]; 
figure; 
subplot(3,1,1);   stem(abs(fft(x1,8)));    title('x1,  N=8');
subplot(3,1,2);   stem(abs(fft(x1,16)));   title('X1,  N=16');  
subplot(3,1,3);   stem(abs(fft(x1,32)));   title('X1,  N=32');
figure; 
subplot(2,2,1);   stem(abs(fft(x2,8)));    title('X2(k),  N=8');
subplot(2,2,3);   stem(abs(fft(x3,8)));     title('X3(k),  N=8');
subplot(2,2,2);   stem(abs(fft(x2,16)));    title('X2(k),  N=16');
subplot(2,2,4);   stem(abs(fft(x3,16)));    title('X3(k),  N=16');



相应的幅频特性曲线:
在这里插入图片描述
在这里插入图片描述

  1. 分别以变换区间 N = 4 ,8 ,16 ,对x4(n)进行FFT
    matlab程序:
n4=0:3;   
x4=cos(n4*pi/4);
figure; 
subplot(3,1,1);   stem(abs(fft(x4,4)));  title('X4(k),N=4');
n4=0:7;   
x4=cos(n4*pi/4);
subplot(3,1,2);   stem(abs(fft(x4,8)));   title('X4(k),  N=8');  
n4=0:15;   
x4=cos(n4*pi/4);
subplot(3,1,3);   stem(abs(fft(x4,16)));   title('X4(k),  N=16');

相应的幅频特性曲线:
在这里插入图片描述

  1. 分别对模拟信号x5(t)、x6(t)选择采样频率和采样点数
    matlab程序:
f=100; fs=400; 
tp=0.5/f; N1=tp*fs;  t=(0:N1-1)/fs;  x51=sin(2*pi*f*t+pi/8); 
tp=1/f;   N2=tp*fs;  t=(0:N2-1)/fs;  x52=sin(2*pi*f*t+pi/8);
tp=2/f;   N3=tp*fs;  t=(0:N3-1)/fs;  x53=sin(2*pi*f*t+pi/8); 
figure; 
subplot(2,3,1); stem(x51); title('x5,  Tp=0.5T');  
n=0:N1-1;
subplot(2,3,4);stem(fs*n/N1,abs(fft(x51,N1))); title('x5 FFT,  Tp=0.5T');
subplot(2,3,2); stem(x52); title('x5,  Tp=T'); 
n=0:N2-1;
subplot(2,3,5); stem(fs*n/N2,abs(fft(x52,N2))); title('x5 FFT,  Tp=T');
subplot(2,3,3); stem(x53); title('x5,  Tp=2T');  
n=0:N3-1;
subplot(236); stem(fs*n/N3,abs(fft(x53,N3))); title('x5  FFT,  Tp=2T');

相应的幅频特性曲线:
在这里插入图片描述

  1. 分别将模拟信号x5(t)、x6(t)转换成序列,用 x5(t)、x6(t) 表示,再分别对它们进行FFT
    matlab程序:
fs=64;
t=(0:15)/fs;  x61=cos(8*pi*t)+ cos(16*pi*t)+ cos(20*pi*t);
t=(0:31)/fs;  x62=cos(8*pi*t)+ cos(16*pi*t)+ cos(20*pi*t);
t=(0:63)/fs;  x63=cos(8*pi*t)+ cos(16*pi*t)+ cos(20*pi*t); 
figure; 
subplot(2,3,1); stem(x61); title('x6,  N=16'); 
N1=16;  n=0:N1-1;
subplot(2,3,4);stem(fs*n/N1,abs(fft(x61,N1))); title('x6  FFT,  N=16');
subplot(2,3,2); stem(x62); title('x6,  N=32');
N2=32;  n=0:N2-1;
subplot(2,3,5); stem(fs*n/N2,abs(fft(x62,N2))); title('x6 FFT,  N=32');
subplot(2,3,3); stem(x63); title('x6,  N=64');
N3=64;  n=0:N3-1;
subplot(2,3,6); stem(fs*n/N3,abs(fft(x63,N3))); title('x6  FFT,  N=64');

相应的幅频特性曲线:
在这里插入图片描述

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐