当前位置:文档之家› Matlab编程实现FFT变换及频谱分析的程序代码

Matlab编程实现FFT变换及频谱分析的程序代码

Matlab编程实现FFT变换及频谱分析的程序代码
Matlab编程实现FFT变换及频谱分析的程序代码

Matlab编程实现FFT变换及频谱分析的程序代码

内容

1.用Matlab产生正弦波,矩形波,以及白噪声信号,并显示各自时域波形图

2.进行FFT变换,显示各自频谱图,其中采样率,频率、数据长度自选

3.做出上述三种信号的均方根图谱,功率图谱,以及对数均方根图谱

4.用IFFT傅立叶反变换恢复信号,并显示恢复的正弦信号时域波形图

源程序

%*************************************************************** **********%

% FFT实践及频谱分析%

%*************************************************************** **********%

%*************************************************************** **********%

%***************1.正弦波****************%

fs=100;%设定采样频率

N=128;

n=0:N-1;

t=n/fs;

f0=10;%设定正弦信号频率

%生成正弦信号

x=sin(2*pi*f0*t);

figure(1);

subplot(231);

plot(t,x);%作正弦信号的时域波形

xlabel('t');

ylabel('y');

title('正弦信号y=2*pi*10t时域波形');

grid;

%进行FFT变换并做频谱图

y=fft(x,N);%进行fft变换

mag=abs(y);%求幅值

f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换

figure(1);

subplot(232);

plot(f,mag);%做频谱图

axis([0,100,0,80]);

xlabel('频率(Hz)');

ylabel('幅值');

title('正弦信号y=2*pi*10t幅频谱图N=128');

grid;

%求均方根谱

sq=abs(y);

figure(1);

subplot(233);

plot(f,sq);

xlabel('频率(Hz)');

ylabel('均方根谱');

title('正弦信号y=2*pi*10t均方根谱');

grid;

%求功率谱

power=sq.^2;

figure(1);

subplot(234);

plot(f,power);

xlabel('频率(Hz)');

ylabel('功率谱');

title('正弦信号y=2*pi*10t功率谱');

grid;

%求对数谱

ln=log(sq);

figure(1);

subplot(235);

plot(f,ln);

xlabel('频率(Hz)');

ylabel('对数谱');

title('正弦信号y=2*pi*10t对数谱');

grid;

%用IFFT恢复原始信号

xifft=ifft(y);

magx=real(xifft);

ti=[0:length(xifft)-1]/fs;

figure(1);

subplot(236);

plot(ti,magx);

xlabel('t');

ylabel('y');

title('通过IFFT转换的正弦信号波形');

grid;

%****************2.矩形波****************% fs=10;%设定采样频率

t=-5:0.1:5;

x=rectpuls(t,2);

x=x(1:99);

figure(2);

subplot(231);

plot(t(1:99),x);%作矩形波的时域波形

xlabel('t');

ylabel('y');

title('矩形波时域波形');

grid;

%进行FFT变换并做频谱图

y=fft(x);%进行fft变换

mag=abs(y);%求幅值

f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换figure(2);

subplot(232);

plot(f,mag);%做频谱图

xlabel('频率(Hz)');

ylabel('幅值');

title('矩形波幅频谱图');

grid;

%求均方根谱

sq=abs(y);

figure(2);

subplot(233);

plot(f,sq);

xlabel('频率(Hz)');

ylabel('均方根谱');

title('矩形波均方根谱');

grid;

%求功率谱

power=sq.^2;

figure(2);

subplot(234);

plot(f,power);

xlabel('频率(Hz)');

ylabel('功率谱');

title('矩形波功率谱');

grid;

%求对数谱

ln=log(sq);

figure(2);

subplot(235);

plot(f,ln);

xlabel('频率(Hz)');

ylabel('对数谱');

title('矩形波对数谱');

grid;

%用IFFT恢复原始信号

xifft=ifft(y);

magx=real(xifft);

ti=[0:length(xifft)-1]/fs;

figure(2);

subplot(236);

plot(ti,magx);

xlabel('t');

ylabel('y');

title('通过IFFT转换的矩形波波形');

grid;

%****************3.白噪声****************% fs=10;%设定采样频率

t=-5:0.1:5;

x=zeros(1,100);

x(50)=100000;

figure(3);

subplot(231);

plot(t(1:100),x);%作白噪声的时域波形

xlabel('t');

ylabel('y');

title('白噪声时域波形');

grid;

%进行FFT变换并做频谱图

y=fft(x);%进行fft变换

mag=abs(y);%求幅值

f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换figure(3);

subplot(232);

plot(f,mag);%做频谱图

xlabel('频率(Hz)');

ylabel('幅值');

title('白噪声幅频谱图');

grid;

%求均方根谱

sq=abs(y);

figure(3);

subplot(233);

plot(f,sq);

xlabel('频率(Hz)');

ylabel('均方根谱');

title('白噪声均方根谱');

grid;

%求功率谱

power=sq.^2;

figure(3);

subplot(234);

plot(f,power);

