MATLAB中做FFT
补贴,原版不见了。。。FFT很常见的应用,下面找到一段代码,来源
万永革编著.数字信号处理的MATLAB实现.北京:科学出版社,2012.05.
第三章
代码如下:
%Samp3_13
clf;
clear all
clc
fs=100;N=128; %采样频率和数据点数
n=0:N-1;t=n/fs; %时间序列
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号
y=fft(x,N); %对信号进行快速Fourier变换
mag=abs(y)*2/N; %求得Fourier变换后的振幅
f=n*fs/N; %频率序列
figure(1)
plot(t,x);
figure(2)
subplot(2,2,1),
plot(f,mag); %绘出随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');title('N=128');grid on;
subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');title('N=128');grid on;
%对信号采样数据为1024点的处理
fs=100;N=128;;n=0:N-1;t=n/fs;
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号
y=fft(x,N); %对信号进行快速Fourier变换
mag=abs(y)*2/N; %求取Fourier变换的振幅
f=n*fs/N;
subplot(2,2,3),plot(f,mag); %绘出随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');title('N=1024');grid on;
subplot(2,2,4)
plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');title('N=1024');grid on;
%axis()
结果如下图
原始波形FFT变换
关键是这个楼层,有人问怎么用,下面以两个例子说明
例子1PSCAD导出数据进行FFT
以最简单的分压器例子vdiv为例
由于上面的仿真设置为采样频率为f=100Hz,数据点N为128与1024
因此仿真时间步长为1/f=0.01s=10ms=10000us
红色方框内两个参数保持一致
仿真时间为11s,数据点为1100个
但PSCAD对于步长较长的仿真会求解错误(原理大概同输电线路——输电线路、电缆长度问题),
错误如下:
50Hz,60Hz波形不是正弦波,可以行尝试
因此选择下图的设置
f=1000Hz,步长为1/f=1000us仿真时间为1.1s,数据点为1100个
空白处右键设置
保证绘图与输出通道同等采样
仿真频率设置为50Hz,空白处ctrl+g改变频率
提取其中的电压数据
找到电压波形,右键全选
桌面新建记事本,将数据粘贴后保存,打开MATLAB导入数据
具体内容参见论坛中的方法,给出一个链接
利用MATLAB软件画PSCAD仿真波形图
https://www.mmc-hvdc.com/t-353.html
运行程序
fs=1000;N=128; %采样频率和数据点数
n=0:N-1;t=n/fs; %时间序列
x=MidPointVoltage1(1:128)'; %信号转置,MidPointVoltage1为电压向量名,可根据情况更改
y=fft(x,N); %对信号进行快速Fourier变换
mag=abs(y)*2/N; %求得Fourier变换后的振幅
f=n*fs/N; %频率序列
figure(1)
plot(t,x);
figure(2)
subplot(2,2,1),
plot(f,mag); %绘出随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');title('N=128');grid on;
subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');title('N=128');grid on; %对信号采样数据为128点的处理
fs=1000;N=1024;;n=0:N-1;t=n/fs;
x1=MidPointVoltage1(1:1024)'; %信号
y=fft(x1,N); %对信号进行快速Fourier变换
mag=abs(y)*2/N; %求取Fourier变换的振幅
f=n*fs/N;
subplot(2,2,3),plot(f,mag); %绘出随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');title('N=1024');grid on;
subplot(2,2,4)
plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');title('N=1024');grid on;结果如下图
图中表明,数据点越多结果越准确
想了解等过内容可以选购推荐书籍
完结撒花
{:8_615:}
例子2 ATP-EMTP数据FFT
首先将仿真参数设置下
参数如下
元件默认即可,重在FFT
将数据导出,英文路径为宜
利用上面同样的程序做FFT结果
由于atp-emtp本身可以用FFT,结果如下
虽然FFT不是很难,但仍然有很多需要思考的地方,例如幅值相位变化的问题,采样值与结果等
mag=abs(y)*2/N
求变换后的振幅时为什么要乘以2除以N?{:7_578:} beixiaoman 发表于 2019-8-16 18:24
mag=abs(y)*2/N
求变换后的振幅时为什么要乘以2除以N?
给出了参考资料了哦,查一下就知道 学习了 点赞。学习ing
请问有matlab小波变化和小波能量熵的介绍吗? 用了下程序,还是到最后几个点 高频有幅值 不太理想 r2019 发表于 2020-03-28 00:23
用了下程序,还是到最后几个点 高频有幅值 不太理想
可能是自己模型的问题吧