• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

离散信号MATLAB频谱分析程序 - xiabodan

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

离散信号MATLAB频谱分析程序

%FFT变换,获得采样数据基本信息,时域图,频域图
%这里的向量都用行向量,假设被测变量是速度,单位为m/s
clear;
close all;

load data.txt              %通过仪器测量的原始数据,存储为data.txt中,附件中有一个模版(该信号极不规则)
A=data;                                        %将测量数据赋给A,此时A为N×2的数组
x=A(:,1);                                     %将A中的第一列赋值给x,形成时间序列
x=x\';                                           %将列向量变成行向量
y=A(:,2);                                     %将A中的第二列赋值给y,形成被测量序列
y=y\';                                           %将列向量变成行向量

%显示数据基本信息
fprintf(\'\n数据基本信息:\n\') 
fprintf(\'        采样点数 = %7.0f \n\',length(x))                         %输出采样数据个数
fprintf(\'        采样时间 = %7.3f s\n\',max(x)-min(x))                    %输出采样耗时
fprintf(\'        采样频率 = %7.1f Hz\n\',length(x)/(max(x)-min(x)))   %输出采样频率
fprintf(\'        最小速度 = %7.3f m/s\n\',min(y))                         %输出本次采样被测量最小值
fprintf(\'        平均速度 = %7.3f m/s\n\',mean(y))                      %输出本次采样被测量平均值
fprintf(\'        速度中值 = %7.3f m/s\n\',median(y))                   %输出本次采样被测量中值
fprintf(\'        最大速度 = %7.3f m/s\n\',max(y))                          %输出本次采样被测量最大值
fprintf(\'        标准方差 = %7.3f \n\',std(y))                               %输出本次采样数据标准差
fprintf(\'       协 方 差 = %7.3f \n\',cov(y))                                %输出本次采样数据协方差
fprintf(\'     自相关系数 = %7.3f \n\n\',corrcoef(y))                       %输出本次采样数据自相关系数
  
%显示原始数据曲线图(时域)
subplot(2,1,1);
plot(x,y)                                                                                %显示原始数据曲线图
axis([min(x) max(x) 1.1*floor(min(y)) 1.1*ceil(max(y))])             %优化坐标,可有可无
xlabel(\'时间 (s)\');
ylabel(\'被测变量y\');
title(\'原始信号(时域)\');
grid on;

%傅立叶变换
y=y-mean(y);                                               %消去直流分量,使频谱更能体现有效信息
Fs=2000;                %得到原始数据data.txt时,仪器的采样频率。就是length(x)/(max(x)-min(x));     
N=10000;                                                 %data.txt中的被测量个数,即采样个数。其实就是length(y);
z=fft(y);

%频谱分析
f=(0:N-1)*Fs/N;
Mag=2*abs(z)/N;                                        %幅值,单位同被测变量y
Pyy=Mag.^2;          %能量;对实数系列X,有 X.*X=X.*conj(X)=abs(X).^2=X.^2,故这里有很多表达方式

%显示频谱图(频域)
subplot(2,1,2)
plot(f(1:N/2),Pyy(1:N/2),\'r\')                         %显示频谱图
%                 |
%             将这里的Pyy改成Mag就是 幅值-频率图了
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)))]) 
xlabel(\'频率 (Hz)\')
ylabel(\'能量\')
title(\'频谱图(频域)\')
grid on;

%返回最大能量对应的频率和周期值
[a b]=max(Pyy(1:N/2));
fprintf(\'\n傅立叶变换结果:\n\') 
fprintf(\'           FFT_f = %1.3f Hz\n\',f(b))             %输出最大值对应的频率
fprintf(\'           FFT_T = %1.3f s\n\',1/f(b))          %输出最大值对应的周期

 

附件data.txt下载地址http://u.115.com/file/e6cqg126


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Rust零碎总结发布时间:2022-07-18
下一篇:
Rust学习(12):slice发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap