通过MATLAB对从串口采集上来的一组数据进行频谱分析

来源:互联网 发布:淘宝主图软件下载 编辑:程序博客网 时间:2024/05/16 04:57

最近在做柯氏音的提取工作,由于提上来的波形显示不理想,想通过MATLAB对数据进行频谱分析,因而学习了MATLAB在这一块的知识。
首先需要一个有数据保存功能的串口助手,但大多数串口都是保存十六进制的数,现在介绍如何将串口保存的 txt 格式的数据(十六进制)导入到matlab中使用。
桌面上有一个txt文件(以楼主的电脑为例),打开matlab,建立一个M文件,在里面输入:
clear all;
a=textread(‘C:\Users\Grimm\Desktop\keshiyin_moni.txt‘,’%s’)’;%以字符形式打开文件
alpha=hex2dec(a)’; 进制转化为10进制数,存入alpha矩阵
dlmwrite(‘C:\Users\Grimm\Desktop\b.txt’,alpha,’delimiter‘, ’ ‘) %将得出数据存入新的b.txt文档
这里注意地址一定要写完整,楼主就是因为之前地址没有写完整,导致很长时间出不来结果。
这时桌面上就会出现一个b.txt文件。下面将此文件导入matlab
请参考 http://jingyan.baidu.com/article/b0b63dbfd5cd8b4a48307031.html。

下面就是对数据进行频谱分析了。
通过matlab打开导入完成的数据,首先可以看这组数据的时域图:在workspace下右击文件名,然后单击plot,即可看见时域图。在 Command 区域输入以下代码:
A=keshiyin_moni; %这里的A=后面写文件的名字
FS=50;T=1/FS; % FS是采样率
L=length(A);
t=(0:L-1)*T;
figure(1);
plot(t,A);
figure(6);
NFFT = 2^nextpow2(L); % Next power of 2 from length of y
Y = fft(A,NFFT)/L;
f = FS/2*linspace(0,1,NFFT/2);
plot(f,2*abs(Y(1:NFFT/2)));
完成后即可看见数据的频谱分析结果

0 0
原创粉丝点击