- 积分
- 3680
- 回帖
- 0
- 西莫币
-
- 贡献
-
- 威望
-
- 存款
-
- 阅读权限
- 115
- 最后登录
- 1970-1-1
该用户从未签到
|
本帖最后由 dnawujun 于 2016-2-26 18:44 编辑
N为我们选择的数据的点数(包含整个周期),N1为Flux自动选的FFT点数
并且N1<=N-1
Flux按如下过程做FFT
1. 取N1为小于并最靠近N-1的,为2的幂的那个数
比如:
N-1=64,则取N1=64
N-1=200,则取N1=128
2. 如果N1=N-1,则直接做N-1个点数据的FFT
3. 如果N1!=N-1,则在原始数据上按N1+1个点做线性插值,然后
在插值后的数据上做N1个点的FFT
因FFT能解析的最高谐波次数为N1/2-1,所以即便是仿真了100个点的数据
而这时Flux取N1=64,则最高谐波次数为31,所以即便在FFT对话框里的
"Number of harmonics compute"输入1000,Flux也只输出31个谐波数据(不含直流分量的情况下)。
用matlab写程序对比一下结果
Matlab源代码
- %输入数据为t,y, workspace中的
- %t为时间,列向量
- %y为数据值(电流、电压等),列向量
- N=length(t);
- %取小于并最靠近N-1的,为2的幂的那个数
- N1=2^(nextpow2(N-1)-1);%也可以用2^floor(log2(N-1))
- if N1~=(N-1)
- t1=linspace(t(1),t(end),N1+1)';
- Fs=1/(t1(2)-t1(1));%采样频率
- y1=interp1(t,y,t1);%按N1+1个点线性插值
- y_fft=fft(y1,N1);%按N1个点做fft
- else %直接做fft
- Fs=1/(t(2)-t(1));%采样频率
- y_fft=fft(y);
- End
- %实际幅值需要除以N1/2
- amps=abs(y_fft)/(N1/2);
- %实际直流分量只需要除以N1
- amps(1)=amps(1)/2;
- %因FFT结果是对称的,所以只需要前半部分
- amps=amps(1:N1/2);
- %相位
- angles=angle(y_fft);
- angles=angles(1:N1/2);
- %各次谐波的频率
- n=(1:N1/2)';
- freqs=(n-1)*Fs/N1;
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
查看全部评分
|