一、谱分析概念

信号的谱分析就是计算信号的频谱(信号的傅里叶变换),通过信号研究分析信号特性。信号频谱是连续的,不能用数字信号处理方法计算,按频域采样定理,序列的DFT完整反映了频谱信息,所以可以通过DFT进行谱分析。

二 DFT对离散序列进行谱分析

2.1 非周期序列进行谱分析

傅里叶变换定义:

X(ejw)=FT[x(n)]=n=0N1x(n)ejwnX(e^{jw}) = FT[x(n)]=\sum_{n=0}^{N-1}x(n)e^{-jwn}

DFT定义:

X(k)=DFT[x(n)]=n=0N1x(n)ej2πNkn(K=0,1,...,N1)X(k)=DFT[x(n)]=\sum_{n=0}^{N-1}x(n)e^{-j\frac{2\pi}{N}kn}(K=0,1,...,N-1)

有限长序列x(n)x(n)的N点离散傅里叶变换X(k)X(k)x(n)x(n)的傅里叶变换X(ejw)X(e^{jw})在一个周期上的N点等间隔采样值,DFT满足频域采样定理。由频域采样定理可知,X(k)X(k)包含了频谱X(ejw)X(e^{jw})的全部信息,因此,求x(n)x(n)的DFT就可以分析它的频谱了。即通过DFT进行谱分析。

2.2 周期序列进行谱分析

以周期为N的周期序列x(n)x(n)进行DFSDFS,以所求出的DFSDFS系数作为各谐波分量的幅度形成其频谱函数:

X(ejw)=FT[x(n)]=2πNk=X(k)δ(w2πNk)X(e^{jw})=FT[x(n)]=\frac{2\pi}{N}\sum_{k=-\infty}^{\infty}X(k)\delta(w-\frac{2\pi}{N}k)

其中X(k)=DFT[x(n)]=n=0N1x(n)ej2πNknX(k)=DFT[x(n)]=\sum_{n=0}^{N-1}x(n)e^{-j\frac{2\pi}{N}kn}。截取x(n)x(n)的整数个周期做DFTDFT,也可以获得x(n)x(n)频谱结构。截取M等于x(n)x(n)的整数个周期,即M=mNM=mN,m为正整数,则:

