当前位置:   article > 正文

Dnial爱磕盐-Matlab在多相滤波器的应用_多相滤波 matlab

多相滤波 matlab

对于信号在时域上的显示可以在chipscope亦或者直接在示波器上进行观察,但是对于涉及到频域的问题,例如频谱,插值,频域补偿等需要用到滤波等运算则最好在matlab上运行。
下面是近期一些常用的matlab命令的整理以及总结:首先是对于数据的输入,对于我而言目前常用的两种已经能够满足需求,一种是通过chipscope抓取过来另存为.mat的格式:

 v1 = cell2mat(struct2cell(load('xxxx.mat')));
  • 1

这个语句是可以将.mat的数据直接存放到v1这个矩阵中,可以方便对于后面的数据处理;另外一种就是对于.txt的输入,当然对于像excel,matlab中有专门的命令“xlsread”取excel中的某个sheet,以及列数据的选择

A = xlsread('xxxx.xlsx','Sheetx','Ax:Ax')';
  • 1

下面还是说下最为常用的对于TXT的输入,这里面当然是需要对于数据先进行排列,保持一列,一个数据一行,可以加逗号也可以不加,至于分号还没试验过。如果你需要很多的数据但是它并不是一行,那么你就要想办法对于数据进行分隔处理,我在这使用的是excel的数据导入实现对于数据的分隔。

v1 = textread('XXX.txt');
  • 1

这是简单的一种当然还有复杂的,参数也就更多,类似于C语言中的文件操作

filename='xxx.txt';
fid=fopen(filename,'rb');
[h,count]=fscanf(fid,'%d',[3000,1]);
fclose(fid);
  • 1
  • 2
  • 3
  • 4

这里面是将.txt文件读到h中,conut表示数量,当然3000这个可以更改,这个倒不是特别重要。

下面是滤波的操作:

data_aft_filter=filter(filter1,1,data_2_interp);
  • 1

主要是用到filter函数,这里面的filter是滤波系数,1是FIR滤波器的分母,最后的参数则是数据的输入。
下面是模拟FPGA乘累加的过程,具体的目的是用来进行多相滤波器的实现时使用:

for n=M:N
   x_input(M:-1:1)=x(n:-1:n-M+1);       
   for i=1:P
      y((n-M)*P+i)=(x_input(M:-1:1)*h(1+(i-1)*3000/P:30+(i-1)*3000/P))/Gain;  
   end
end 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

其中M指的是多相滤波器的ram数,也就是分的项数,N表示输入数据的长度,P表示插值的倍率,GAIN代表滤波器的增益,具体取多少要经过试验。
对于频谱分析和ENOB,SNR,THD,SINAD更多需要理解其公式的含义。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/821457
推荐阅读
相关标签
  

闽ICP备14008679号