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

一、实验目的

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

  • 21
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: 信号与系统是一个重要的工程学科,用于研究信号的传输和处理。傅里叶变换是信号与系统中最基本的数学工具之一,它可以将一个信号从时域转换到频域。在Matlab实验中,我们可以使用内置的函数和工具箱来进行傅里叶变换。 首先,我们要创建一个信号,可以是一个正弦波、方波或其他类型的信号。我们可以使用Matlab的波形生成函数来创建一个信号,并可以设置信号的振幅、频率和时长。 接下来,我们使用Matlab的傅里叶变换函数对信号进行变换。最常用的函数是fft(),它可以计算离散傅里叶变换。这个函数将信号从时域转换到频域,并返回一个复数数组,其中包含信号的幅度和相位信息。 在得到傅里叶变换结果后,我们可以通过取模和相位计算信号的频谱。频谱显示了信号在不同频率上的强度。我们可以使用Matlab的plot()函数绘制频谱图,以便更好地分析信号的频率特性。 此外,在Matlab中还有一些其他的傅里叶变换函数,例如fftshift()和ifft()。fftshift()可以将频谱移动到中心,ifft()可以进行逆傅里叶变换,将信号从频域转换回时域。 通过进行傅里叶变换实验,我们可以更好地理解信号的频率特性和频谱变换过程。这对于信号处理、信号传输和通信系统设计等工程领域都非常重要。Matlab提供了强大的工具和函数,可以帮助我们进行傅里叶变换的分析和实验。 ### 回答2: 信号与系统是电子信息类专业中非常重要的一门课程,而傅里叶变换是信号与系统中的一个重要概念和工具。Matlab是一种非常强大的数学计算软件,在信号与系统课程中也被广泛应用。 信号可以是连续的或离散的,而傅里叶变换可以将时域信号转换为频域信号,从而可以更加直观地观察和分析信号的特性。在Matlab中,我们可以使用fft函数来进行傅里叶变换。 在进行傅里叶变换实验时,我们可以从一些简单的信号开始。例如,我们可以定义一个正弦信号sin(t),然后使用fft函数对其进行傅里叶变换。通过绘制频谱图,我们可以观察到正弦信号在频域中的频率和幅度。 此外,我们还可以进行频谱分析实验。输入一个含有多个频率成分的信号,例如s(t) = 2*cos(2*pi*f1*t) + 3*sin(2*pi*f2*t),其中f1和f2分别代表两个频率。通过对s(t)进行傅里叶变换,我们可以得到频谱图,从中可以清晰地看到两个频率成分的幅度和频率。 此外,在Matlab中还可以进行滤波实验。我们可以通过设计一个滤波器来滤除特定频率的成分。例如,我们可以设计一个低通滤波器,将高频成分过滤掉,只保留低频成分。 傅里叶变换在信号与系统课程中扮演着非常重要的角色,能够帮助我们更好地理解信号的特性和分析信号。通过Matlab实验,我们可以直观地观察信号的频谱特性,并进行一些相关的实验和分析。这些实验可以帮助我们更深入地了解信号与系统中的傅里叶变换这一概念和工具。 ### 回答3: 傅里叶变换是信号与系统中非常重要的概念之一,它可以用于信号的频谱分析和信号处理。MATLAB是一个强大的数学计算软件,它提供了丰富的工具和函数,可以方便地进行傅里叶变换的计算和分析。 在MATLAB中,可以使用fft函数来计算信号的傅里叶变换,fft函数的输入参数是信号的离散样本,输出结果是信号的频谱。通过对频谱进行进一步的分析和处理,可以得到很多有用的信息。 首先,我们可以使用fft函数计算信号的幅度谱和相位谱。幅度谱表示信号在不同频率上的能量强度,可以通过abs函数得到;相位谱表示信号在不同频率上的相位信息,可以通过angle函数得到。这样,我们可以对信号在频域上的特性进行分析,比如找到信号的主要频率成分,判断信号的频率分布情况,等等。 其次,我们可以使用ifft函数来计算信号的逆傅里叶变换,将信号从频域转换回时域。通过将信号的频谱进行逆变换,我们可以恢复原始信号的波形,并对信号进行处理和修改。 另外,MATLAB还提供了许多其他与傅里叶变换相关的函数和工具,比如fftshift函数可以将频谱进行平移,fft2函数可以进行二维信号的傅里叶变换等等。这些函数和工具使得信号的傅里叶变换在MATLAB中变得更加方便和灵活。 总的来说,信号与系统中的傅里叶变换是一项重要的实验内容,通过MATLAB进行实验可以更好地理解和应用傅里叶变换。MATLAB提供了丰富的函数和工具,可以进行信号的傅里叶变换计算和分析,从而更好地了解信号在频域上的特性,并对信号进行处理和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

胡毛毛_三月

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

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

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

打赏作者

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

抵扣说明:

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

余额充值