MATLAB导出滤波器参数至ADSP中使用

一、matlab设计滤波器

使用filterDesigner命令打开滤波器设计模块

二、运行matlab脚本转换出C可以直接使用的系数

Matlab 复制代码
clc;
BIQUADS = 5; %对应ADI biquad SECTION数量
fp = fopen("lowpass.txt","w");
for i = 1:BIQUADS
    fprintf(fp, '%2.20e,\n', -SOS(i,6));
    fprintf(fp, '%2.20e,\n', -SOS(i,5));
    fprintf(fp, '%2.20e,\n', SOS(i,3)*G(i));
    fprintf(fp, '%2.20e,\n', SOS(i,2)*G(i));
    fprintf(fp, '%2.20e,\n', SOS(i,1)*G(i));
end

三、在C中使用

cpp 复制代码
/*****************************************************************************
 * biquad_test.c
 *****************************************************************************/

#include "adi_initialize.h"
#include "biquad_test.h"

#include <sys/platform.h>

/** 
 * If you want to use command program arguments, then place them in the following string. 
 */
char __argv_string[] = "";


#include <filter.h> //vector_version
#define NSECTIONS  5  //5个biquad级联使用
#define NSAMPLES  7 //数据长度64
#define NSTATE    (2*NSECTIONS) //state数组的长度 2的倍数

float input[NSAMPLES]={1,2,3,4,5,6,7};
float output[NSAMPLES];

float state[NSTATE];

//共25个系数 在数组中的顺序为
//[A2, A1, B2, B1, B0     A2, A1, B2, B1, B0   A2, A1, B2, B1, B0   A2, A1, B2, B1, B0 ...]
//第一个biquad            第二个biquad          第三个biquad          第四个biquad...
float pm coeffs[5*NSECTIONS]={
#include "lowpass.txt"
};

int main(int argc, char *argv[])
{
	int i;

	for (i = 0; i < NSTATE; i++){
		state[i] = 0;     /* initialize state array */
	}

	biquad(input, output, coeffs, state, NSAMPLES, NSECTIONS);  //调用完biquad后state数组不为0


	return 0;
}

四、验证

Matlab 复制代码
x = [1,2,3,4,5,6,7]';

%% 先用sos2tf转换为传递函数,再滤波

[b, a] = sos2tf(SOS, G); % b为分子系数, a为分母系数

y2 = filter(b, a, x);

相关推荐
We་ct2 小时前
LeetCode 199. 二叉树的右视图:层序遍历解题详解
前端·算法·leetcode·typescript·广度优先
Coisinilove2 小时前
MATLAB微分方程求解
开发语言·matlab·微分方程
鲨辣椒100862 小时前
线程函数接口补充
java·开发语言·算法
0 0 02 小时前
CCF-CSP 33-2 相似度计算(jaccard)【C++】考点:STL容器(set/map)
开发语言·c++·算法
每天要多喝水2 小时前
图论Day38:孤岛基础
算法·深度优先·图论
瓦特what?2 小时前
波 浪 排 序
c++·算法·排序算法
blackicexs2 小时前
第六周第日天
数据结构·算法
逆境不可逃2 小时前
LeetCode 热题 100 之 48.旋转图像
算法·leetcode·职场和发展
Frostnova丶2 小时前
LeetCode 1022. 从根到叶的二进制数之和
算法·leetcode