xlabel('频率(Hz)');

ylabel('功率谱');

title('白噪声功率谱');

grid;

%求对数谱

ln=log(sq);

figure(3);

subplot(235);

plot(f,ln);

xlabel('频率(Hz)');

ylabel('对数谱');

title('白噪声对数谱');

grid;

%用IFFT恢复原始信号

xifft=ifft(y);

magx=real(xifft);

ti=[0:length(xifft)-1]/fs;

figure(3);

subplot(236);

plot(ti,magx);

xlabel('t');

ylabel('y');

title('通过IFFT转换的白噪声波形'); grid;

Matlab中的FFT使用说明

FFT是Fast Fourier Transform(快速傅里叶变换)的简称,FFT算法在MATLAB 中实现的函数是Y=fft(x,n)。刚接触频谱分析用到FFT时,几乎都会对MATLAB 的fft函数产生一些疑惑,下面以看一个例子(根据MATLA帮助修改)。 Fs = 2000; % 设置采样频率 T = 1/Fs; % 得到采用时间 L = 1000; % 设置信号点数,长度1 秒 t = (0:L-1)*T; % 计算离散时间, % 两个正弦波叠加 f1 = 80; A1 = 0.5; % 第一个正弦波100Hz,幅度0.5 f2 = 150; A2 = 1.0 ; % 第2个正弦波150Hz,幅度 1.0 A3 = 0.5; % 白噪声幅度; x = A1*sin(2*pi*f1*t) + A2*sin(2*pi*f2*t); % 产生离散时间信号; y = x + A3*randn(size(t)); % 叠加噪声; % 时域波形图 subplot(2,1,1) plot(Fs*t(1:50),x(1:50)) title('Sinusoids Signal') xlabel('time (milliseconds)') subplot(2,1,2) plot(Fs*t(1:50),y(1:50)) title('Signal Corrupted with Zero-Mean Random Noise') xlabel('time (milliseconds)') NFFT = 2A nextpow2(L); % 设置FFT点数,一般为2 的N次方,如1024,512 等Y = fft(y,NFFT)/L; % 计算频域信号, f = Fs/2*linspace(0,1,NFFT/2+1); %频率离散化,fft后对应的频率是-Fs/2到Fs/2,由NFFT个离散频点表示 % 这里只画出正频率; % Plot single-sided amplitude spectrum. figure; plot(f,2*abs(Y(1:NFFT/2+1))); % fft 后含幅度和相位,一般观察幅度谱,并把负频率加上去, title('Single-Sided Amplitude Spectrum of y(t)') xlabel('Frequency (Hz)')

Simulink下的频谱分析方法及matlab的FFT编程

Simulink下的频谱分析方法 实现功能: 信号发生器一个信号输入,实时显示其频谱分析 调用模块: 信号源(Signal Processing Blockset -> Signal Processing Sources -> Sine Wave) Tip 1:不能用连续的信号源 频谱观察窗(Signal Processing Blockset -> Signal Processing Sources -> Spectrum Scope)Tip 2: 不能用普通的观察窗 Tip 3:必须构上设置中的Buffer input. Buffer size 越大越精细。 Tip 4: 剩下的tips读帮助。 连接关系: 如下图所示 原理框图实验结果:

输出示意图------------------------------ ------------------------------ 实现功能: 从Workspace读取一组数,进行频谱分析 调用模块: From Workspace Tip 1: 采样时间不能用0,即必须使用离散模式 Tip 2: 从其他模型中Scope保存出来的“Structure with time”的数据可以直接用频谱观察窗(同上一功能) ------------------------------ ------------------------------ 实现功能: 从dSPACE读取一组数,进行频谱分析 实现方法:

1. 从dSPACE读数保存成文件,数据导入Workspace(过程略) 2. 采用从其他模型的Scope保存数据为“Structure with time”的方式构建一个结构变量ScopeData1 3. 使用以下代码将dSPACE数据dscapture拷贝到结构变量ScopeData1中 %% =[0::]; %纯粹为占位,19157为dSPACE保存数据长度 for i=1:19157 end %% 4. 采用下图中的模型进行频谱分析 实验结果: 通过以上方法对单轴压电加速度传感器进行灵敏度分析,下图分别为采用dSPACE和直接利用示波器分析的结果对比。

基于Matlab的相关频谱分析程序教程

