请高人帮我解决基于MATLAB的FFT谐波分析问题 请写出详细步骤 谢谢!!(这里我提出了两个问题)

请高人帮我解决基于MATLAB的FFT谐波分析问题 请写出详细步骤 谢谢!!(这里我提出了两个问题),第1张

我来回答吧

1.首先建立信号模型并采样

%谐波分析仿真数据生成 CreatData.m

clc

fs=3000f0=50

N=1024

n=1:N

t=(n-1)/fs

m=13

Am=[380.4 0 2.035 0 3.156 0 1.042 0 4.291 0 16.13 0 2.016 ]

PH=[0 0 60 0 135 0 157.5 0 0 0 60 0 0]

x=zeros(1,N)

for k=1 : m

x=x+Am(k)*cos(2*pi*f0*k*t+PH(k)/180*pi)

end

figure(1)

plot(x)

2.进行FFT谐波分析

%直接用FFT进行谐波计算 Harmonic_Analysis.m

N=length(x)

f=50

m=13

n=1:N

Fn=zeros(9,3)% 谐波频率

An=zeros(9,3)% 幅值

Pn=zeros(9,3)% 初相角

for i=1 : m

Fn(i,1) = iFn(i,2) = f * i

An(i,1) = iAn(i,2) = 0

Pn(i,1) = iPn(i,2) = 0

end

fsN=fs/N

f0=50

%1-FFT

X=fft(x)

X=X(1:N/2)

Xabs=abs(X)

for i= 1 : m

[Amax,index]=TriFind(Xabs,floor((i*f0-15)/fsN),ceil((i*f0+15)/fsN))

if(index==-1)

Fn(i,3) = 0

An(i,3) = 0

Pn(i,3) = 0

else

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(i,3) = (k01+r1-1)*fs/N

An(i,3) = 2*pi*r1*Xabs(k01)/(N*sin(r1*pi))

Pn(i,3) = phase(X(k01))-pi*r1

Pn(i,3) = Pn(i,3)*180/pi

Pn(i,3) = mod(Pn(i,3),180)

end

end

Fn

An

Pn

figure(2)

stem(Xabs(1:N/2)*2/N)

dlmwrite('An.txt',An,'delimiter', '\t','precision', '%.10f','newline', 'pc')

dlmwrite('Fn.txt',Fn,'delimiter', '\t','precision', '%.10f','newline', 'pc')

dlmwrite('Pn.txt',Pn,'delimiter', '\t','precision', '%.10f','newline', 'pc')

3.完全手打的,先运行CreatData.m,再运行Harmonic_Analysis.m,应该可行,有问题再补充

4.少了个函数文件

新建个.m,命名为 TriFind,将以下内容粘贴

function [ Amax,index ] = TriFind(A,first,last)

%TRIFIND find x[k] if x[k-1]<x[k] and x[k]>x[k+1]

% return x[k] and the k

Amax=0

index=-1

for k=first+1:last-1

if A(k-1)<A(k) &&A(k)>A(k+1)

Amax=A(k)

index=k

end

end

在当前很多的电力产品中,带谐波(2~n次谐波电压电流含有率、有效值、总畸变率)计算功能的电力产品越来越多,系统因设计不同而采取不同算法

本文针对ARM9应用计算谐波,介绍笔者采用过的几种谐波算法。(以下提到的算法均不是笔者自创的)。

笔者采用过三种谐波算法,性能和特点大有差异。

1.三角函数算法:

三角函数算法是一种相对较简单,也较于容易理解的算法。计算原理如下所示:

从上面的公式中可以看出,算法需要大量计算三角函数,如果谐波次数越高,计算量则越大。而三角函数如果采用库函数的话,计算量是相当大的,这对于ARM9来说也是相当吃力的。当然可以采用查表方法,但这是牺牲空间换取时间,而且如果要求精度稍高点,则浪费空间越大。

笔者先接触谐波计算的时候,就是采用的这种算法,就19次谐波计算,CPU使用率达到了40%左右。

2.FFT算法:

针对三角函数算法在性能上稍有不足,笔者通过网上搜索,找到了两种比较高效谐波算法。

一种是任意点的混合基FFT算法:mix_fft:

mix_fft是一种任意点的谐波算法,所以对于采样点不是2n的应用是十分方便,而且最重要的是速度很快,对于目前市场上的ARM9来说,足够了。

mix_fft是个好用的FFT算法,但它不是开源的,所以应用时需要注意点。

另一种是ooura_fft:

ooura_fft是一种非常复杂但却是最高效的FFT算法,其速率在相同硬件条件下比mix_fft还快,特别是谐波采样点说越高的时候。ooura_fft只能计算2n的谐波采样点。故应用时也要注意这点。

对于上面两种FFT算法,都是用C语言写的,所以在其它应用场合也适用。使用的时候非常简单,只需要调用一个函数即可。如mix_fft算法应用如下:

其中,HarOriginalData存储谐波电压电流的采样数据。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8077263.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存