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

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

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

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

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

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

v1 = textread('XXX.txt');

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

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

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

下面是滤波的操作:

data_aft_filter=filter(filter1,1,data_2_interp);

主要是用到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 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值