Matlab 信号处理工具箱 谱估计专题 频谱分析 Spectral estimation (谱估计)的目标是基于一个有限的数据集合描述一个信号的功率(在频率上的)分布。功率谱估计在很多场合下都是有用的,包括对宽带噪声湮没下的信号的检测。 从数学上看,一个平稳随机过程n x 的power spectrum (功率谱)和correlation sequence (相关序列)通过discrete-time Fourier transform (离散时间傅立叶变换)构成联系。从normalized frequency (归一化角频率)角度看,有下式 ()()j m xx xx m S R m e ωω∞ -=-∞ = ∑ 注:()()2 xx S X ωω=,其中()/2 /2 1lim N j n n N n N X x e N ωω→∞ =-=∑ πωπ-<≤。其matlab 近似为X=fft(x,N)/sqrt(N),在下文中()L X f 就是指matlab fft 函数的计算结果了 使用关系2/s f f ωπ=可以写成物理频率f 的函数,其中s f 是采样频率 ()()2/s jfm f xx xx m S f R m e π∞ -=-∞ =∑ 相关序列可以从功率谱用IDFT 变换求得: ()()()/2 2//2 2s s s f jfm f j m xx xx xx s f S e S f e R m d df f πωπ π ωωπ --= = ? ? 序列n x 在整个Nyquist 间隔上的平均功率可以表示为 ()()() /2 /2 02s s f xx xx xx s f S S f R d df f π π ωωπ --= = ? ? 上式中的

按时间抽取的基2FFT算法分析与MATLAB实现

按时间抽取的基2FFT 算法分析及MATLAB 实现 一、DIT-FFT 算法的基本原理 基2FFT 算法的基本思想是把原始的N 点序列依次分解成一系列短序列,充分利用旋转因子的周期性和对称性,分别求出这些短序列对应的DFT ,再进行适当的组合,得到原N 点序列的DFT ,最终达到减少运算次数,提高运算速度的目的。 按时间抽取的基2FFT 算法,先是将N 点输入序列x(n)在时域按奇偶次序分解成2个N/2点序列x1(n)和x2(n),再分别进行DFT 运算,求出与之对应的X1(k)和X2(k),然后利用图1所示的运算流程进行蝶形运算,得到原N 点序列的DFT 。只要N 是2的整数次幂,这种分解就可一直进行下去,直到其DFT 就是本身的1点时域序列。 图1 DIT-FFT 蝶形运算流图 二、DIT-FFT 算法的运算规律及编程思想 1.原位计算 对N=M 2点的FFT 共进行M 级运算,每级由N/2个蝶形运算组成。在同一级中,每个蝶的输入数据只对本蝶有用,且输出节点与输入节点在同一水平线上,这就意味着每算完一个蝶后,所得数据可立即存入原输入数据所占用的数组元素(存储单元),经过M 级运算后,原来存放输入序列数据的N 个存储单元中可依次存放X(k)的N 个值,这种原位(址)计算的方法可节省大量内存。 2.旋转因子的变化规律 N 点DIT ―FFT 运算流图中,每个蝶形都要乘以旋转因子p W N ,p 称为旋转因子的指数。例如N =8 =3 2 时各级的旋转因子: 第一级:L=1, 有1个旋转因子:p W N =J /4W N =J 2L W J=0 第二级:L=2,有2个旋转因子:p W N =J /2W N =J 2L W J=0,1 第三级:L=3,有4个旋转因子:p W N =J W N =J 2L W J=0,1,2,3 对于N =M 2的一般情况,第L 级共有1 -L 2个不同的旋转因子: p W N =J 2L W J=0,1,2,… ,1 -L 2-1 L 2=M 2×M -L 2 = N ·M -L 2 故: 按照上面两式可以确定第L 级运算的旋转因子

Matlab编程实现FFT变换.

Matlab编程实现FFT变换及频谱分析的程序代码 内容 1.用Matlab产生正弦波,矩形波,以及白噪声信号,并显示各自时域波形图 2.进行FFT变换,显示各自频谱图,其中采样率,频率、数据长度自选 3.做出上述三种信号的均方根图谱,功率图谱,以及对数均方根图谱 4.用IFFT傅立叶反变换恢复信号,并显示恢复的正弦信号时域波形图 源程序 %*************************************************************** **********% % FFT实践及频谱分析% %*************************************************************** **********% %*************************************************************** **********% %***************1.正弦波****************% fs=100;%设定采样频率 N=128; n=0:N-1; t=n/fs; f0=10;%设定正弦信号频率 %生成正弦信号 x=sin(2*pi*f0*t); figure(1); subplot(231); plot(t,x);%作正弦信号的时域波形 xlabel('t'); ylabel('y'); title('正弦信号y=2*pi*10t时域波形'); grid; %进行FFT变换并做频谱图 y=fft(x,N);%进行fft变换 mag=abs(y);%求幅值 f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换 figure(1); subplot(232); plot(f,mag);%做频谱图 axis([0,100,0,80]); xlabel('频率(Hz)'); ylabel('幅值'); title('正弦信号y=2*pi*10t幅频谱图N=128'); grid; %求均方根谱

基于MATLAB的频谱分析及信号去噪仿真研究开题报告

辽宁石油化工大学 信息与控制工程学院 毕业设计(论文)开题报告 论文题目:基于MATLAB的频谱分析及信号去噪仿真研究 学生姓名:徐宏强 专业班级:信息0901 学号: 0903030123 指导教师:崔畅 2013 年 03 月 17日

