# 信号的相关运算及在单片机程序运用中的算法分析(二)
#### 离散信号分析和处理的主要手段是利用计算机去实现,为便于计算机去实现,引入离散傅里叶变换(Discrete Fourier Transform,DFT) 。
**目录 (Table of Contents)**
[TOCM]
# 离散傅里叶变换(DFT)
#### 比如我们要求矩形脉冲序列的离散傅里叶变换。
# 时域循环卷积(圆卷积)定理
## 线卷积
#### 有限长序列f1(k)和f2(k)的长度分别为N和M,则两序列的卷积和f(k)(称为线卷积)仍为有限长序列序列,长度为N+M–1。
## 循环卷积
#### 有限长序列f1(k)和f2(k)的长度相等,均为N,则f1(k)与f2(k)的循环卷积定义为
#### 循环卷积结果的长度仍为N。若两序列长度不等,采用补零法。假如有两个序列f1(k)与f2(k),
#### 将f1(k)补一个零点,使f1(k)与f2(k)的长度均为5。 则:
#### 所以,
#### 以此类推,
。。。。。。
#### 所以此次循环卷积的最终结果为:
#### 循环卷积便于利用数字计算机进行计算。为借助循环卷积求线卷积,要使循环卷积的结果与线卷积结果相同,可以采用补零的方法,使f1(k)与f2(k)的长度均为L≥N+M–1 则循环卷积与线卷积的结果相同。
#### 若 f1(k)←→ F1(n)
#### f2(k)←→ F2(n)
# FFT(快速傅里叶变换)
#### FFT是一种DFT的高效算法,互相关和自相关函数的计算可利用FFT实现。由于离散傅里叶变换隐含着周期性,所以用FFT计算离散相关函数也是对周期序列而言的。直接做N点FFT相当于对两个N点序列x(n)、y(n)作周期延拓,作相关后再取主值(类似圆周卷积)。而实际一般要求的是两个有限长序列的线性相关,为避免混淆,需采用与圆周卷积求线性卷积相类似的方法,先将序列延长补0后再用上述方法。
## FFT的MATLAB算法实现
#### 信标新版信号为线性调频Chirp信号,起始频率250Hz,截止频率2000Hz,信号长度为0.2048秒,采样频率要满足奈奎斯特采样定理,这样才能恢复原信号,即Fs>=2fc。fc为截止频率。
```
Fs = 10000; % 采样频率
Ts = 1/Fs; % 采样周期
L = 2048; % 信号长度
t=(0:L-1).*Ts; % 时域自变量
x = chirp(t,250,0.2047,2000);
% chirp信号从0-0.2048秒,频率从250Hz-2000Hz
subplot(311);
plot(t,x);
title("Chirp信号");
xlabel("t/s")
```
```
y = fft(x,L); % FFT变换
y = abs(y)./L; % 实际幅值变换
f=(0:L-1)*Fs./L; % 实际频率变换
subplot(312);
stem(f(1:L/2),y(1:L./2));
% 数据值按照茎状形式画出,以圆圈终止
title("N-DFT变换幅频响应单边");
xlabel("f/Hz");
```
```
grid on
f=f-Fs./2; % 移位
subplot(313);
stem(f,fftshift(y));
title("N-DFT变换幅频响应双边")
xlabel("f/Hz")
```