|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
%FFT变换,获得采样数据基本信息,时域图,频域图- `$ p; u1 J: q7 b$ f$ `
%这里的向量都用行向量,假设被测变量是速度,单位为m/s
7 D) I% E. X. d2 i* Iclear;3 s1 {; J- ^1 j c* t. g( _
close all;$ m$ G5 I# b& m1 `" u, `! w/ @
. M0 Q/ U. d: ~3 m& g7 y
load data.txt %通过仪器测量的原始数据,存储为data.txt中,附件中有一个模版(该信号极不规则)7 t- v$ W' N1 J
A=data; %将测量数据赋给A,此时A为N×2的数组2 {9 P) `/ l/ ^7 x
x=A(:,1); %将A中的第一列赋值给x,形成时间序列9 t* h' ~/ k7 h0 i' X# N: d
x=x'; %将列向量变成行向量
( @. |- T9 P$ U3 P7 O; E/ gy=A(:,2); %将A中的第二列赋值给y,形成被测量序列
' w: f4 N6 ?( V2 z+ sy=y'; %将列向量变成行向量
* o! Z% N/ x$ \4 U4 C% T0 M, S: D4 ^6 j |
%显示数据基本信息
1 B& w. M! {1 [1 [2 Efprintf('\n数据基本信息:\n')
3 S) r( T0 {: l5 Y efprintf(' 采样点数 = %7.0f \n',length(x)) %输出采样数据个数1 r y1 E' ]" @6 L. {4 R& \* k
fprintf(' 采样时间 = %7.3f s\n',max(x)-min(x)) %输出采样耗时
" u: Y3 Y0 w# e4 E: b( }! l* sfprintf(' 采样频率 = %7.1f Hz\n',length(x)/(max(x)-min(x))) %输出采样频率
! M4 F3 F7 I- X# F e: y7 h& zfprintf(' 最小速度 = %7.3f m/s\n',min(y)) %输出本次采样被测量最小值6 w1 O/ p0 _% J7 ?2 \0 O' n
fprintf(' 平均速度 = %7.3f m/s\n',mean(y)) %输出本次采样被测量平均值% a% z7 {6 i3 H
fprintf(' 速度中值 = %7.3f m/s\n',median(y)) %输出本次采样被测量中值
3 d6 t& P6 S% Q$ g- g' Rfprintf(' 最大速度 = %7.3f m/s\n',max(y)) %输出本次采样被测量最大值+ o3 ^5 m; m8 S& F. e1 Y
fprintf(' 标准方差 = %7.3f \n',std(y)) %输出本次采样数据标准差
" k+ E' _& D* i t7 b& yfprintf(' 协 方 差 = %7.3f \n',cov(y)) %输出本次采样数据协方差
5 O' K G( `3 Y$ efprintf(' 自相关系数 = %7.3f \n\n',corrcoef(y)) %输出本次采样数据自相关系数
) Y; P$ J0 e: _! z0 r/ ?7 i 2 Y8 G4 b! {. F0 _
%显示原始数据曲线图(时域)
: c2 E+ {, P% c# w: _subplot(2,1,1);
! ? t+ A( s9 f4 H$ `plot(x,y) %显示原始数据曲线图7 r- I) m `- u3 o( P7 l
axis([min(x) max(x) 1.1*floor(min(y)) 1.1*ceil(max(y))]) %优化坐标,可有可无7 \3 t- ?* l" F: m- A
xlabel('时间 (s)');
! x: q V) W1 `0 T( hylabel('被测变量y');
' e0 [9 x, z( |6 W" o$ ?% ftitle('原始信号(时域)');
4 v5 f# a8 n, G# r" ?2 mgrid on;' u. z3 N l4 ~2 N' a* J h, [
/ m6 R. ?( \( F9 L
%傅立叶变换8 ~ l+ T6 T+ `- |9 f& z
y=y-mean(y); %消去直流分量,使频谱更能体现有效信息5 _% v, Y1 C5 v" H; {+ E; w: S
Fs=2000; %得到原始数据data.txt时,仪器的采样频率。就是length(x)/(max(x)-min(x));
! h S$ h$ T4 i) l. RN=10000; %data.txt中的被测量个数,即采样个数。其实就是length(y);
; I. y8 ^# m: |. vz=fft(y);% T8 Q8 ?5 q7 R5 [. n8 i
5 K. g; k6 F y, O3 l6 t+ ^. O& j
%频谱分析
0 C( n' `* B- s2 U3 e/ \+ X2 B- Y2 Yf=(0:N-1)*Fs/N;
1 F' m. c* y& P! bMag=2*abs(z)/N; %幅值,单位同被测变量y7 m/ M& N2 E. k3 t8 O/ W1 x
Pyy=Mag.^2; %能量;对实数系列X,有 X.*X=X.*conj(X)=abs(X).^2=X.^2,故这里有很多表达方式5 Q5 _7 a5 e( C
2 r* I( k- U9 _ W! d. ^%显示频谱图(频域)
$ R7 o) S$ U8 D4 O! U' W: Jsubplot(2,1,2)
9 l7 h: D0 k+ E/ J& wplot(f(1:N/2),Pyy(1:N/2),'r') %显示频谱图
$ K* T8 o9 m1 v" w6 ~' r% G0 s% |
: x; y2 M# k$ D% 将这里的Pyy改成Mag就是 幅值-频率图了
" O# I! e; x# C; A/ t5 Eaxis([min(f(1:N/2)) max(f(1:N/2)) 1.1*floor(min(Pyy(1:N/2))) 1.1*ceil(max(Pyy(1:N/2)))]) % r8 L$ L/ y Q. W* q+ y: u
xlabel('频率 (Hz)')
7 ^+ G4 ?0 }2 K+ r2 xylabel('能量')
. V0 v: ], l5 E" u' ptitle('频谱图(频域)')
# ?6 n; Y6 E0 a! `% ^grid on;
& s: C* x( ~" \% I1 B, X) f/ t& v9 M' z* {+ O8 r* j0 Z/ ]
%返回最大能量对应的频率和周期值
1 T/ ?- N" R. v[a b]=max(Pyy(1:N/2));
9 |* H' W2 D' v' y; _/ t4 Hfprintf('\n傅立叶变换结果:\n')
+ D6 p' M! \/ G1 c, zfprintf(' FFT_f = %1.3f Hz\n',f(b)) %输出最大值对应的频率
1 L& j, ~$ I r; d8 X( P% t! Ifprintf(' FFT_T = %1.3f s\n',1/f(b)) %输出最大值对应的周期
3 o( {6 o+ ~) ~) O6 ^5 h6 N |
|