填写说明: 1.题目的背景和意义 对题目的出处,背景和意义进行说明论述,不少于300字。2.题目研究现状概述 通过调研和查阅文献,对题目所涉及的技术、理论和研究成果进行说明论述,不少于1000字。 3.题目要完成的主要内容和预期目标 对题目要完成的主要内容进行说明,并说明达到的预期目标, 不少于300字 4.进度计划 从设计开始的教学周起,依据任务书的进度安排进行细化并以周为单位给出主要工作和完成的任务。 5.参考文献 对2引用的资料、论文或著作按照引用顺序列出参考文献(格式同论文《参考文献》)。不少于10篇(其中近3年的文献占1/3以上), 注:相应栏不够时自动加页。 排版要求:正文,宋体,小四,行距固定值20磅 要求学生在毕业设计(论文)开始后的第2周末完成《开题报告》,并交到指导教师评阅(交电子稿和双面打印稿)。

1.题目的背景和意义 随着时代的发展,信息的传输方式逐渐发展为通过信号的方式传送,信号在采集和传输的过程中,由于外界的影响及机器自身的原因难免会有噪声夹杂在其中,在这种情况下,会影响对信号的分析,尤其是对一些高精度数据影响更为巨大,所以对信号的去噪,提取出原始信号是一个重要课题,最为传统的去噪方式是让信号通过一个低通或者带通滤波器,通过这种方法滤去噪声,但是在这个过程中可能会使信号变得平滑失去突变信息,现今的数字滤波器分为有限冲激响应滤波器FIR和无限冲激响应滤波器IIR,在各种信号处理与分析的中,最重要的数学工具是傅立叶变换,而常用的处理工具是MATLAB,利用MATLAB设计滤波器,可以随时对比设计要求,并调整滤波器参数,这样更为直观简便,减轻工作量,有利于对滤波器的设计优化,对信号的去噪有更好的帮助。 2.题目研究现状概述 随着计算机的发展,数字信号处理的理论与技术得到飞速发展,20世纪60年代以来,我国形成了一系列的数字信号处理的理论与算法,比如,数字滤波器,快速傅立叶变换(FFT),这些都是数字信号处理的技术基础,随着信息科技的飞速发展,信号处理取得了重大的飞跃。信号的去噪是数字信号处理中的一个很重要的研究课题,在现今的各种信号中,噪声一般分为两类:相干噪声和随机噪声,相干噪声包括面波,多次波等,随机噪声包括测量误差,环境噪声等。而对信号滤除噪声的方法大致分为三种:基于傅立叶变换的去噪法,相干平均去噪法,和基于小波变换的去噪法。信号去噪在雷达的使用和通信中有着极大的作用,经过先辈们不断的研究与实验,运用滤波器进行信号去噪的方法已经相当完美了,数字滤波器, 是数字信号处理中及其重要的一部分。随着信息时代和数字技术的发展,受到人们越来越多的重视。数字滤波器可以通过数值运算实现滤波,所以数字滤波器处理精度高、稳定、体积小、重量轻、灵活不存在阻抗匹配问题,可以实现模拟滤波器无法实现的特殊功能,数字滤波器分为IIR数字滤波器和FIR数字滤波器。 信号处理基本涉及到所有的工程技术领域,而信号去噪是信号处理的一个非常重要的分支,而频谱分析又是信号处理中一个非常重要的分析手段,一般的频谱分析都依靠传统频谱分析仪来完成,价格昂贵,体积庞大,不便于工程技术人员的携带。而利用MATLAB就会免去以上的问题。信号去噪被用于从一堆波音资料中提取有用信息去除干扰,提高波音资料信噪比。为了提高信噪比,人们根据信号和噪声的各种特征差异,设计了许多去噪方法,并在应用中取得了很好的成果。信号去噪的很多方法都是利用短时傅立叶变换来滤波去噪,但是短时傅立叶变换不能同时兼顾时间分辨率和

MATLAB中FFT结果的物理意义

