|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
%FFT变换,获得采样数据基本信息,时域图,频域图' \5 a; M# L7 `7 A2 M3 M3 C
%这里的向量都用行向量,假设被测变量是速度,单位为m/s V9 K4 `. q+ o" a5 B4 [
clear;
; b* S0 M- S8 O& ]- _: m. zclose all;
* a7 J/ }! |6 Q- H* \- n7 U; f4 r! g- ]5 }1 Y' M X# y5 C2 E! r
load data.txt %通过仪器测量的原始数据,存储为data.txt中,附件中有一个模版(该信号极不规则)0 F0 c1 q0 n# ]# E
A=data; %将测量数据赋给A,此时A为N×2的数组
( x6 a% q# M' Ex=A(:,1); %将A中的第一列赋值给x,形成时间序列
8 V" h; X6 K/ l( Jx=x'; %将列向量变成行向量
' C7 M% s% S/ B0 p9 B1 d2 oy=A(:,2); %将A中的第二列赋值给y,形成被测量序列
( z! e+ u9 i- r5 qy=y'; %将列向量变成行向量
2 T* j) ~0 ~" R! y2 R+ m+ L6 s; L+ o6 _" K. J4 W* j5 m. |
%显示数据基本信息
) X4 m! q4 |# R ~& K* C. jfprintf('\n数据基本信息:\n')
9 F. D0 n- G( Xfprintf(' 采样点数 = %7.0f \n',length(x)) %输出采样数据个数 P4 a$ ]3 F9 V. l+ h/ f
fprintf(' 采样时间 = %7.3f s\n',max(x)-min(x)) %输出采样耗时
4 \9 j& E+ n; afprintf(' 采样频率 = %7.1f Hz\n',length(x)/(max(x)-min(x))) %输出采样频率6 L u" \7 m0 F# |2 v- u8 Z# p
fprintf(' 最小速度 = %7.3f m/s\n',min(y)) %输出本次采样被测量最小值; G+ r6 r) c$ X( }- S
fprintf(' 平均速度 = %7.3f m/s\n',mean(y)) %输出本次采样被测量平均值
$ W+ @0 Q7 j# D4 b4 ffprintf(' 速度中值 = %7.3f m/s\n',median(y)) %输出本次采样被测量中值$ f+ G: v$ `# n
fprintf(' 最大速度 = %7.3f m/s\n',max(y)) %输出本次采样被测量最大值
: J" \9 f5 w2 L' A& Y3 `fprintf(' 标准方差 = %7.3f \n',std(y)) %输出本次采样数据标准差$ [2 G- p7 e# f) ]! s w# m3 t' l
fprintf(' 协 方 差 = %7.3f \n',cov(y)) %输出本次采样数据协方差
* ]5 ^1 @/ S/ Y. ifprintf(' 自相关系数 = %7.3f \n\n',corrcoef(y)) %输出本次采样数据自相关系数9 i5 t( S0 k' M6 n) {" p
3 W: A6 @! {9 E4 p Y* }) {7 G% i%显示原始数据曲线图(时域)
+ P3 s( q/ i+ S, z9 C. msubplot(2,1,1);; V" ]0 a$ u. J [
plot(x,y) %显示原始数据曲线图
8 C8 B {1 n( I! g- }9 k. vaxis([min(x) max(x) 1.1*floor(min(y)) 1.1*ceil(max(y))]) %优化坐标,可有可无
' k2 R6 ]/ _ t5 }- p1 K9 s$ \/ \3 \xlabel('时间 (s)');
. F! [2 ?5 L5 |# A: C5 Aylabel('被测变量y');
% M4 H. M" E' `title('原始信号(时域)');
, [4 k0 c$ Q; x* v/ D& L/ Vgrid on;. d( E& @4 K: l. R! i: L
+ w& d" X( k5 t. x* P" H4 P%傅立叶变换
, N8 W) w' D& |! `6 oy=y-mean(y); %消去直流分量,使频谱更能体现有效信息& \$ o) f, Y& Q. _, M f- Q
Fs=2000; %得到原始数据data.txt时,仪器的采样频率。就是length(x)/(max(x)-min(x));
- N. s* A3 U* o) a/ D4 @N=10000; %data.txt中的被测量个数,即采样个数。其实就是length(y);2 a0 Q) H6 t0 W2 H/ |3 G2 r
z=fft(y);2 _* ^. n% p. j! [
" ?, Z3 O* M& O2 W7 z. h
%频谱分析. p. q, n+ E* M6 B/ y b
f=(0:N-1)*Fs/N;
6 s9 \! y' J1 ]& D" BMag=2*abs(z)/N; %幅值,单位同被测变量y
7 m3 Y! j0 K1 \: r+ vPyy=Mag.^2; %能量;对实数系列X,有 X.*X=X.*conj(X)=abs(X).^2=X.^2,故这里有很多表达方式
& v6 u8 Q" Q* M: B. u0 T I- t/ Q, O: h% `) V
%显示频谱图(频域) I- p' }0 r9 n4 K* \8 q
subplot(2,1,2)
) `7 g% D: N6 j& ] N- Oplot(f(1:N/2),Pyy(1:N/2),'r') %显示频谱图
6 u, h% @3 b" q4 P; M, l: c% |- a; D2 h% [0 i C% I
% 将这里的Pyy改成Mag就是 幅值-频率图了. h3 Z" I& _6 u4 m
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)))]) ? w% P, F! h. ~
xlabel('频率 (Hz)')
! W5 H8 x9 u, B8 Q8 x# ?8 nylabel('能量')
3 b2 b! l' V' T/ v2 l0 i( ^title('频谱图(频域)'): n" n3 g+ v; _+ Z8 }; b3 x
grid on;
m, C9 C3 _' n% u4 ?# w8 R/ e5 L5 \; p
%返回最大能量对应的频率和周期值2 ^ e5 Q! d- }; @% \ t
[a b]=max(Pyy(1:N/2));* [( u2 t% s- i" e% G
fprintf('\n傅立叶变换结果:\n') 5 L) C6 P0 @6 e: f8 n
fprintf(' FFT_f = %1.3f Hz\n',f(b)) %输出最大值对应的频率" w" M7 I! M1 e. ~8 u
fprintf(' FFT_T = %1.3f s\n',1/f(b)) %输出最大值对应的周期
; o7 t# |% [, V |
|