XM(k)={mX(km)km=整数0km整数X_M(k)=\begin{cases} mX(\frac{k}{m}) & \frac{k}{m}=整数\\ 0 & \frac{k}{m} \neq 整数 \end{cases}

2.3 连续信号进行谱分析

对连续信号Xa(t)X_a(t),为了利用DFT分析其频谱,需要将其离散化,若信号持续时间无限长,还需要对它进行截短近似。所以从严格意义上讲用DFT对信号进行谱分析,都是某种意义上的近似。

Xa(K)=TnN1x(n)ej2πNkn=TDFT(x(n))X_a(K)=T\sum_{n}^{N-1}x(n)e^{-j\frac{2\pi}{N}kn}=T·DFT(x(n))

三、FFT进行频谱分析

3.1 练习一

绘制下面信号的8点FFT:

X3(n)={4n0n3n34n70其他nX_3(n)=\begin{cases} 4-n & 0{\leq}n{\leq}3 \\ n-3 & 4{\leq}n{\leq}7 \\ 0 & 其他n \end{cases}

1
2
3
4
5
6
7
8
9
10
11
12
N = 8;
x = [4:-1:1 1:4]; %4 3 2 1 1 2 3 4
xk = fft(x,N);

figure;
subplot(1, 2, 1);
stem(0:length(x)-1, x, ".");
title("x3的波形");

subplot(1, 2, 2);
stem(0:N-1, xk, ".");
title("x3的8点FFT");

3.2 练习二

绘制下面信号的8点和16点FFT:

x1(n)=R4(n)x_1(n) = R_4(n)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
N1 = 8;
N2 = 16;

x1 = [1 1 1 1 0 0 0 0];
xk8 = fft(x1, N1);
xk16 = fft(x1, N2);
xk8 = abs(xk8);
xk16 = abs(xk16);

figure;
subplot(2, 1, 1);
stem(0:length(x1)-1, x1, "filled");
title("x1的波形");
subplot(2, 1, 2);
stem(0:N1-1, xk8, "fill");
title("x1的8点FFT");


figure;
subplot(2, 1, 1);
stem(0:length(x1)-1, x1, "filled");
title("x1的波形");
subplot(2, 1, 2);
stem(0:N2-1, xk16, "filled");
title("x1的16点FFT");


3.3 练习三

绘制下面信号的8点和16点FFT:

x2(n)={n+10n38n4n70,其他nx_2(n) = \begin{cases} n+1 & 0{\leq}n{\leq}3 \\ 8-n & 4{\leq}n{\leq}7 \\ 0, 其他n \end{cases}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
x = [1:4 4:-1:1];
N1 = 8;
N2 = 16;
X1 = abs(fft(x, 8));
X2 = abs(fft(x, 16));

figure;
subplot(2, 1, 1);
stem(0:length(x)-1, x, "filled");
title("x2的波形");
subplot(2, 1, 2);
stem(0:N1-1, X1,"filled");
title("x2的8点FFT");

figure;
subplot(2, 1, 1);
stem(0:length(x)-1, x, "filled");
title("x2的波形");
subplot(2, 1, 2);
stem(0:N2-1, X2,"filled");
title("x2的16点FFT");


3.4 练习四

绘制下面信号的8点和16点FFT:

x4(n)=cos(π4n)x_4(n) = cos(\frac{\pi}{4}n)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
x = [0:pi:7*pi];
x1 = [0:pi:15*pi];
y = cos(x/4);
y0 = cos(x1/4);
N1 = 8;
N2 = 16;
y1 = fft(y, N1);
y2 = fft(y0, N2);

figure;
subplot(2, 1, 1);
stem(x/pi, y, ".");
title("x4的波形");
subplot(2, 1, 2);
stem(0:N1-1, y1, ".");
title("x4的8点FFT");

figure;
subplot(2, 1, 1);
stem(x1/pi, y0, ".");
title("x4的波形");
subplot(2, 1, 2);
stem(0:N2-1, y2, ".");
title("x4的16点FFT");


3.5 练习五

对下面信号以fs=64(Hz)采样后做N=16、32、64点的FFT:

x6(n)=cos(8πt)+cos(16πt)+cos(20πt)x_6(n) = cos(8{\pi}t)+cos(16{\pi}t)+cos(20{\pi}t)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
clc;
clear;
%绘制x6(n) 连续信号
fs = 64;
t = 1/fs;

N61 = 16;
n61 = 0:N61-1;
x61 = cos(8*pi*n61*t)+cos(16*pi*n61*t)+cos(20*pi*n61*t);
X61 = fft(x61,N61);
subplot(3,1,1);
stem(0:length(x61)-1,x61,'.');
title('x6(n)的波形');
grid on;
subplot(3,1,2);
stem(0:N61-1,abs(X61),'.');
title('x6(n)的16点FFT幅频');
grid on;
subplot(3,1,3);
stem(0:N61-1,angle(X61),'.');
title('x6(n)的16点FFT相频');
grid on;
figure;

N62 = 32;
n62 = 0:N62-1;
x62 = cos(8*pi*n62*t)+cos(16*pi*n62*t)+cos(20*pi*n62*t);
X62 = fft(x62,N62);
subplot(3,1,1);
stem(0:length(x62)-1,x62,'.');
title('x6(n)的波形');
grid on;
subplot(3,1,2);
stem(0:N62-1,abs(X62),'.');
title('x6(n)的32点FFT幅频');
grid on;
subplot(3,1,3);
stem(0:N62-1,angle(X62),'.');
title('x6(n)的32点FFT相频');
grid on;
figure;

N6 = 64;
n6 = 0:N6-1;
x6 = cos(8*pi*n6*t)+cos(16*pi*n6*t)+cos(20*pi*n6*t);
X6 = fft(x6,N6);
subplot(3,1,1);
stem(0:length(x6)-1,x6,'.');
title('x6(n)的波形');
grid on;
subplot(3,1,2);
stem(0:N6-1,abs(X6),'.');
title('x6(n)的64点FFT幅频');
grid on;
subplot(3,1,3);
stem(0:N6-1,angle(X6),'.');
title('x6(n)的64点FFT相频');
grid on;