FFT结果的物理意义 最近正在做一个音频处理方面的项目,以前没有学过fft,只是知道有这么个东西,最近这一用才发现原来欠缺这么多,最基本的,连fft的输入和输出各自代表什么都不知道了,终于在网上查到这样的一点资料,得好好保存了,也欢迎大家分享。 FFT是离散傅立叶变换的快速算法,可以将一个信号变换到频域。有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。这就是很多信号分析采用FFT变换的原因。另外,FFT可以将一个信号的频谱提取出来,这在频谱分析方面也是经常用的。虽然很多人都知道FFT是什么,可以用来做什么,怎么去做,但是却不知道FFT之后的结果是什意思、如何决定要使用多少点来做FFT。现在圈圈就根据实际经验来说说FFT结果的具体物理意义。一个模拟信号,经过ADC采样之后,就变成了数字信号。采样定理告诉我们,采样频率要大于信号频率的两倍,这些我就不在此罗嗦了。 采样得到的数字信号,就可以做FFT变换了。N个采样点,经过FFT之后,就可以得到N个点的FFT结果。为了方便进行FFT运算,通常N取2的整数次方。假设采样频率为Fs,信号频率F,采样点数为N。那么FFT之后结果就是一个为N点的复数。每一个点就对应着一个频率点。这个点的模值,就是该频率值下的幅度特性。具体跟原始信号的幅度有什么关系呢?假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。而第一个点就是直流分量,它的模值就是直流分量的N倍。而每个点的相位呢,就是在该频率下的信号的相位。第一个点表示直流分量(即0Hz),而最后一个点N的再下一个点(实际上这个点是不存在的,这里是假设的第N+1个点,也可以看做是将第一个点分做两半分,另一半移到最后)则表示采样频率Fs,这中间被N-1个点平均分成N等份,每个点的频率依次增加。例如某点n所表示的频率为:Fn=(n-1)*Fs/N(ps:横坐标第n个点对应的频率值Fn的计算公式。整个横坐标代表了采样频率Fs,被分为N点。故其频率分辨率为Fs/N)。由上面的公式可以看出,Fn所能分辨到频率为为Fs/N,如果采样频率Fs为1024Hz,采样点数为1024点,则可以分辨到1Hz。1024Hz的采样率采样1024点,刚好是1秒,也就是说,采样1秒时间的信号并做FFT,则结果可以分析到1Hz,如果采样2秒时间的信号并做FFT,则结果可以分析到0.5Hz。如果要提高频率分辨力,则必须增加采样点数,也即采样时间。频率分辨率和采样时间是倒数关系。 假设FFT之后某点n用复数a+bi表示,那么这个复数的模就是An=根号a*a+b*b,相位就是Pn=atan2(b,a)。根据以上的结果,就可以计算出n点(n≠1,且n<=N/2)对应的信号的表达式为:An/(N/2)*cos(2*pi*Fn*t+Pn),即2*An/N*cos(2*pi*Fn*t+Pn)。对于n=1点的信号,是直流分量,幅度即为A1/N。由于FFT结果的对称性,通常我们只使用前半部分的结果,即小于采样频率一半的结果。 好了,说了半天,看着公式也晕,下面圈圈以一个实际的信号来做说明。假设我们有一个信号,它含有2V的直流分量,频率为50Hz、相位为-30度、幅度为3V的交流信号,以及一个频率为75Hz、相位为90度、幅度为1.5V的交流信号。用数学表达式就是如下:S=2+3*cos(2*pi*50*t-pi*30/180)+1.5*cos(2*pi*75*t+pi*90/180)式中cos参数为弧度,所以-30度和90度要分别换算成弧度。我们以256Hz的采样率对这个信号进行采样,总共采样256点。按照我们上面的分析,Fn=(n-1)*Fs/N,我们可以知道,每两个点之间的间距就是1Hz,第n个点的频率就是n-1。我们的信号有3个频率:0Hz、50Hz、75Hz,应该分别在第1个点、第51个点、第76个点上出现峰值,其它各点应该接近0。实际情况如何呢?我们来看看FFT的结果的模值如图所示。

基于MATLAB的信号频谱分析仪的实现

基于的信号频谱分析仪的实现 一、概述 信号处理几乎涉及到所有的工程技术领域,而频谱分析又是信号处理中一个非常重要的分析手段。一般的频谱分析都依靠传统频谱分析仪来完成,价格昂贵,体积庞大,不便于工程技术人员的携带。虚拟频谱分析仪改变了原有频谱分析仪的整体设计思路,用软件代替了硬件,使工程技术人员可以用一部笔记本电脑到现场就可轻松完成信号的采集、处理及频谱分析。 在工程领域中,是一种倍受程序开发人员青睐的语言,对于一些需要做大量数据运算处理的复杂应用以及某些复杂的频谱分析算 法显得游刃有余。本文将重点介绍基于的虚拟频谱分析仪的设计。本文设计的虚拟频谱分析仪的功能包括: () 音频信号信号输入。输入的途径包括从声卡输入、从文件输入、从信号发生器输入; () 信号波形分析。包括幅值、频率、周期、相位的估计,并计算统计量的峰值、均值、均方值和方差等信息; () 信号频谱分析。频率、周期的估计,图形显示幅值谱、相位谱和功率谱等信息的曲线。

