如何在matlab的powergui里面进行fft分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在matlab的powergui里面进行fft分析相关的知识,希望对你有一定的参考价值。

1、在命令行窗口,输入如下命令:load sunspot.datyear = 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;。

参考技术A 1.在仿真里面拖入powergui模块
2.设置所要分析的波形,保存入workspace,格式:Structure with time
3.进行仿真,完毕后,进入powergui的FFT Analysis
4.在Structure中选择信号名称等等。下面是开始计算的时间,特别是有的波形开始比较乱,建议你从比较稳定的一段开始计算,接着是计算的周期,数目越大,时间越长,可以有小数。
5.选择好信号之后,下面是选择基波频率,显示的最大频率,横轴的显示方式,总的显示格式等等
6.点下display就出来了。

[MATLAB&SIMULINK] 如何提取并处理Simscape Power System 中powergui的谐波分析数据

 

花了一两个小时研究了一番powergui的fft。在powergui中,FFT Analysis Tool如图所示

开发环境:MATLAB R2015a + Window 10 enterpirse

 

 那么如果我想提取出Simulink模型中的数据并且做fft处理,得到自己想要的分析图像,应该怎么办呢?

方法一:

其实MATLAB在这个过程中调用了power_fftscope()这个函数。它的函数原型可以在matlab的帮助文档中找到。函数调用的格式如下。

在command窗口里输入如下命令即可设定与调用由FFT Analysis Tool产生的波形数据

>> FFTDATA = power_fftscope(Va)    %实例化对象FFTDATA,它代表Va的fft结构体数据

FFTDATA = 

               time: [457947x1 double]
            signals: [1x1 struct]
          blockName: \'HP/VA\'
              input: 1
             signal: 1
          startTime: \'last\'
             cycles: 1
        fundamental: 60
       maxFrequency: 1000
    THDmaxFrequency: Inf
            THDbase: \'fund\'
                mag: [17x1 double]
              phase: [17x1 double]
               freq: [17x1 double]
                THD: 272.5235
       samplingTime: 4.3673e-06
    samplesPerCycle: 3816
        DCcomponent: 14.5702
     magFundamental: 48.1973

>> FFTDATA.fundamental = 100        %设定基频

FFTDATA = 

               time: [457947x1 double]
            signals: [1x1 struct]
          blockName: \'HP/VA\'
              input: 1
             signal: 1
          startTime: \'last\'
             cycles: 1
        fundamental: 100
       maxFrequency: 1000
    THDmaxFrequency: Inf
            THDbase: \'fund\'
                mag: [17x1 double]
              phase: [17x1 double]
               freq: [17x1 double]
                THD: 272.5235
       samplingTime: 4.3673e-06
    samplesPerCycle: 3816
        DCcomponent: 14.5702
     magFundamental: 48.1973

>> FFTDATA.cycles = 200          %设定周期数

FFTDATA = 

               time: [457947x1 double]
            signals: [1x1 struct]
          blockName: \'HP/VA\'
              input: 1
             signal: 1
          startTime: \'last\'
             cycles: 200
        fundamental: 100
       maxFrequency: 1000
    THDmaxFrequency: Inf
            THDbase: \'fund\'
                mag: [17x1 double]
              phase: [17x1 double]
               freq: [17x1 double]
                THD: 272.5235
       samplingTime: 4.3673e-06
    samplesPerCycle: 3816
        DCcomponent: 14.5702
     magFundamental: 48.1973

>> FFTDATA.maxFrequency = 7900      %设定最高频率

FFTDATA = 

               time: [457947x1 double]
            signals: [1x1 struct]
          blockName: \'HP/VA\'
              input: 1
             signal: 1
          startTime: \'last\'
             cycles: 200
        fundamental: 100
       maxFrequency: 7900
    THDmaxFrequency: Inf
            THDbase: \'fund\'
                mag: [17x1 double]
              phase: [17x1 double]
               freq: [17x1 double]
                THD: 272.5235
       samplingTime: 4.3673e-06
    samplesPerCycle: 3816
        DCcomponent: 14.5702
     magFundamental: 48.1973

>> x = FFTDATA.freq     %获得频率


x =


0
60
120
180
240
300
360
420
480
540
600
660
720
780
840
900
960


>> y = FFTDATA.mag       %获得幅值


y =


14.5702
48.1973
79.0183
18.0582
9.8706
7.3618
5.3919
4.5902
3.5941
3.4998
3.1022
2.7178
2.7215
2.3526
2.3970
2.6270
2.1154



之后通过简单的绘图命令我们就可以绘制出模型的频谱图。

 

 方法二:

 如果你只是很简单的想修改由FFT Analysis Tool生成的频谱分析图形,不妨试试下面简单的方法。

在command中新建一个figure

>> figure

打开后选择工具下的plot edit

 然后右键粘贴即可。

这样你就可以通过set()来设定figure的参数,改变图形的配置。具体要设定gca句柄。

比如

>> set(gca,\'yscale\',\'log\') %将y轴转换成对数坐标

 对于gca句柄,在[2]中有较为详尽的命令。

 

参考:

[1]:http://cn.mathworks.com/help/physmod/sps/powersys/ref/power_fftscope.html;jsessionid=db0b9a8ee73742bf537d1f0a3291?refresh=true#responsive_offcanvas

[2]:http://wenku.baidu.com/link?url=HqIyvz6p9G8IY1Xb01_sXcN_aZjdV8iUk2AuCby1T0WHIKxahcHTPozq2M8UgGqQdjzJElSpfEI2W83EB0gYbRbB3uVGxpJKQjJGJobwR6C

以上是关于如何在matlab的powergui里面进行fft分析的主要内容,如果未能解决你的问题,请参考以下文章

[MATLAB&SIMULINK] 如何提取并处理Simscape Power System 中powergui的谐波分析数据

在matlab中,如何画出一个信号的频谱图?

在matlab操作中如何进行换位操作?

使用 Matlab 对大数据 (16gB) 进行 FFT

使用Matlab进行大数据FFT(16gB)

从Matlab平台进行FFT到ARM平台C语言FFT频谱分析