maxwell电机气隙磁密与用matlab进行fft谐波分析.docx

上传人:b****0 文档编号:12506155 上传时间:2023-04-19 格式:DOCX 页数:20 大小:348.19KB
下载 相关 举报
maxwell电机气隙磁密与用matlab进行fft谐波分析.docx_第1页
第1页 / 共20页
maxwell电机气隙磁密与用matlab进行fft谐波分析.docx_第2页
第2页 / 共20页
maxwell电机气隙磁密与用matlab进行fft谐波分析.docx_第3页
第3页 / 共20页
maxwell电机气隙磁密与用matlab进行fft谐波分析.docx_第4页
第4页 / 共20页
maxwell电机气隙磁密与用matlab进行fft谐波分析.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

maxwell电机气隙磁密与用matlab进行fft谐波分析.docx

《maxwell电机气隙磁密与用matlab进行fft谐波分析.docx》由会员分享,可在线阅读,更多相关《maxwell电机气隙磁密与用matlab进行fft谐波分析.docx(20页珍藏版)》请在冰豆网上搜索。

maxwell电机气隙磁密与用matlab进行fft谐波分析.docx

maxwell电机气隙磁密与用matlab进行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。

由上面的公式可以看出,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的结果的模值如图所示。

              图1FFT结果

  从图中我们可以看到,在第1点、第51点、和第76点附近有

比较大的值。

我们分别将这三个点附近的数据拿上来细看:

1点:

512+0i

2点:

-2.6195E-14-1.4162E-13i

3点:

-2.8586E-14-1.1898E-13i

50点:

-6.2076E-13-2.1713E-12i

51点:

332.55-192i

52点:

-1.6707E-12-1.5241E-12i

75点:

-2.2199E-13-1.0076E-12i

76点:

3.4315E-12+192i

77点:

-3.0263E-14+7.5609E-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)=1.5。

可见,从频谱分析出来

的幅度是正确的。

  然后再来计算相位信息。

直流信号没有相位可言,不用管

它。

先计算50Hz信号的相位,atan2(-192,332.55)=-0.5236,

结果是弧度,换算为角度就是180*(-0.5236)/pi=-30.0001。

计算75Hz信号的相位,atan2(192,3.4315E-12)=1.5708弧度,

换算成角度就是180*1.5708/pi=90.0002。

可见,相位也是对的。

根据FFT结果以及上面的分析计算,我们就可以写出信号的表达

式了,它就是我们开始提供的信号。

  总结:

假设采样频率为Fs,采样点数为N,做FFT之后,某

一点n(n从1开始)表示的频率为:

Fn=(n-1)*Fs/N;该点的模值

除以N/2就是对应该频率下的信号的幅度(对于直流信号是除以

N);该点的相位即是对应该频率下的信号的相位。

相位的计算

可用函数atan2(b,a)计算。

atan2(b,a)是求坐标为(a,b)点的角

度值,范围从-pi到pi。

要精确到xHz,则需要采样长度为1/x秒

的信号,并做FFT。

要提高频率分辨率,就需要增加采样点数,

这在一些实际的应用中是不现实的,需要在较短的时间内完成

分析。

解决这个问题的方法有频率细分法,比较简单的方法是

采样比较短时间的信号,然后在后面补充一定数量的0,使其长度

达到需要的点数,再做FFT,这在一定程度上能够提高频率分辨力。

具体的频率细分法可参考相关文献。

[附录:

本测试数据使用的matlab程序]

closeall;%先关闭所有图片

Adc=2;  %直流分量幅度

A1=3;  %频率F1信号的幅度

A2=1.5;%频率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+A1*cos(2*pi*F1*t+pi*P1/180)+A2*cos(2*pi*F2*t+pi*P2/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];

fori="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('相位-频率曲线图')

maxwell电机气隙磁密与用matlab进行fft谐波分析

谐波分析,气隙磁密

本帖最后由zdh700于2010-8-409:

57编辑

小弟最近学习了如何从maxwell2D中生成气隙磁密波形,并且用matlab编了一个小程序对波形数据进行谐波分析。

这些东西对坛子里的大虾来说很简单,但是对小弟这样才疏学浅的初学者来说还是挺有用的。

所以在此同大家分享具体的分析步骤:

1.对电机进行静态场分析,分析完后,进入后处理

下载(37.19KB)

2010-8-409:

22

2.

需要在气隙中间画一条圆弧线。

点开deometry

菜单,点creat

再选Arc

如下图所示。

下载(24.48KB)

2010-8-409:

22

然后输入圆弧的中心(0,0)回车。

在下一个界面输入起始点坐标。

