|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
%FFT变换,获得采样数据基本信息,时域图,频域图
. v& M/ R3 S- o+ }2 W%这里的向量都用行向量,假设被测变量是速度,单位为m/s
4 s# k: m4 C) Qclear;
; q Q* \2 a1 t) L4 kclose all;. S, B: s( D) A$ E0 a
' N8 G7 P* k3 _+ k: j
load data.txt %通过仪器测量的原始数据,存储为data.txt中,附件中有一个模版(该信号极不规则)
7 r* c# |, E3 kA=data; %将测量数据赋给A,此时A为N×2的数组% d+ y' \" P0 M' u
x=A(:,1); %将A中的第一列赋值给x,形成时间序列/ y4 f/ Z1 k- N _2 R0 w
x=x'; %将列向量变成行向量2 P+ @6 h' k5 Z# I! J
y=A(:,2); %将A中的第二列赋值给y,形成被测量序列
* i/ q. ^9 H) p& N- P, L; O( N5 X( v8 T% X9 ]y=y'; %将列向量变成行向量% }. b1 _' |* D* T- H
+ ]+ M: [7 U E% E x: n2 M
%显示数据基本信息
' p& T8 w7 e |' gfprintf('\n数据基本信息:\n')
2 i$ H' G5 A/ _6 `4 dfprintf(' 采样点数 = %7.0f \n',length(x)) %输出采样数据个数7 P! ?+ q5 x( N# m; l' ]4 d0 A
fprintf(' 采样时间 = %7.3f s\n',max(x)-min(x)) %输出采样耗时
3 ]) d7 A7 R2 j# T Sfprintf(' 采样频率 = %7.1f Hz\n',length(x)/(max(x)-min(x))) %输出采样频率
7 `3 p/ e( h4 k% y" q" s4 i! G2 wfprintf(' 最小速度 = %7.3f m/s\n',min(y)) %输出本次采样被测量最小值3 p5 h) ?1 m$ _
fprintf(' 平均速度 = %7.3f m/s\n',mean(y)) %输出本次采样被测量平均值
+ [, c4 }8 q0 m0 h* `fprintf(' 速度中值 = %7.3f m/s\n',median(y)) %输出本次采样被测量中值5 J- Z$ C' @1 N2 W2 e! z4 s
fprintf(' 最大速度 = %7.3f m/s\n',max(y)) %输出本次采样被测量最大值! y5 b+ v2 c$ g7 J# B
fprintf(' 标准方差 = %7.3f \n',std(y)) %输出本次采样数据标准差
, A" q* i3 M4 K2 u0 j0 ^: |: Dfprintf(' 协 方 差 = %7.3f \n',cov(y)) %输出本次采样数据协方差
$ A, o. O* A) n" o- ifprintf(' 自相关系数 = %7.3f \n\n',corrcoef(y)) %输出本次采样数据自相关系数5 g7 l3 J" e) P8 C! Y5 u3 O
1 w* U3 H: }+ v! ?- p
%显示原始数据曲线图(时域)) k/ d5 l7 b% ?8 m
subplot(2,1,1);
/ R7 D3 Q2 Z6 z" f; i! Eplot(x,y) %显示原始数据曲线图1 ~% I) [( `8 E8 P8 J9 B$ L
axis([min(x) max(x) 1.1*floor(min(y)) 1.1*ceil(max(y))]) %优化坐标,可有可无
$ J3 L* x$ o1 u4 G& K" A% k0 uxlabel('时间 (s)');
& [0 v* b* M6 k# dylabel('被测变量y');
# }( E& w, z; B! ?title('原始信号(时域)');& z0 _5 y; f0 J: ]
grid on;) ?+ `% m) @7 I* ?! C
7 J1 ], K2 d! K j# d%傅立叶变换7 x7 G/ f! W$ B1 f# v/ ]" I
y=y-mean(y); %消去直流分量,使频谱更能体现有效信息& A3 B6 i, a0 g% e7 q
Fs=2000; %得到原始数据data.txt时,仪器的采样频率。就是length(x)/(max(x)-min(x));
+ h9 k/ n. g5 i7 t4 F5 ]N=10000; %data.txt中的被测量个数,即采样个数。其实就是length(y);0 O/ }) ?4 j/ p* c9 O
z=fft(y);6 i5 s; x/ |2 b
/ t( p4 c% x0 @8 A4 m6 R
%频谱分析
9 y/ k6 Q. x% k, P, n3 y& d: If=(0:N-1)*Fs/N;
- {4 n1 x( U2 z. o$ yMag=2*abs(z)/N; %幅值,单位同被测变量y
7 k9 T0 Z# A; B' DPyy=Mag.^2; %能量;对实数系列X,有 X.*X=X.*conj(X)=abs(X).^2=X.^2,故这里有很多表达方式' c2 |. a/ a6 x4 {5 [# k7 ^4 M4 k
5 p1 P. {( `, E3 |! Z%显示频谱图(频域)
3 H- m+ R3 u2 a+ e8 V/ r& Isubplot(2,1,2)9 @* m- x- |: D5 j' {4 r2 S
plot(f(1:N/2),Pyy(1:N/2),'r') %显示频谱图
" {" @! u5 @3 |7 e9 S! V. J% |
4 {( J) x' g( U& U8 B1 s% 将这里的Pyy改成Mag就是 幅值-频率图了
, a* ~# Z) ]- _6 @axis([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)))])
1 B. `* d0 M. l9 g* ~2 zxlabel('频率 (Hz)')
& x+ Z, ?) w9 V7 |5 ?ylabel('能量')4 T+ j4 e6 z6 S9 t& t, j. c0 ?
title('频谱图(频域)')
) q/ V0 n& ~6 ?& M5 E& w& @grid on;- K* H1 I% ]* P# K v4 ^3 M) o* v
( \ \4 @3 x( o3 W- f( z%返回最大能量对应的频率和周期值/ K4 A7 c6 p: H! ]4 F
[a b]=max(Pyy(1:N/2)); @' O% I& j% g
fprintf('\n傅立叶变换结果:\n') # M% Y% F1 C a& c! ?
fprintf(' FFT_f = %1.3f Hz\n',f(b)) %输出最大值对应的频率
7 L, C: |# R" ^3 U0 T4 cfprintf(' FFT_T = %1.3f s\n',1/f(b)) %输出最大值对应的周期7 R$ Z; K- W H- H2 ^: h9 G9 R
|
|