如果没看错是再求信号的功率谱,
Fs=2048;
%
设定采样点数
FFTN=1024;
%设定FFT点数
t=(0:1023)/Fs;
%
设定正弦信号的采样时间点
x=2sin(2pi256t+pi/8);
%
产生正弦信号
y=fftshift(fft(x,FFTN));
%这句没太看懂,应该是求信号的功率谱,但结果是复数,需取模,这句需楼主在核实下
yam=abs(y)2/FFTN;
%需取模,
f=((0:FFTN-1)-FFTN/2)Fs/FFTN;
%设定画图时的横坐标,Hz为单位
figure(1);plot(f,yam);xlabel('f(Hz)');ylabel('幅值');
%
以横坐标Hz,纵坐标取模结果,画图,
[amax
index]=max(yam);
%取纵坐标最大值和序号
gmax=angle(y(index));
%这句也没太看,取出模值最大值进行什么处理,
fmax=f(index);
%取出模值最大点对应的频率值
以上除了标注的,其他应该没问题,楼主在看看那两句吧,查查matlab的help
FFT(快速傅里叶变换)是一种实现DFT(离散傅里叶变换)的快速算法,是利用复数形式的离散傅里叶变换来计算实数形式的离散傅里叶变换,matlab中的fft()函数是实现该算法的实现。
MATLAB它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
快速傅里叶变换, 即利用计算机计算离散傅里叶变换(DFT)的高效、快速计算方法的统称,简称FFT。快速傅里叶变换是1965年由JW库利和TW图基提出的。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。
扩展资料:
matlab优势特点:
1、高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;
2、具有完备的图形处理功能,实现计算结果和编程的可视化;
3、友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;
4、功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。
参考资料来源:
百度百科-快速傅里叶变换
百度百科-MATLAB
FFT程序输入组复数输组复数想问输入底应该输入输复数含义给定组序列抽值何用FFT确定频率
首先fft函数应该复数每点实部虚部两部假设采用1024点fft采频率fs第点应0频率点第512点应fs/2频率点始找模值点其所应频率值应该要基波频率
FFT离散傅立叶变换快速算信号变换频域些信号域难看特征变换频域容易看特征信号析采用FFT变换原另外FFT信号频谱提取频谱析面经用
虽都知道FFT用做做却知道FFT结意思、何决定要使用少点做FFT模拟信号经ADC采变数字信号采定理告诉我采频率要于信号频率两倍些我罗嗦采数字信号做FFT变换N采点经FFTN点FFT结便进行FFT运算通N取2整数
假设采频率Fs信号频率F采点数NFFT结N点复数每点应着频率点点模值该频率值幅度特性具体跟原始信号幅度关系呢假设原始信号峰值AFFT结每点(除第点直流量外)模值AN/2倍第点直流量模值直流量N倍每点相位呢该频率信号相位第点表示直流量(即0Hz)点N再点(实际点存假设第N+1点看做第点做两半另半移)则表示采频率Fs间N-1点平均N等份每点频率依增加例某点n所表示频率:Fn =(n-1)Fs/N由面公式看Fn所能辨频率 Fs/N采频率Fs1024Hz采点数1024点则辨1Hz1024Hz采率采1024点刚1秒说采1秒间信号并做FFT则结析1Hz采2秒间信号并做FFT则结析05Hz要提高频率辨力则必须增加采点数即采间频率辨率采间倒数关系假设FFT某点n用复数a+bi表示复数模An=根号aa+bb相位Pn=atan2(b,a)根据结计算n点(n≠1且n<=N/2)应信号表达式:An/(N/2)cos(2piFnt+Pn)即2An/Ncos(2piFnt+Pn)于n=1点信号直流量幅度即A1/N由于FFT结称性通我使用前半部结即于采频率半结
说半看着公式晕面实际信号做说明假设我信号含2V直流量频率50Hz、相位-30度、幅度3V交流信号及频率75Hz、相位90度、幅度15V交流信号用数表达式:
S=2+3cos(2pi50t-pi30/180)+15cos(2pi75t+pi90/180)
式cos参数弧度所-30度90度要别换算弧度我256Hz采率信号进行采总共采256点按照我面析Fn=(n-1)Fs/N我知道每两点间间距1Hz第n点频率n-1我信号3频率:0Hz、50Hz、75Hz应该别第1点、第51点、第76点现峰值其各点应该接近0实际情况何呢
我看看FFT结模值图所示
图我看第1点、第51点、第76点附近比较值我别三点附近数据拿细看:
1点: 512+0i
2点: -26195E-14 - 14162E-13i
3点: -28586E-14 - 11898E-13i
50点:-62076E-13 - 21713E-12i
51点:33255 - 192i
52点:-16707E-12 - 15241E-12i
75点:-22199E-13 -10076E-12i
76点:34315E-12 + 192i
77点:-30263E-14 +75609E-13i
明显1点、51点、76点值都比较附近点值都认0即些频率点信号幅度0接着我计算各点幅度值别计算三点模值结:
1点: 512
51点:384
76点:192
按照公式计算直流量:512/N=512/256=2;50Hz信号幅度:384/(N/2)=384/(256/2)=3;75Hz信号幅度192/(N/2)=192/(256/2)=15见频谱析幅度确再计算相位信息直流信号没相位言用管先计算50Hz信号相位atan2(-192, 33255)=-05236,结弧度换算角度180(-05236)/pi=-300001再计算75Hz信号相位atan2(192, 34315E-12)=15708弧度换算角度18015708/pi=900002见相位
根据FFT结及面析计算我写信号表达式我始提供信号
总结:假设采频率Fs采点数N做FFT某点n(n1始)表示频率:Fn=(n-1)Fs/N;该点模值除N/2应该频率信号幅度(于直流信号除N);该点相位即应该频率信号相位相位计算用函数atan2(b,a)计算atan2(b,a)求坐标(a,b)点角度值范围-pipi要精确xHz则需要采度1/x秒信号并做FFT要提高频率辨率需要增加采点数些实际应用现实需要较短间内完析解决问题频率细比较简单采比较短间信号面补充定数量0使其度达需要点数再做FFT定程度能够提高频率辨力
具体频率细参考相关文献
附录:本测试数据使用matlab程序
close all; %先关闭所
Adc=2; %直流量幅度
A1=3; %频率F1信号幅度
A2=15; %频率F2信号幅度
F1=50; %信号1频率(Hz)
F2=75; %信号2频率(Hz)
Fs=256; %采频率(Hz)
P1=-30; %信号1相位(度)
P2=90; %信号相位(度)
N=256; %采点数
t=[0:1/Fs:N/Fs]; %采刻
%信号
S=Adc+A1cos(2piF1t+piP1/180)+A2cos(2piF2t+piP2/180);
%显示原始信号
plot(S);
title('原始信号');
figure;
Y = fft(S,N); %做FFT变换
Ayy = (abs(Y)); %取模
plot(Ayy(1:N)); %显示原始FFT模值结
title('FFT 模值');
figure;
Ayy=Ayy/(N/2); %换算实际幅度
Ayy(1)=Ayy(1)/2;
F=([1:N]-1)Fs/N; %换算实际频率值
plot(F(1:N/2),Ayy(1:N/2)); %显示换算FFT模值结
title('幅度-频率曲线图');
figure;
Pyy=[1:N/2];
for i="1:N/2"
Pyy(i)=phase(Y(i)); %计算相位
Pyy(i)=Pyy(i)180/pi; %换算角度
end;
plot(F(1:N/2),Pyy(1:N/2)); %显示相位图
title('相位-频率曲线图');
以上就是关于matlab中fft()用法全部的内容,包括:matlab中fft()用法、matlab中fft()函数是什么意思、若用fft快速卷积算法来得到两个序列的线性卷积计算结果,fft至少应取多少点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)