实验四 离散傅立叶变换的应用

Posted 毛_三月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验四 离散傅立叶变换的应用相关的知识,希望对你有一定的参考价值。

一、实验目的

1.进一步加深DFT算法的原理和基本性质的理解;
2.学习用FFT对信号进行谱分析的方法,并分析其误差及其原因;

二、实验原理

1.N点序列的DFT和IDFT变换定义式如下:
在这里插入图片描述
在这里插入图片描述

利用旋转因子在这里插入图片描述具有周期性,可以得到快速算法(FFT)。
在MATLAB中,可以用函数

X=fft(x)  %计算N点的DFT,N为序列x[k]的长度,即N=length(x);
X=fft(x,N)%计算序列x[k]的N点DFT;
x=ifft(X) %计算N点的IDFT,N为序列x[m]的长度;
x=ifft(X,N)%计算序列x[m]的N点IDFT;

三、示例演示— fft 在信号分析中的应用

【例4.1】有一个信号,其中,使用DFT频谱分析方法从受噪声污染的信号x(t)中鉴别出有用的信号。

clear all
fs=1000;
f1=100;
dt=1/fs;
t=0:dt:1;  %采样周期为0.001s,即采样频率为1000Hz;
N=length(t);
x=sin(2*pi*f1*t)+0.8*randn(1,N);   %产生受噪声污染的正弦波信号;
subplot(3,1,1)
plot(t,x);   %画出时域信号;
axis([0 0.3,-4 4]);
xlabel('(a)输入信号的时域波形');
L=1024;
X=fft(x,L);   %对x的L点傅里叶变换;
f=(0:L-1)*fs/L;  
subplot(3,1,2)
plot(f,abs(X));    
xlabel('(b)输入信号的抽样后的DFT');
X1=fftshift(X);    %对抽样频谱点的值重新排列;                            
f1=(-L/2:L/2-1)*fs/L;    %设置频率轴坐标;
subplot(3,1,3)
%plot(f1,X1);            %画出频域信号;
plot(f1,abs(X1)); 
xlabel('(c)输入信号的频谱');  %画出频域信号;  

在这里插入图片描述

                      图1   输入信号的时域频域波形图

四、实验内容

1.假设现含有3种频率成分,在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述,利用DFT分析在这里插入图片描述的频谱。
(1)对在这里插入图片描述抽样后加矩形窗截断(窗函数的长度为128),然后对其做128点的DFT并画出对应的频谱图在这里插入图片描述,再对截短信号做512的DFT并画出对应的频谱图在这里插入图片描述,分析其特点,总结实验中的主要结论。

clear all
fs=100;
f1=20;
f2=20.5;
f3=40;
dt=1/fs;
N=128;
t=0:dt:(N-1)*dt;  %采样周期为0.001s,即采样频率为1000Hz;
x=sin(2*pi*f1*t)+sin(2*pi*f2*t)+sin(2*pi*f3*t);   %产生受噪声污染的正弦波信号;
subplot(3,1,1)
plot(t,x);   %画出时域信号;
axis([0 0.3,-4 4]);
xlabel('(a)输入信号的时域波形');
L=128;
X=fft(x,L);   %对x的L点傅里叶变换;
f=(0:L-1)*fs/L;  
subplot(3,1,2)
plot(f,abs(X));    
xlabel('(b)输入信号的抽样后的DFT');
X1=fftshift(X);    %对抽样频谱点的值重新排列;                            
f1=(-L/2:L/2-1)*fs/L;    %设置频率轴坐标;
subplot(3,1,3)
%plot(f1,X1);            %画出频域信号;
plot(f1,abs(X1)); 
xlabel('(c)输入信号的频谱');  %画出频域信号;  
clear all
fs=100;
f1=20;
f2=20.5;
f3=40;
dt=1/fs;
N=128;
t=0:dt:(N-1)*dt;  %采样周期为0.001s,即采样频率为1000Hz;
x=sin(2*pi*f1*t)+sin(2*pi*f2*t)+sin(2*pi*f3*t);   %产生受噪声污染的正弦波信号;
subplot(3,1,1)
plot(t,x);   %画出时域信号;
axis([0 0.3,-4 4]);
xlabel('(a)输入信号的时域波形');
L=512;
X=fft(x,L);   %对x的L点傅里叶变换;
f=(0:L-1)*fs/L;  
subplot(3,1,2)
plot(f,abs(X));    
xlabel('(b)输入信号的抽样后的DFT');
X1=fftshift(X);    %对抽样频谱点的值重新排列;                            
f1=(-L/2:L/2-1)*fs/L;    %设置频率轴坐标;
subplot(3,1,3)
%plot(f1,X1);            %画出频域信号;
plot(f1,abs(X1)); 
xlabel('(c)输入信号的频谱');  %画出频域信号;  

(2)若对在这里插入图片描述抽样后加矩形窗截断(窗函数的长度为512),然后对其做512的DFT并画出对应的频谱图在这里插入图片描述,对比(1)的结果,分析其结论。

