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

一、实验目的

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实验报告

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

在这里插入图片描述
答疑资料qq群:1007576722

  • 24
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gopher-毛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值