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

离散信号MATLAB频谱分析程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
%FFT变换,获得采样数据基本信息,时域图,频域图; m. w4 {3 T  p. `8 Y
%这里的向量都用行向量,假设被测变量是速度,单位为m/s
9 h1 O8 _: P6 X, v; E6 Dclear;) o) |( @8 ?+ D
close all;! D9 n& C' o# Q+ `- e3 ~% ]+ d
% e; f6 {% L( t5 u8 M$ y, ]
load data.txt              %通过仪器测量的原始数据,存储为data.txt中,附件中有一个模版(该信号极不规则)' ?+ w* Y, E/ I1 ^. }
A=data;                                        %将测量数据赋给A,此时A为N×2的数组
/ u1 ~" U  u3 @; a. Vx=A(:,1);                                     %将A中的第一列赋值给x,形成时间序列! t9 [/ N2 g1 _
x=x';                                           %将列向量变成行向量9 n, F% c1 C- k* W$ Q
y=A(:,2);                                     %将A中的第二列赋值给y,形成被测量序列
+ {- J" E1 ?& H* A/ J$ e. b4 Ry=y';                                           %将列向量变成行向量& A5 N) b1 J9 v3 g' u* {$ C6 k2 L4 u6 _

. G+ D3 z+ j2 K* z; w$ {3 j* W5 E* ?%显示数据基本信息
5 Y* J/ A) g- k" h" B- |; Sfprintf('\n数据基本信息:\n')
/ R0 y" `, E; ufprintf('        采样点数 = %7.0f \n',length(x))                         %输出采样数据个数3 p7 H$ P; {7 V; u
fprintf('        采样时间 = %7.3f s\n',max(x)-min(x))                    %输出采样耗时
% Z# z2 y6 x1 b4 \$ j4 bfprintf('        采样频率 = %7.1f Hz\n',length(x)/(max(x)-min(x)))   %输出采样频率
: b0 L# `2 l& j$ a/ ?5 ^& D1 r. Cfprintf('        最小速度 = %7.3f m/s\n',min(y))                         %输出本次采样被测量最小值
9 Q; \7 ?0 `& H- D5 ^9 L  qfprintf('        平均速度 = %7.3f m/s\n',mean(y))                      %输出本次采样被测量平均值
- f- }9 s; q6 n; T; H6 cfprintf('        速度中值 = %7.3f m/s\n',median(y))                   %输出本次采样被测量中值& J: {! f. {; W5 r7 L* ^( ~4 v5 e( N7 s
fprintf('        最大速度 = %7.3f m/s\n',max(y))                          %输出本次采样被测量最大值
# V1 k" a, g4 R5 v, i$ Nfprintf('        标准方差 = %7.3f \n',std(y))                               %输出本次采样数据标准差) ^3 ~! n% L. \# U1 _7 e" m; G
fprintf('       协 方 差 = %7.3f \n',cov(y))                                %输出本次采样数据协方差
# E! X( S) c" f; k* v0 V3 dfprintf('     自相关系数 = %7.3f \n\n',corrcoef(y))                       %输出本次采样数据自相关系数6 l% I4 Q; M5 ]
  
: @8 q3 B8 i# o2 D. H8 z- o%显示原始数据曲线图(时域)
& h8 d( ]. W; \1 usubplot(2,1,1);
# {. X. R  e3 h: ]plot(x,y)                                                                                %显示原始数据曲线图
1 [) O( K7 c4 w. ]. y# vaxis([min(x) max(x) 1.1*floor(min(y)) 1.1*ceil(max(y))])             %优化坐标,可有可无
" J+ W+ c/ N, V* C  uxlabel('时间 (s)');
, f) O# }- y& {ylabel('被测变量y');+ U' y- }0 v, \! Y. a. [4 I  \6 f
title('原始信号(时域)');
  W9 x7 ]2 h0 A0 Z: m. L( \grid on;& B4 ^$ ]5 W+ x, {: K: l

- b1 _* t. s/ Y+ f: f+ _0 z) V4 |%傅立叶变换, W: Y9 i5 c9 b3 p, T# Y
y=y-mean(y);                                               %消去直流分量,使频谱更能体现有效信息
& e0 k4 r4 s" f9 z, b+ zFs=2000;                %得到原始数据data.txt时,仪器的采样频率。就是length(x)/(max(x)-min(x));     , V' b* t6 x' i& I3 ]4 D; k
N=10000;                                                 %data.txt中的被测量个数,即采样个数。其实就是length(y);
' j5 b% J3 `: B( _7 n) f4 P, Iz=fft(y);1 K: ^/ M# X3 l) i$ Z$ U  I

1 Q3 p+ @) s+ Z( v: L- b9 ~5 A%频谱分析
* f" v7 i$ `4 Z0 ]1 [f=(0:N-1)*Fs/N;$ }: A, n: I/ T1 J
Mag=2*abs(z)/N;                                        %幅值,单位同被测变量y
+ z% U/ |+ ?; v4 A8 {Pyy=Mag.^2;          %能量;对实数系列X,有 X.*X=X.*conj(X)=abs(X).^2=X.^2,故这里有很多表达方式/ A' A- e/ z; O* w- F3 ?/ f, G

. {5 m) H- v" n2 ~0 J%显示频谱图(频域)+ d- l4 w! Y! a$ T4 `6 ]$ @8 ]; [
subplot(2,1,2)
$ Y) `* H# G6 A3 M/ zplot(f(1:N/2),Pyy(1:N/2),'r')                         %显示频谱图
& B% q' F) D/ W6 Q" m%                 |( D) B7 Z+ h  [9 A
%             将这里的Pyy改成Mag就是 幅值-频率图了4 W2 H( q- ]* z, n# u/ @
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)))]) / z1 G5 E* W3 T; L( }& O
xlabel('频率 (Hz)')
: Y# Q! p& |: M3 i: y' D2 ?3 j5 wylabel('能量')
* \) P/ R& H8 t, F) o4 ftitle('频谱图(频域)')$ f8 A1 k7 G) p* I) w
grid on;7 B: ?3 Q& _! V+ f- K$ G$ V

( A2 V0 s% y/ M$ R! O2 }, ^) r%返回最大能量对应的频率和周期值+ F6 Y$ O. [, O+ n3 D" s0 B+ c- L0 s
[a b]=max(Pyy(1:N/2));, S" G* Z+ j1 k  Y
fprintf('\n傅立叶变换结果:\n') ' Y* r% e# f3 L
fprintf('           FFT_f = %1.3f Hz\n',f(b))             %输出最大值对应的频率
6 c( G: T6 U9 Efprintf('           FFT_T = %1.3f s\n',1/f(b))          %输出最大值对应的周期
4 I$ f$ g& g: e
  • 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-8-24 10:25 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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