clear all
fs=100;
f1=20;
f2=20.5;
f3=40;
dt=1/fs;
N=512;
t=0:dt:(N-1)*dt;  %采样周期为0.001s,即采样频率为1000Hz;
x=sin(2*pi*f1*t)+sin(2*pi*f2*t)+sin(2*pi*f3*t);   %产生受噪声污染的正弦波信号;
subplot(3,1,1)
plot(t,x);   %画出时域信号;
axis([0 0.3,-4 4]);
xlabel('(a)输入信号的时域波形');
L=512;
X=fft(x,L);   %对x的L点傅里叶变换;
f=(0:L-1)*fs/L;  
subplot(3,1,2)
plot(f,abs(X));    
xlabel('(b)输入信号的抽样后的DFT');
X1=fftshift(X);    %对抽样频谱点的值重新排列;                            
f1=(-L/2:L/2-1)*fs/L;    %设置频率轴坐标;
subplot(3,1,3)
%plot(f1,X1);            %画出频域信号;
plot(f1,abs(X1)); 
xlabel('(c)输入信号的频谱');  %画出频域信号;  

(3)如果增大抽样频率,重做(1)和(2),对比上面的结果,分析你的结论。

clear all
fs=1000;
f1=20;
f2=20.5;
f3=40;
dt=1/fs;
N=128;
t=0:dt:(N-1)*dt;  %采样周期为0.001s,即采样频率为1000Hz;
x=sin(2*pi*f1*t)+sin(2*pi*f2*t)+sin(2*pi*f3*t);   %产生受噪声污染的正弦波信号;
subplot(3,1,1)
plot(t,x);   %画出时域信号;
axis([0 0.3,-4 4]);
xlabel('(a)输入信号的时域波形');
L=128;
X=fft(x,L);   %对x的L点傅里叶变换;
f=(0:L-1)*fs/L;  
subplot(3,1,2)
plot(f,abs(X));    
xlabel('(b)输入信号的抽样后的DFT');
X1=fftshift(X);    %对抽样频谱点的值重新排列;                            
f1=(-L/2:L/2-1)*fs/L;    %设置频率轴坐标;
subplot(3,1,3)
%plot(f1,X1);            %画出频域信号;
plot(f1,abs(X1)); 
xlabel('(c)输入信号的频谱');  %画出频域信号;
clear all
fs=1000;
f1=20;
f2=20.5;
f3=40;
dt=1/fs;
N=128;
t=0:dt:(N-1)*dt;  %采样周期为0.001s,即采样频率为1000Hz;
x=sin(2*pi*f1*t)+sin(2*pi*f2*t)+sin(2*pi*f3*t);   %产生受噪声污染的正弦波信号;
subplot(3,1,1)
plot(t,x);   %画出时域信号;
axis([0 0.3,-4 4]);
xlabel('(a)输入信号的时域波形');
L=512;
X=fft(x,L);   %对x的L点傅里叶变换;
f=(0:L-1)*fs/L;  
subplot(3,1,2)
plot(f,abs(X));    
xlabel('(b)输入信号的抽样后的DFT');
X1=fftshift(X);    %对抽样频谱点的值重新排列;                            
f1=(-L/2:L/2-1)*fs/L;    %设置频率轴坐标;
subplot(3,1,3)
%plot(f1,X1);            %画出频域信号;
plot(f1,abs(X1)); 
xlabel('(c)输入信号的频谱');  %画出频域信号;
clear all
fs=1000;
f1=20;
f2=20.5;
f3=40;
dt=1/fs;
N=2048;
t=0:dt:(N-1)*dt;  %采样周期为0.001s,即采样频率为1000Hz;
x=sin(2*pi*f1*t)+sin(2*pi*f2*t)+sin(2*pi*f3*t);   %产生受噪声污染的正弦波信号;
subplot(3,1,1)
plot(t,x);   %画出时域信号;
axis([0 0.3,-4 4]);
xlabel('(a)输入信号的时域波形');
L=512;
X=fft(x,L);   %对x的L点傅里叶变换;
f=(0:L-1)*fs/L;  
subplot(3,1,2)
plot(f,abs(X));    
xlabel('(b)输入信号的抽样后的DFT');
X1=fftshift(X);    %对抽样频谱点的值重新排列;                            
f1=(-L/2:L/2-1)*fs/L;    %设置频率轴坐标;
subplot(3,1,3)
%plot(f1,X1);            %画出频域信号;
plot(f1,abs(X1)); 
xlabel('(c)输入信号的频谱');  %画出频域信号;

更多相关文章点这里哦

数字信号处理----全套Matlab实验报告

通信工程(信息类,电子类,电气工程,自动化,计算机,软件工程,机电,等相关专业)全套学习指导

以上是关于实验四 离散傅立叶变换的应用的主要内容,如果未能解决你的问题,请参考以下文章

傅立叶变换的深入理解 转载 数字信号处理

离散傅立叶变换给出“正确”答案的复共轭

DFT与傅里叶变换的理解

python 图像的离散傅立叶变换

离散傅立叶变换,快速傅立叶变换和傅里叶级数

浅谈快速离散傅里叶变换的实现