资源描述
x1=[1,1,1,1];
N=8;
y1=fft(x1,N);
figure;
subplot(211);
stem(0:length(x1)-1,x1);
subplot(212);
stem(0:N-1,abs(y1));
x2=[1,1,1,1];
N=16;
y2=fft(x2,N);
figure;
subplot(211);
stem(0:length(x2)-1,x2);
subplot(212);
stem(0:N-1,abs(y2));
x3=[1,2,3,4,4,3,2,1];
N=8;
y3=fft(x3,N);
figure;
subplot(211);
stem(0:length(x3)-1,x3);
subplot(212);
stem(0:N-1,abs(y3));
x4=[1,2,3,4,4,3,2,1];
N=16;
y4=fft(x4,N);
figure;
subplot(211);
stem(0:length(x4)-1,x4);
subplot(212);
stem(0:N-1,abs(y4));
x5=[4,3,2,1,1,2,3,4];
N=8;
y5=fft(x5,N);
figure;
subplot(211);
stem(0:length(x5)-1,x5);
subplot(212);
stem(0:N-1,abs(y5));
x6=[4,3,2,1,1,2,3,4];
N=16;
y6=fft(x6,N);
figure;
subplot(211);
stem(0:length(x6)-1,x6);
subplot(212);
stem(0:N-1,abs(y6));
N=8,n=0:N-1;
x7=cos(pi*n/4);
y7=fft(x7,N);
figure;
subplot(211);
stem(0:length(x7)-1,x7);
subplot(212);
stem(0:N-1,abs(y7));
N=16,n=0:N-1;
x8=cos(pi*n/4);
y8=fft(x8,N);
figure;
subplot(211);
stem(0:length(x8)-1,x8);
subplot(212);
stem(0:N-1,abs(y8));
N=8,n=0:N-1;
x9=sin(pi*n/8);
y9=fft(x9,N);
figure;
subplot(211);
stem(0:length(x9)-1,x9);
subplot(212);
stem(0:N-1,abs(y9));
N=16,n=0:N-1;
x10=sin(pi*n/8);
y10=fft(x10,N);
figure;
subplot(211);
stem(0:length(x10)-1,x10);
subplot(212);
stem(0:N-1,abs(y10));
N=16,n=0:N-1;
x11=cos(pi*n/8)+cos(pi*n/4)+cos(5*pi*n/16);
y11=fft(x11,N);
figure;
subplot(211);
stem(0:length(x11)-1,x11);
subplot(212);
stem(0:N-1,abs(y11));
N=32,n=0:N-1;
x12=cos(pi*n/8)+cos(pi*n/4)+cos(5*pi*n/16);
y12=fft(x12,N);
figure;
subplot(211);
stem(0:length(x12)-1,x12);
subplot(212);
stem(0:N-1,abs(y12));
N=64,n=0:N-1;
x13=cos(pi*n/8)+cos(pi*n/4)+cos(5*pi*n/16);
y13=fft(x13,N);
figure;
subplot(211);
stem(0:length(x13)-1,x13);
subplot(212);
stem(0:N-1,abs(y13));
实验三:
实验名称:用 FFT 进行谱分析
一、实验目的
1.进一步加深对DFT算法原理和基本性质的理解
2.熟悉FFT算法原理和 FFT子程序的应用。
3.学习用 FFT 对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用FFT。
二.实验原理
1.快速傅立叶变换(FFT)算法:长度为N的序列 的离散傅立叶变换为N点的DFT可以分解为两个N/2点的DFT,每个N/2点的DFT又可以分解为两个N/4点的DFT。依此类推,当N为2的整数次幂时,由于每分解一次降低一阶幂次,所以通过M次的分解,最后全部成为一系列2点DFT运算。
2.利用FFT进行频谱分析:若信号本身是有限长的序列,计算序列的频谱就是直接对序列进行FFT运算求得,就代表了序列在幅度谱和相位谱之间的频谱值。若信号是模拟信号,用FFT进行谱分析时,首先必须对信号进行采样,使之变成离散信号,然后就可按照前面的方法用FFT来对连续信号进行谱分析。
三、实验步骤
1.复习 DFT 的定义、性质和用 DFT 作谱分析的有关内容。
2.复习FFT算法原理与编程思想,并对照DIT-FFT运算流图和程序框图,读懂本实验提供的FFT子程序。
3.编制信号产生子程序,产生以下典型信号供谱分析用:
x1(n )= R4(n) (1-1)
x2(n )= [1,2,3,4,4,3,2,1] (1-2)
x 3(n) = [4,3,2,1,1,2,3,4] (1-3)
x4(n) = cos(π/4 *n ) (1-4)
x5 (n ) = sin(π/8* n) (1-5)
x6 (t ) = cos(8πt) + cos(16πt) + cos(20πt) (1-6)
4.编写M文件。
5.按实验内容要求,上机实验,并写出实验报告。
四、实验内容
主要使用的MATLAB 函数:函数 fft(x)可以计算 R 点序列的 R 点 DFT值; 而fft(x,N)则计算R 点序列的N 点DFT,若R>N,则直接截取R 点DFT的前N 点,若R<N,则x先进行补零扩展为 N 点序列再求 N 点 DFT。
1、编写matlabM文件对信号x1 (n)做8点和16点的FFT,保存实验结果图形。2、编写matlabM文件对信号x2( n )做8点和16点的FFT,保存实验结果图形。
3、编写matlabM文件对信号x4 (n )做8点和16点的FFT,保存实验结果图形。
4、编写 matlab M文件对信号x6 (t )以 fs=64(Hz)采样后做 N=16、32、64点的 FFT,保存三幅实验结果图形。
五、结果图形
六、思考题 1.在 N=8 和 N=16 两种情况下, x2 (n)、x3 (n)的幅频特性会相同吗?为什么?
答:N=8时x2 (n)、x3 (n)的幅频特性是相同的,而N=16时x2 (n)、x3 (n)的幅频特性是不相同的。因为在N=8的情况下,x3(n)相当于是x2 (n)的一个时延,而N=16时x2 (n)经过时延得到的是x2 (n)= [4,3,2,1,0,0,0,0,0,0,0,0,1,2,3,4]而x3 (n)=[4,3,2,1,2,3,4,0,0,0,0,0,0,0]所以此时x2 (n)、x3 (n)的幅频特性不相同。
2.如果周期信号的周期预先不知道,如何用 FFT进行分析?
答:设一个定长的m值,先取2m,看2m与m的误差是否大,如大的话再取4m,看4m与2m的误差是否大,如不大,4倍的m值则可近似原来点的谱分析。
3.试使用函数fft(x)近似画出x (n)= R10 (n)在(−4π,4π)上的幅频响应曲线(|FT [(X (n)]|)。
6 / 6
答:clc;
close all;
n=10;
subplot(2,1,1);
x=ones(1,n);
plot(x,'.');
xlabel('n');
ylabel('X(n)');
title('信号的原形');
hold on;
subplot(2,1,2);
dft_10=fft(x,16);
plot(abs(dft_10));
axis([-4 4 0 15]);
xlabel('w/pi');
ylabel('|Y(jw)|');
title('幅频响应曲线 N=16');
grid on
.
展开阅读全文