找回密码
 注册
关于网站域名变更的通知
查看: 340|回复: 1
打印 上一主题 下一主题

离散信号MATLAB频谱分析程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-5-9 10:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
%FFT变换,获得采样数据基本信息,时域图,频域图' j: L5 }' R$ G! }% P5 L" i8 e
%这里的向量都用行向量,假设被测变量是速度,单位为m/s8 N" S. ?& E2 o' d2 u: Y& y) i
clear;
2 `5 l1 {* c. P& Q) _3 Xclose all;+ H7 r  @$ ]$ Y) \
7 D! n# z5 Y6 H- w$ x9 s
load data.txt              %通过仪器测量的原始数据,存储为data.txt中,附件中有一个模版(该信号极不规则)
; z, v6 b, {3 n+ e- u( xA=data;                                        %将测量数据赋给A,此时A为N×2的数组
( L4 w' k" s, I& E$ o" tx=A(:,1);                                     %将A中的第一列赋值给x,形成时间序列
/ _( V! R6 B- j9 sx=x';                                           %将列向量变成行向量' L' j  m; {) Z# n1 O3 u4 p
y=A(:,2);                                     %将A中的第二列赋值给y,形成被测量序列+ d4 O  J6 S5 E* L
y=y';                                           %将列向量变成行向量3 h  U7 F4 k0 ~4 j% j4 @
9 y( S5 w3 q* D. N& \
%显示数据基本信息3 F4 `1 `( l) T, @$ X6 d* X# [' x
fprintf('\n数据基本信息:\n') 4 h. E( u9 R  P  s6 l' ]7 j# ~
fprintf('        采样点数 = %7.0f \n',length(x))                         %输出采样数据个数
# s3 \! o+ a4 ?% S# R8 tfprintf('        采样时间 = %7.3f s\n',max(x)-min(x))                    %输出采样耗时
( f  e: Y& z6 ofprintf('        采样频率 = %7.1f Hz\n',length(x)/(max(x)-min(x)))   %输出采样频率# l; @, s  l# r; n6 F) u  f) X) T
fprintf('        最小速度 = %7.3f m/s\n',min(y))                         %输出本次采样被测量最小值" m) H" O( ?4 c( G- {1 N
fprintf('        平均速度 = %7.3f m/s\n',mean(y))                      %输出本次采样被测量平均值% `) z( ?& g2 U2 l& m' G0 A
fprintf('        速度中值 = %7.3f m/s\n',median(y))                   %输出本次采样被测量中值
7 V* e! H0 ~  _- P6 Gfprintf('        最大速度 = %7.3f m/s\n',max(y))                          %输出本次采样被测量最大值
/ t5 U4 d  \. k+ l0 e2 ?fprintf('        标准方差 = %7.3f \n',std(y))                               %输出本次采样数据标准差2 [" s" T3 ~. ]" F( [
fprintf('       协 方 差 = %7.3f \n',cov(y))                                %输出本次采样数据协方差
) E) V% z9 g3 [, q6 sfprintf('     自相关系数 = %7.3f \n\n',corrcoef(y))                       %输出本次采样数据自相关系数* F+ E4 Y9 m& _" b( g& h
  $ `4 L0 b! u3 n7 N$ l' W
%显示原始数据曲线图(时域)
- X1 @. P* q( w- o) W4 isubplot(2,1,1);" {. U0 N' P$ q7 |, s; D, L7 d! o* Q4 t  r
plot(x,y)                                                                                %显示原始数据曲线图, k4 Z  w  B/ Y' ]% j
axis([min(x) max(x) 1.1*floor(min(y)) 1.1*ceil(max(y))])             %优化坐标,可有可无
6 \# |4 A7 b7 ~$ @/ Rxlabel('时间 (s)');& T) k2 }. V# Q; x$ `: ]" y' L! {2 {
ylabel('被测变量y');( O8 V' O( i6 Y" ]; m) b" K5 ]
title('原始信号(时域)');7 Q+ \) L  `# A; a
grid on;
2 r9 V$ P# h# A$ j0 s6 i. A
& }9 T& i2 D. q/ r/ @$ r%傅立叶变换3 D- U+ c# s6 V" u6 N* j5 ~
y=y-mean(y);                                               %消去直流分量,使频谱更能体现有效信息" c( n3 i7 K/ w) V
Fs=2000;                %得到原始数据data.txt时,仪器的采样频率。就是length(x)/(max(x)-min(x));     + e  c* U1 [5 r' W3 S: L
N=10000;                                                 %data.txt中的被测量个数,即采样个数。其实就是length(y);4 v( m; }9 N7 y, R
z=fft(y);
5 V1 V$ J6 V8 n- g# i
$ S  M  X4 e  Q0 ~$ e%频谱分析; ^9 Y% G8 Q$ D, Y( b' p- O& y/ V. z
f=(0:N-1)*Fs/N;, z4 r+ A! i$ y
Mag=2*abs(z)/N;                                        %幅值,单位同被测变量y' x& D9 x# h) v/ H- l
Pyy=Mag.^2;          %能量;对实数系列X,有 X.*X=X.*conj(X)=abs(X).^2=X.^2,故这里有很多表达方式5 ~: f% i7 U' U/ P1 d* a2 v9 z

- t; a3 T% r  U0 j- ^! A3 K, f5 [6 e8 y%显示频谱图(频域)) ]% G* J- U- n& y; M5 n# a& K
subplot(2,1,2)
" f4 _8 `6 G* N! b' x, R" Nplot(f(1:N/2),Pyy(1:N/2),'r')                         %显示频谱图
$ g$ v8 r( C& }4 i%                 |  o0 {" U4 o" ^
%             将这里的Pyy改成Mag就是 幅值-频率图了
5 H7 j$ F1 @/ caxis([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)))]) 6 t2 k* ?* \* }7 L
xlabel('频率 (Hz)')
+ X% o9 t8 A# B4 oylabel('能量')
: Y+ c7 }! O: G+ n- X* f. Mtitle('频谱图(频域)')
& O$ }2 d3 P2 b/ Tgrid on;
6 k3 a  j* b- L+ t$ p
& p, P' d' d* Q$ J; D7 {%返回最大能量对应的频率和周期值
+ w) }: j  ~3 J4 U7 x3 e+ R0 s0 Z[a b]=max(Pyy(1:N/2));
1 E  w( t8 r, q% p1 Jfprintf('\n傅立叶变换结果:\n') 0 X5 G2 D4 l$ A% x, g4 I
fprintf('           FFT_f = %1.3f Hz\n',f(b))             %输出最大值对应的频率# v0 `2 g1 b: B
fprintf('           FFT_T = %1.3f s\n',1/f(b))          %输出最大值对应的周期
3 ^/ V2 s- C0 j- n- n4 T. @' `
  • TA的每日心情

    2019-11-29 15:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-5-9 13:23 | 只看该作者
    离散信号MATLAB频谱分析程序
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-5 00:35 , Processed in 0.125000 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表