一、实验目的与要求
1.频谱分析的基本概念;
2.对常用信号进行频谱分析:正余弦信号、方波信号、锯齿波信号、矩形脉冲信号等;
3.应用FFT进行频谱分析,Matlab编程仿真。

二、实验设备与平台
实验设备要求每个学生一台电脑,运行环境为Matlab.

三、实验原理

  1. 周期信号的傅里叶级数;
  2. 能量信号的傅里叶变换;
  3. 在实际计算机系统中,用采样序列的离散傅立叶变换来近似模拟信号的傅里叶变换,并采用算法FFT(快速傅里叶变换)实现离散傅里叶变换,进行频谱分析。

四、实验内容与步骤
编写程序,解下列问题,然后把编写的程序代码和运行结果复制到题目后面的空白处,在实验结果后面写实验总结。

  1. 正余弦波的频谱分析 (1) 对时域信号画出波形图,并进行频谱分析。采样频率为500Hz,取=1024个数据点进行FFT。 实验代码:
1.  fs=500;
 N=1024;
 t=(0:N-1)1/fs;
 x=sin(2pi20t);
 subplot(2,1,1);plot(t,x);xlim([0 N/fs]);
 y=fft(x);
 subplot(2,1,2);plot((0:N-1)/N*fs,abs(y));

(2) 对时域信号画出波形图,并进行频谱分析。采样频率为500Hz,取=1024个数据点进行FFT。此外,请分析如下情况:

a) 如果取不同大小的值(比如N=256, 512, 2048,…),所得频谱图有何区别?

b) 若加入直流分量,,频谱图发生了什么变化?

实验代码:

fs=500;
 N=1024;
 t=(0:N-1)1/fs;
 x=2sin(2pi20t)+cos(2pi40t);
 subplot(2,1,1);plot(t,x);xlim([0 1/fs200]);
 y=fft(x);
 subplot(2,1,2);plot((0:N-1)/Nfs,abs(y));

JAVA 实现频谱分析 频谱分析怎么做_数字通信


a)

实验代码:

fs=500;
 N=256;
 t=(0:N-1)1/fs;
 x=2sin(2pi20t)+cos(2pi40t);
 subplot(4,2,1);plot(t,x);xlim([0 N/fs]);
 y=fft(x);
 subplot(4,2,2);plot((0:N-1)/N*fs,abs(y));
fs=500;
 N=512;
 t=(0:N-1)1/fs;
 x=2sin(2pi20t)+cos(2pi40t);
 subplot(4,2,3);plot(t,x);xlim([0 N/fs]);
 y=fft(x);
 subplot(4,2,4);plot((0:N-1)/N*fs,abs(y));fs=500;
 N=1024;
 t=(0:N-1)1/fs;
 x=2sin(2pi20t)+cos(2pi40t);
 subplot(4,2,5);plot(t,x);xlim([0 N/fs]);
 y=fft(x);
 subplot(4,2,6);plot((0:N-1)/N*fs,abs(y));fs=500;
 N=2048;
 t=(0:N-1)1/fs;
 x=2sin(2pi20t)+cos(2pi40t);
 subplot(4,2,7);plot(t,x);xlim([0 N/fs]);
 y=fft(x);
 subplot(4,2,8);plot((0:N-1)/N*fs,abs(y));

JAVA 实现频谱分析 频谱分析怎么做_数字通信_02

频谱图的波峰随着N的增大而增大

B)

实验代码:

未加直流分量:

JAVA 实现频谱分析 频谱分析怎么做_采样频率_03


加上直流分量:

JAVA 实现频谱分析 频谱分析怎么做_JAVA 实现频谱分析_04


波形图上移0.5

  1. 周期性方波的频谱分析 对信号画出波形图,并进行频谱分析。采样频率为500Hz,取=1024个数据点进行FFT。 实验代码:
2.  fs=500;
 N=1024;
 t=(0:N-1)1/fs;
 x=square(2pi25t);
 subplot(2,1,1);plot(t,x);xlim([0 1/fs200]);ylim([-2,2]);
 y=fft(x);
 subplot(2,1,2);plot((0:N-1)/Nfs,abs(y));

JAVA 实现频谱分析 频谱分析怎么做_matlab_05

fs=500;
 N=1024;
 t=(0:N-1)1/fs;
 x=sawtooth(2pi25t);
 subplot(2,1,1);plot(t,x);xlim([0 1/fs200]);ylim([-2,2]);
 y=fft(x);
 subplot(2,1,2);plot((0:N-1)/Nfs,abs(y));
fs=500;
 N=1024;
 t=(0:N-1)1/fs;
 x=sawtooth(2pi25t,0.5);
 subplot(2,1,1);plot(t,x);xlim([0 1/fs200]);ylim([-2,2]);
 y=fft(x);
 subplot(2,1,2);plot((0:N-1)/Nfs,abs(y));
  1. 周期性锯齿波、三角波的频谱分析
    (1) 对锯齿波信号画出波形图,并进行频谱分析。采样频率为500Hz,取=1024个数据点进行FFT。
    实验代码:
  2. JAVA 实现频谱分析 频谱分析怎么做_matlab_06

  3. (2) 对三角波信号画出其波形图和频谱图,并进行分析。采样频率为500Hz,取=1024个数据点进行FFT。
    实验代码:
  4. JAVA 实现频谱分析 频谱分析怎么做_频谱分析_07

fs=500;
 N=length(t);
 t=-1.5:1/fs:1.5;
 x=rectpuls(t,0.2);
 subplot(2,1,1);plot(x);ylim([0,2]);
 y=fft(x);
 subplot(2,1,2);plot((0:N-1)/N*fs,abs(y));
  1. 矩形方波的频谱分析
    对矩形脉冲信号,用rectpuls函数画出其时域波形,并进行频谱分析,时域波形宽度自定,采样频率为500Hz, 取N=1024个数据点进行FFT.
    实验代码:

  2. JAVA 实现频谱分析 频谱分析怎么做_频谱分析_08