function test
Fs = 256; % 采样频率
T = 1/Fs; % 采样时间
t = (0:Fs-1)T; % 时间序列(时间轴)
S=2+3cos(2pi50t-pi30/180)+15cos(2pi75t+pi90/180);
f= Fslinspace(0,1,Fs);
Y=2abs(fft(S,Fs)/Fs); %得到正确的峰值
plot(f,Y)
1、在命令行窗口,输入如下命令:load sunspotdatyear = sunspot(:,1);relNums =sunspot(:,2);
plot(year,relNums)title('Sunspot Data')。
2、按“Enter键”,得到Figure1。
2、在命令行窗口,输入如下命令:plot(year(1:50),relNums(1:50),'b-');。
3、信号处理的基本工具是快速傅立叶变换(FFT)。要获取太阳黑子数据的FFT。在命令行窗口,输入如下命令:plot(Y,'ro')title('Fourier Coefficients in the Complex Plane');xlabel('Real Axis');ylabel('Imaginary Axis');。运行如下图。
4、周期/年的比例有些不方便。可以用年/周期来作图,估计一个周期的长度。在命令行窗口,输入如下命令:plot(freq(1:40),power(1:40))xlabel('cycles/year')。
5、最后,通过选择最强频率来更精确地确定周期长度。红点定位这一点。在命令窗口输入:hold on;index = find(power == max(power));mainPeriodStr = num2str(period(index));plot
(period(index),power(index),'r', 'MarkerSize',25);text(period(index)+2,power(index),['Period = ',mainPeriodStr]);hold off;。
% 下面的程序里Pn 存的就是基波相位 如果求的是谐波相位,稍微修改即可
x = load('datadat'); %load 数据
fs=10000; % 采样频率,自己根据实际情况设置
N=length(x); % x 是待分析的数据
n=1:N;
%1-FFT
X=fft(x); % FFT
X=X(1:N/2);
Xabs=abs(X);
Xabs(1) = 0; %直流分量置0
[Amax,index]=max(Xabs);
if(Xabs(index-1) > Xabs(index+1))
a1 = Xabs(index-1) / Xabs(index);
r1 = 1/(1+a1);
k01 = index -1;
else
a1 = Xabs(index) / Xabs(index+1);
r1 = 1/(1+a1);
k01 = index;
end
Fn = (k01+r1-1)fs/N; %基波频率
An = 2pir1Xabs(k01)/(Nsin(r1pi)); %基波幅值
Pn = phase(X(k01))-pir1; %基波相位 单位弧度
Pn = mod(Pn(1),pi);
Y(1:halfLength+1)中1:halfLength+1是索引,而索引必须是正整数,所以,不能从0开始,要都加1,但是指却是从0值开始到最后一个值。
至于f的算法是不一样的,在f
=((0:halfLength)+1)Fs1/n这里,0:halfLength)+1是数值,不是索引,结果是一个矢量。
以上就是关于求解一个MATLAB的有关傅里叶变换、FFT函数的问题,求具体的MATLAB程序。全部的内容,包括:求解一个MATLAB的有关傅里叶变换、FFT函数的问题,求具体的MATLAB程序。、如何在matlab的powergui里面进行fft分析、FFT测量相位具体算法。在matlab中如何使用进行编程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)