最后一个界面输入这条弧线上的采样点数(250),圆弧角90度,圆弧的分段数目(250),名字以及线的颜色,最后回车,就会得到下图的圆弧了。

下载(13KB)

2010-8-409:

22

  

下载(18.6KB)

2010-8-409:

22

  

下载(18.29KB)

2010-8-409:

22

  

下载(6.56KB)

2010-8-409:

22

3.需要得到气隙磁密。

打开后处理计算器,依次选择qty—B,即选择磁密矢量。

选择geom—line—airgap_line,即选中刚才画的那条弧线。

选择unitvect—2dnormal,求取圆弧线的径向分量。

选择dot(点乘),求取圆弧线上的B的径向分量。

再选一遍那个圆弧线,然后点2dplot,就会出现那个磁密分布图了。

下载(30.96KB)

2010-8-409:

22

下载(31.94KB)

2010-8-409:

22

下载(25.33KB)

2010-8-409:

22

下载(29.77KB)

2010-8-409:

22

下载(30.82KB)

2010-8-409:

22

[attach]58086[/attach]

下载(35.08KB)

2010-8-409:

22

下载(17.12KB)

2010-8-409:

22

4.虽然maxwell本身也可以做fft分析,但小弟还是喜欢把数据导出来在matlab中进行分析,这样更灵活一些。

导出数据。

点击plot菜单—saveas—2dplot。

在弹出的对话框中输入数据文件的名字。

(小弟实在找不到更好的办法导出数据了,如有哪位达人有更好的方法,请赐教。

小弟在此谢谢了。

 

下载(11.8KB)

2010-8-409:

22

下载(11.38KB)

2010-8-409:

22

5.  对气隙磁密进行谐波分析。

将第四步中生成的.dat文件拷出来放到一个文件夹中(保证matlab和数据文件的路径相同)。

然后将matlab文件也拷贝到这个文件夹中。

打开这个m文件,输入Ns=500(需要进行分析的采样点个数,由于我们在maxwell中只分析了一个磁极下的磁密,所以只有半个周期,我们需要通过镜像生成后半个周期,这样总采样点个数为250*2=500)。

Order是需要分析的谐波次数,输入11就是分析到11次谐波。

运行,就得到下面的两个图了,第一个是原始波形,基波分量以及各高次谐波;第二个是个谐波分量的幅值大小柱状图。

下载(23.96KB)

2010-8-409:

22

下载(18.78KB)

2010-8-409:

22

这样一个电机气隙磁密谐波分析就完成了。

M文件我以附件的形式发给大家。

如果有什么问题可以留言给我。

;

clc

clearall;

formatlong;

Ns=500;

order=11;

%**********************readthepositionandfluxdensity************************

fid=fopen('B.dat','r');%opentheoriginalfile

fidnew=fopen('b1.dat','w');%writethenewfile

whilefeof(fid)==0

tline=fgetl(fid);%tline?

if~ischar(tline),break,end

temp=abs(tline);

Nlength=length(tline);

isemptyline=0;%

ifNlength==0

isemptyline=1;

end

allspace=0;%

isspace=0;

fori=1:

Nlength

T=temp(i);

ifT==32

isspace=isspace+1;

end

ifisspace==Nlength

allspace=1;

break

end

end

findalpha=0;%

forj=1:

Nlength

T=temp(j);

if((T>=65)&(T>=90))|((T>=97)&(T>=122))

findalpha=1;

break;

end

end

if(~findalpha)&(~allspace)&(isemptyline==0)%

fprintf(fidnew,tline);

fprintf(fidnew,'\n');

end

end

fclose(fid);

fclose(fidnew);

fid1=fopen('b1.dat','r');

flux_position=fscanf(fid1,'%f',[2,Ns]);

fclose(fid1);

%********************************readfilefinish*****************************************

flux_position=flux_position';

pos=flux_position(:

1);

flux=flux_position(:

2);

figure;

plot(pos,flux,'r');%plotorigionalwaveform

holdon;

gridon;

fft1=fft(flux,Ns);

j=0;

amp_har=zeros(1,(order+1)/2);

form=1:

2:

order

j=j+1;

fft1=fft(flux,Ns);

fund_ele_front=fft1(m+1);

fund_ele_back=fft1(Ns+1-m);

amp_har(j)=(abs(fund_ele_front))/Ns*2;

fft1=0*fft1;

fft1(m+1)=fund_ele_front;

fft1(Ns+1-m)=fund_ele_back;

fft1=ifft(fft1,Ns);

fft1=real(fft1);

plot(pos,fft1);

holdon;

end

k=(1:

2:

order);

figure;

bar(k,amp_har);

gridon;

%peak_b=max(fft1)

%rms_b=0.707*peak_b

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1