数字信号处理实验二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二: 用FFT 作谱分析
实验目的
(1) 进一步加深DFT 算法原理和基本性质的理解(因为FFT 只是DFT 的一种快速算法, 所以FFT 的运算结果必然满足DFT 的基本性质)。
(2) 熟悉FFT 算法原理和FFT 子程序的应用。
(3) 学习用FFT 对连续信号和时域离散信号进行谱分析的方法, 了解可能出现的分析误差及其原因, 以便在实际中正确应用FFT 。
● 实验步骤
(1) 复习DFT 的定义、 性质和用DFT 作谱分析的有关内容。
(2) 复习FFT 算法原理与编程思想, 并对照DIT-FFT 运算流图和程序框图, 读懂本实验提供的FFT 子程序。
(3) 编制信号产生子程序, 产生以下典型信号供谱分析用:
(4) 编写主程序。
下图给出了主程序框图, 供参考。 本实验提供FFT 子程序和通用绘图子程序。
(5) 按实验内容要求, 上机实验, 并写出实验报告。
1423()()1,03()8470
403()3470x n R n n n x n n n n n x n n n =⎧+≤≤⎪=-≤≤⎨⎪⎩-≤≤⎧⎪=-≤≤⎨⎪⎩456()cos 4()sin 8()cos8cos16cos20x n n x n n x n t t t πππππ===++
●实验内容
(1) 对2 中所给出的信号逐个进行谱分析。
(2) 令x(n)=x4(n)+x5(n),用FFT计算8 点和16 点离散傅里叶变换,
X(k)=DFT[x(n)]
(3) 令x(n)=x4(n)+jx5(n),重复(2)。
●实验报告要求
(1) 简述实验原理及目的。
(2) 结合实验中所得给定典型序列幅频特性曲线,与理论结果比较,并分析说明误差产生的原因以及用FFT作谱分析时有关参数的选择方法。
(3) 总结实验所得主要结论。
(4) 简要回答思考题。
Matlab代码:
对六个所给信号进行谱分析的主程序(对信号进行64点的FFT变换):
clc;clear all;
N=64;
x1=Signal_x1(N);
myfft(x1);
x2=Signal_x2(N);
myfft(x2);
x3=Signal_x3(N);
myfft(x3);
x4=Signal_x4(N);
myfft(x4);
x5=Signal_x5(N);
myfft(x5);
x6=Signal_x6(N);
myfft(x6);
编写的画序列、对序列进行FFT变换及画其频谱的函数:function Y=myfft(X)
L=length(X);
n=0:L-1;
figure;
stem(n,X);%»-³öÐźÅÐòÁÐ
Y=fft(X);
figure;
stem(n,abs(Y));%»-³öÐźŵÄFFT±ä»»µÃµ½µÄX(k)ÐòÁÐ
编写的六个信号产生子程序:
信号1:
function X=Signal_x1(n)
X=zeros(1,n);
X(1:4)=1;
信号2:
function X=Signal_x2(n)
X=zeros(1,n);
for i=0:3
X(i+1)=i+1;
end
for i=4:7
X(i+1)=8-i;
end
信号3:
function X=Signal_x3(n)
X=zeros(1,n);
for i=0:3
X(i+1)=4-i;
end
for i=4:7
X(i+1)=i-3;
end
信号4:
function X=Signal_x4(N)
n=0:N-1;
X=zeros(1,n);
X=cos(pi/4*n);
信号5:
function X=Signal_x5(N)
n=0:N-1;
X=zeros(1,n);
X=sin(pi/8*n);
信号6:
function X=Signal_x6(N)
n=0:N-1;
X=zeros(1,n);
X=cos(pi*8*n)+cos(pi*16*n)+cos(pi*20*n);
对x(n)=x4(n)+x5(n)进行8点和16点的FFT变换程序:8点:
clc;clear all;
N=8;
x=Signal_x4(N)+Signal_x5(N);
myfft(x);
16点:
clc;clear all;
N=16;
x=Signal_x4(N)+Signal_x5(N);
myfft(x);
对x(n)=x4(n)+jx5(n)进行8点和16点的FFT变换程序:
8点:
clc;clear all;
N=8;
x=Signal_x4(N)+j*Signal_x5(N); myfft(x);
16点:
clc;clear all;
N=16;
x=Signal_x4(N)+j*Signal_x5(N); myfft(x);