原创 离散信号MATLAB频谱分析程序(转)

2011-7-4 17:21 5460 10 11 分类: 工程师职场

 

 离散信号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))          %输出最大值对应的周期

文章评论1条评论)

登录后参与讨论

用户377235 2012-10-13 13:49

那个文件夹的文件呢,一起发了呗
相关推荐阅读
用户567526 2012-03-23 17:49
基于FPGA IP核的FFT实现
  基于FPGA IP核的FFT实现          0 引 言   数字信号处理领域中FFT算法有着广泛的应用。目前现有的文献大...
用户567526 2012-03-23 17:47
IBIS理解说明【转帖】
IBIS 理解说明 - --谨以此文献给初学SI 的艰苦岁月      IBIS 模型在做类似板级SI 仿真得到广泛应用。在做仿真的初级阶段,经常对于i...
用户567526 2012-03-08 09:45
【转】说说Timing这回事
Intro 问:一个FPGA设计项目需要用哪些评判标准来检验? 功能正确; 时序收敛; 资源消耗少。 ...
用户567526 2012-01-12 09:25
【转载】时序是设计出来的
时序是设计出来的    我的boss有在华为及峻龙工作的背景,自然就给我们讲了一些华为及altera做逻辑 的一些东西,而我们的项目规范,也基本上是按华为的那一套去做。在工作这几个月中 ,给...
用户567526 2011-10-17 17:06
【转帖+整理】平方根升余弦滤波器
平方根升余弦滤波器 2011-04-21 15:26 1.Rcosfir:design a raised cosine FIR filter.(rcosfir是低通滤波用的,以便后面加载频。)  ...
用户567526 2011-09-22 14:47
[转帖+整理]ISE11版本中基于的SRL16分布式RAM的调用方
【转帖】ISE11版本中基于的SRL16分布式RAM的调用方法 2010-01-07 15:26 在ISE11版本中,基于SRL16的分布式RAM不再支持V5、S6和V6等器件,但是SRL16是...
我要评论
1
10
关闭 站长推荐上一条 /2 下一条