二、实验原理 时域抽样定理 时域抽样定理给出了连续信号抽样过程中信号不失真的约束条件:对于基带信号,信号抽样频率 大于等于倍的信号最高频 率 ,即 。时域抽样是把连续信号 变成适于数字 系统处理的离散信号 。对连续信号 以间隔抽样,则可得到 的离散序列为 。 图 连续信号抽样的离散序列 若 ,则信号 与 的频谱之间存在: 其中: 的频谱为 , 的频谱为 。 可见,信号时域抽样导致信号频谱的周期化。 ()为抽 样角频率, 为抽样频率。数字角频率Ω与模拟角频率ω的关系为:Ωω。 离散傅立叶变换() 有限长序列)(n x 的离散傅立叶变换()为 )e (j Ω X ()∑∞ -∞=-=n n X T )(j 1sam ωω)e (j ΩX []k X )e (j ωX )j (ωX T sam /2πω=[]k X ()t X []()kT t kT X X ==k ()t X []k X ()t X []()kT t kT X X ==k m sam f f 2≥sam f m f T f sam 1=

MATLAB中FFT的使用方法

MATLAB中FFT的使用方法 一.调用方法 X=FFT(x); X=FFT(x,N); x=IFFT(X); x=IFFT(X,N) 用MATLAB进行谱分析时注意: (1)函数FFT返回值的数据结构具有对称性。 例: N=8; n=0:N-1; xn=[4 3 2 6 7 8 9 0]; Xk=fft(xn) →Xk = 39.0000 -10.7782 + 6.2929i 0 - 5.0000i 4.7782 - 7.7071i 5.0000 4.7782 + 7.7071i 0 + 5.0000i -10.7782 - 6.2929i Xk与xn的维数相同,共有8个元素。Xk的第一个数对应于直流分量,即频率值为0。 (2)做FFT分析时,幅值大小与FFT选择的点数有关,但不影响分析结果。在IFFT时已经做了处理。要得到真实的振幅值的大小,只要将得到的变换后结果乘以2除以N即可。 二.FFT应用举例 例1:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。采样频率fs=100Hz,分别绘制N=128、1024点幅频图。 clf; fs=100;N=128; %采样频率和数据点数

n=0:N-1;t=n/fs; %时间序列 x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号 y=fft(x,N); %对信号进行快速Fourier变换 mag=abs(y); %求得Fourier变换后的振幅 f=n*fs/N; %频率序列 subplot(2,2,1),plot(f,mag); %绘出随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; %对信号采样数据为1024点的处理 fs=100;N=1024;n=0:N-1;t=n/fs; x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号 y=fft(x,N); %对信号进行快速Fourier变换 mag=abs(y); %求取Fourier变换的振幅 f=n*fs/N; subplot(2,2,3),plot(f,mag); %绘出随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=1024');grid on; subplot(2,2,4) plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=1024');grid on; 运行结果:

MATLAB关于FFT频谱分析的程序

MATLAB关于FFT频谱分析的程序 %***************1.正弦波****************% fs=100;%设定采样频率 N=128; n=0:N-1; t=n/fs; f0=10;%设定正弦信号频率 %生成正弦信号 x=sin(2*pi*f0*t); figure(1); subplot(231); plot(t,x);%作正弦信号的时域波形 xlabel('t'); ylabel('y'); title('正弦信号y=2*pi*10t时域波形'); grid; %进行FFT变换并做频谱图 y=fft(x,N);%进行fft变换 mag=abs(y);%求幅值 f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换 figure(1); subplot(232); plot(f,mag);%做频谱图 axis([0,100,0,80]); xlabel('频率(Hz)'); ylabel('幅值');

title('正弦信号y=2*pi*10t幅频谱图N=128'); grid; %求均方根谱 sq=abs(y); figure(1); subplot(233); plot(f,sq); xlabel('频率(Hz)'); ylabel('均方根谱'); title('正弦信号y=2*pi*10t均方根谱'); grid; %求功率谱 power=sq.^2; figure(1); subplot(234); plot(f,power); xlabel('频率(Hz)'); ylabel('功率谱'); title('正弦信号y=2*pi*10t功率谱'); grid; %求对数谱 ln=log(sq); figure(1); subplot(235); plot(f,ln);

基于matlab的频谱分析仪设计

Frequency Analyzer YangXiao M2013705103 HuaZhong University of Science and Technology School of Mechanical Science and Engineering Abstract: Matlab Is a numerical analysis, matrix calculation, scientific data visualization and nonlinear dynamic state system modeling and simulation, and other functions of practical software engineering.It’s easy to use the windows environment and cast off a tradition on the interactive programming language (such as C, Fortran) Edit mode In large range.In this report,The task is to design a frequency analyzer by using matlab. Keyword:frequency analyzer;Matlab;time-domain analysis;frequency-domain analysis;

1.Preface MATLAB is called Matrix Laboratory,which is designed by the United States MathWorks company.It’s a commercial mathematical software. Matlab can be use for Matrix operations, mapping functions and data, algorithm, creating the user interface, connect to other programming languages procedures, mainly used in engineering calculations, control design, signal processing and communications, image processing, signal detection, design and financial modeling analysis and other fields. GUI (Graphical User Interface, referred to as GUI, known Graphical User Interface) is displayed using the graphical user interface of computer operations.. Matlab has a powerful GUl tool. In this report, by using matlab GUI tool we could design a frequency analyzer. Frequency analyzer is the instrument which could be used to study the structure of the electrical signal spectrum, and used to measure the signal parameters of signal distortion, modulation, frequency stability and spectral purity.Frequency analyzer could be used to measure some parameters of amplifier and filter circuit system , and it is a kind of multipurpose electronic measuring instrument. FFT (Fast Fourier Transformation) is the fast algorithm of DFT(discrete Fourier transformtion), which is based on discrete Fourier transform.By using FFT we could get the answer faster than DFT.

利用MATLAB实现信号DFT的计算

07级电信(2)班 刘坤洋 24 实验一 利用MATLAB 实现信号DFT 的计算 一、实验目的: 1、熟悉利用MATLAB 计算信号DFT 的方法 2、掌握利用MATLAB 实现由DFT 计算线性卷积的方法 二、实验设备:电脑、matlab 软件 三、实验内容: 1、练习用matlab 中提供的内部函数用于计算DFT (1) fft (x ),fft (x ,N ),ifft (x ),ifft (x ,N )的含义及用法 (2) 在进行DFT 时选取合适的时域样本点数N 请举例,并编程实现 题目: 源程序: >> N=30; %数据的长度 >>L=512; %DFT 的点数 >>f1=100; f2=120; >>fs=600; %抽样频率 >>T=1/fs; %抽样间隔 >>ws=2*pi*fs; >>t=(0:N-1)*T; >>f=cos(4*pi*f1*t)+cos(4*pi*f2*t); >>F=fftshift(fft(f,L)); >>w=(-ws/2+(0:L-1)*ws/L)/(2*pi); >>hd=plot(w,abs(F)); >>ylabel('幅度谱') >> xlabel('频率/Hz') 的频谱 分析利用)π4cos()π4cos()(DFT 21t f t f t x +=Hz 600,Hz 120,Hz 10021===s f f f

>> title('my picture') 结果图: (3) 在对信号进行DFT 时选择hamming 窗增加频率分辨率 请举例,并编程实现 题目: 源程序:>> N=50; %数据的长度 >>L=512; %DFT 的点数 >>f1=100;f2=150; >>fs=600; %抽样频率 >>T=1/fs; %抽样间隔 >>ws=2*pi*fs; >>t=(0:N-1)*T; >>f=cos(4*pi*f1*t)+0.15*cos(4*pi*f2*t); 的频谱 分析利用)π4cos(15.0)π4cos()(DFT 21t f t f t x +=Hz 600,Hz 150,Hz 10021===s f f f

基于MATLAB的频谱分析仪设计

基于MATLAB的信号频谱分析仪的实现 一、概述 信号处理几乎涉及到所有的工程技术领域,而频谱分析又是信号处理中一个非常重要的分析手段。一般的频谱分析都依靠传统频谱分析仪来完成,价格昂贵,体积庞大,不便于工程技术人员的携带。虚拟频谱分析仪改变了原有频谱分析仪的整体设计思路,用软件代替了硬件,使工程技术人员可以用一部笔记本电脑到现场就可轻松完成信号的采集、处理及频谱分析。 在工程领域中,MA TLAB是一种倍受程序开发人员青睐的语言,对于一些需要做大量数据运算处理的复杂应用以及某些复杂的频谱分析算法MA TLAB显得游刃有余。本文将重点介绍虚拟频谱分析仪、MA TLAB软件及对正弦信号的频谱分析。 1.1虚拟频谱分析仪的功能包括: (1) 音频信号信号输入。输入的途径包括从声卡输入、从WAV文件输入、从信号发生器输入; (2) 信号波形分析。包括幅值、频率、周期、相位的估计,并计算统计量的峰值、均值、均方值和方差等信息; (3) 信号频谱分析。频率、周期的估计,图形显示幅值谱、相位谱和功率谱等信息的曲线。 2.1MA TLAB软件

二、实验原理 2.1快速傅立叶变换(FFT) 在各种信号序列中,有限长序列占重要地位。对有限长序列可以利用离散傅立叶变换(DFT)进行分析。DFT不但可以很好的反映序列的频谱特性,而且易于用快速算法(FFT)在计算机上进行分析。 有限长序列的DFT是其z变换在单位圆上的等距离采样,或者说是序列傅立叶的等距离采样,因此可以用于序列的谱分析。FFT是DFT 的一种快速算法,它是对变换式进行一次次分解,使其成为若干小数据点的组合,从而减少运算量。 MATLAB为计算数据的离散快速傅立叶变换,提供了一系列丰富的数学函数,主要有Fft、Ifft、Fft2 、Ifft2, Fftn、ifftn和Fftshift、Ifftshift等。当所处理的数据的长度为2的幂次时,采用基-2算法进行计算,计算速度会显著增加。所以,要尽可能使所要处理的数据长度为2的幂次或者用添零的方式来添补数据使之成为2的幂次。 Fft函数调用方式:○1Y=fft(X); ○2Y=fft(X,N); ○3Y=fft(X,[],dim)或Y=fft(X,N,dim)。 函数Ifft的参数应用与函数Fft完全相同。 2.2周期图法功率谱分析原理 周期图法是把随机数列x(n)的N个观测数据视为能量有限的序列,直接计算x(n)的傅立叶变换,得X(k),然后再取幅值的平

关于使用Matlab里Powergui的FFTTool分析的问题及解决办法

首先设置 POWERLIB—》powergui,将该模块拖入模型中即可 在需要进行频谱分析的地方连接一示波器 示波器参数设定: Parameters—》Data history—》Save data to workspace; Format—》Structure with time. 运行一次后,双击powergui—》FFT Analysis. 1. 问题1及解决办法 仿真完成后,采用Powergui分析FFT,有时会发生错误:"simulation time of the signals is not enough long for the given fundamental frequency". 很多论坛说是仿真时间短了,可能这也是原因,不过更有可能是这样: FFT的数据来自于示波器SCOPE,在SCOPE PARAMETERS/GENERAL选项卡/SAMPLING 中,有DECIMATION和SAMPLE TIME两项,DECIMATION的意思是 The Decimation parameter allows you to write data at every nth sample, where n is the decimation factor. The default decimation, 1, writes data at every time step. 所以,如果选择DECIMATION,记录数据的时刻为第N个采样点,采样点间的时间间隔为采样步长,而在MATLAB Simulink中,如果采用变步长仿真,采样周期就是变化的,这样就很难对采样的数据进行FFT分析,或许软件只认可采样周期一定的数据,所以会出现文首的错误。 如果选择sample time,那么采样周期固定(与仿真步长无关),这样就可以进行FFT 分析了。所以如果遇到文首的错误,可以尝试将示波器的SAMPLing改为sample time,并设定采样周期,Sampling time

基于MATLAB的信号波形与频谱分析 精品

辽宁科技大学毕业设计(论文)第I页 基于MATLAB的信号波形与频谱分析 摘要 本文利用MATLAB软件进行信号频谱分析的设计,并通过GUI界面(图形用户界面)实现信号频谱分析的动态设计。用户可与计算机交互式地进行对象参数的设置、控制算法的选取、以及对离散信号与连续信号的动态频谱分析。并利用MATLAB内嵌的Simulink模块,实现系统的信号频谱分析,满足不同用户的不同要求。 MATLAB的GUIDE是专门用于图形用户界面(GUI)程序设计的快速开发环境,本文从介绍GUIDE入手结合具体的软件图形界面实例,给出了利用GUIDE制作图形用户界面的基本方法。通过本文的研究得出利用GUIDE设计的仿真界面不仅可以对离散信号与连续信号的动态频谱进行相关分析,而且还可以对此问题作进一步的预测和分析。基于GUIDE技术制作的图形用户界面,具有友好性,开放性,方便科研人员不断地研究和扩充。 关键词频谱分析;GUI;SIMULINK;MATLAB

辽宁科技大学毕业设计(论文)第II页 Abstract Using MATLAB software for signal spectrum analysis of the design, and through the GUI interface (graphical user interface) signal spectrum analysis of the dynamic design. Users can interactively with the computer targeting parameters for the establishment, control algorithm selection, and the discrete signals and continuous signal analysis of the dynamic spectrum. MATLAB and Simulink embedded module, the signal system to achieve spectral analysis, meet the needs of different users with different needs. MATLAB GUIDE is devoted to the graphical user interface (GUI) design procedures for the rapid development environment, This paper introduced GUIDE start from the context of the specific examples of graphical interface software, GUIDE is produced using a graphical user interface methods. Through this paper, the study of the use of simulation GUIDE interface design can not only right for discrete signal and the signal dynamic spectrum analysis, but also the issue for further analysis and forecasts. GUIDE technology based on the production of graphical user interface is friendly and open, facilitate researchers continue to study and expanded. Keywords Spectrum Analysis ;GUI;SIMULINK;MATLAB

实验二 FFT算法的MATLAB实现

班级:学号:姓名 实验二FFT算法的MATLAB实现 (一)实验目的: (1)掌握用matlab进行FFT在数字信号处理中的高效率应用。 (2)学习用FFT对连续信号和时域离散信号进行谱分析。 (二)实验内容及运行结果: 题1:若x(n)=cos(nπ/6)是一个N=12的有限序列,利用MATLAB计算它的DFT 并进行IDFT变换同时将原图与IDFT变换后的图形进行对比。当求解IFFT变换中,采样点数少于12时,会产生什么问题。 程序代码: N=12; n=0:11; Xn=cos(n*pi/6); k=0:11; nk=n'*k; WN=exp(-j*2*pi/N) WNnk=WN.^nk XK=Xn*WNnk; figure(1) stem(Xn) figure(2) stem(abs(XK)) 运行结果:

IFFT变换中,当采样点数少于12时图像如下图显示:

分析:由图像可以看出,当采样点数小于12时,x(n)的频谱不变,周期为6,而XK 的频谱图发生改变。 题2:对以下序列进行谱分析 132()()103()8470x n R n n n x n n n =+≤≤?? =-≤≤??? 其他n 选择FFT 的变换区间N 为8和16点两种情况进行频谱分析,分别打印其幅频特 性曲线并进行对比、分析和讨论。 ㈠ 程序代码: x=ones(1,3);nx=0:2; x1k8=fft(x,8); F=(0:length(x1k8)-1)'*2/length(x1k8); %进行对应的频率转换 stem(f,abs(x1k8));%8点FFT title('8点FFTx_1(n)'); xlabel('w/pi'); ylabel('幅度'); N=8时:

相关主题
文本预览
相关文档 最新文档