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

离散信号MATLAB频谱分析程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
%FFT变换,获得采样数据基本信息,时域图,频域图6 z% N2 M  O! F
%这里的向量都用行向量,假设被测变量是速度,单位为m/s8 T8 L6 E4 _- S+ U" o
clear;
6 ?2 M' K( k! S( Nclose all;$ v/ g# M% f1 ~- w3 O# ?# V

. S% V; [: r8 p* I( P" q, ?- L7 Dload data.txt              %通过仪器测量的原始数据,存储为data.txt中,附件中有一个模版(该信号极不规则)& O  \" l* q' ?* b- a
A=data;                                        %将测量数据赋给A,此时A为N×2的数组
" m; \0 c* E* Cx=A(:,1);                                     %将A中的第一列赋值给x,形成时间序列; N6 y4 J7 \4 Q( _" k
x=x';                                           %将列向量变成行向量
* P7 n" n) s3 x/ oy=A(:,2);                                     %将A中的第二列赋值给y,形成被测量序列
$ i/ k& z0 V3 h/ r4 l9 F% My=y';                                           %将列向量变成行向量
0 n9 Q; h# O" W6 h& h( K
2 d! G" J) p! D) ?%显示数据基本信息
, M9 o( B1 M# q: i- h8 P4 i  Xfprintf('\n数据基本信息:\n')
0 F) z  u( E% a8 h" T: t& f. {fprintf('        采样点数 = %7.0f \n',length(x))                         %输出采样数据个数3 R( A& t9 o# ?1 l. s( _" k
fprintf('        采样时间 = %7.3f s\n',max(x)-min(x))                    %输出采样耗时4 s0 g6 r4 u6 v! W
fprintf('        采样频率 = %7.1f Hz\n',length(x)/(max(x)-min(x)))   %输出采样频率  K) o* a" \, x9 W
fprintf('        最小速度 = %7.3f m/s\n',min(y))                         %输出本次采样被测量最小值
3 A" F, v0 k# g9 Y* y2 G$ nfprintf('        平均速度 = %7.3f m/s\n',mean(y))                      %输出本次采样被测量平均值
# e. i' g2 z0 H: W3 gfprintf('        速度中值 = %7.3f m/s\n',median(y))                   %输出本次采样被测量中值
4 ~) n* Z/ ?) t# d2 K: kfprintf('        最大速度 = %7.3f m/s\n',max(y))                          %输出本次采样被测量最大值$ M( m' N. ^; W- ~$ X6 z
fprintf('        标准方差 = %7.3f \n',std(y))                               %输出本次采样数据标准差
  ]! _) [9 q5 y& ~& Y2 Rfprintf('       协 方 差 = %7.3f \n',cov(y))                                %输出本次采样数据协方差
2 _7 j2 g( O& @0 E- D- ^5 o( N7 u' \) `9 wfprintf('     自相关系数 = %7.3f \n\n',corrcoef(y))                       %输出本次采样数据自相关系数8 }: d5 _' }, I) Q# z3 B+ d
  
/ w4 J( _  E2 l5 m' }8 c. a%显示原始数据曲线图(时域)
* t2 z- K8 ?: V: d& z: f1 gsubplot(2,1,1);7 u/ s/ [. W% w" M/ q5 v8 y  r
plot(x,y)                                                                                %显示原始数据曲线图
2 s# k# a  l# m- d0 `axis([min(x) max(x) 1.1*floor(min(y)) 1.1*ceil(max(y))])             %优化坐标,可有可无
2 J8 F- [7 m6 u  a7 U* Fxlabel('时间 (s)');9 ?1 I1 L) ]7 {5 Q) L$ H8 a
ylabel('被测变量y');
9 P2 P$ y+ p* R0 Mtitle('原始信号(时域)');; x4 q6 c( Z4 m( L0 ~% m. b1 A* A% d
grid on;2 l2 v; O* o. J

; h8 F' r6 ~2 [$ {%傅立叶变换
4 X5 Y. P. u' |4 M, By=y-mean(y);                                               %消去直流分量,使频谱更能体现有效信息6 O/ ~' s! Q/ `, ~' b5 U4 m+ u7 K
Fs=2000;                %得到原始数据data.txt时,仪器的采样频率。就是length(x)/(max(x)-min(x));     % p8 y; [' X! _( l+ @
N=10000;                                                 %data.txt中的被测量个数,即采样个数。其实就是length(y);# I4 q! z0 |% U+ h# Z/ _1 `
z=fft(y);
2 Z* h. L' f2 g( t0 U3 ?" M0 v# H6 b/ [7 l7 O; k
%频谱分析  @- j7 C7 b' r
f=(0:N-1)*Fs/N;0 m- c, j0 r# d% y7 F6 w( k
Mag=2*abs(z)/N;                                        %幅值,单位同被测变量y. k! Q, }/ `# g6 j
Pyy=Mag.^2;          %能量;对实数系列X,有 X.*X=X.*conj(X)=abs(X).^2=X.^2,故这里有很多表达方式
) o9 w9 j1 J( U, Q( F5 b# w$ r/ \( R- j+ H7 K
%显示频谱图(频域)$ c% @% z% f, o
subplot(2,1,2)  u5 a, u6 A/ O3 N% ~0 F
plot(f(1:N/2),Pyy(1:N/2),'r')                         %显示频谱图
3 Q9 P4 e5 K1 ?$ x" p* d/ N%                 |
  ]3 \# Y& S+ h- e%             将这里的Pyy改成Mag就是 幅值-频率图了
% h! A" h6 ^3 X5 A% H$ }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)))])
6 w( |/ v4 ^& X6 ]7 c2 k6 P+ Xxlabel('频率 (Hz)')
, t) x- T, E6 W( c3 N; w% z8 {2 ^ylabel('能量')
; O5 i0 V& s3 A  ^7 D" wtitle('频谱图(频域)')
; ^. c8 i6 A6 Z' j  Vgrid on;# @5 M2 `5 l* I, h3 ^' @! y

2 E$ ?) x7 Q1 H) N/ \%返回最大能量对应的频率和周期值0 q4 n5 f" ]* r' A
[a b]=max(Pyy(1:N/2));8 Q5 p/ O" r3 Q( z( ?
fprintf('\n傅立叶变换结果:\n') 0 I9 h% L. r/ r, M, X% X$ z
fprintf('           FFT_f = %1.3f Hz\n',f(b))             %输出最大值对应的频率& a3 m7 k9 J6 k+ f
fprintf('           FFT_T = %1.3f s\n',1/f(b))          %输出最大值对应的周期
# E" J5 S, Q6 i8 n, r* h
  • 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-7-22 19:29 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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