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);

相关推荐
康实训7 分钟前
老年人能力评估实训室核心实训环节解析
人工智能·算法·实训室·实训室建设
强哥聊算力5 小时前
《算力江湖·英伟达传奇》第七集:ChatGPT出现前夜,英伟达发生了什么?
服务器·人工智能·算法·ai·chatgpt·gpu算力
Navigator_Z9 小时前
LeetCode //C - 1289. Minimum Falling Path Sum II
c语言·算法·leetcode
CCblandy9 小时前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
YangYang9YangYan11 小时前
2027供应链计划校招:数学与应用数学专业如何把预测模型讲成业务决策?
人工智能·sql·算法
jsjzsl211 小时前
递归自改进系统(RSI)的本质是自发对称破缺:智能爆炸有界—— AI研发切记盲目投入
人工智能·python·算法
程序员清风11 小时前
最短路径算法:BFS、Dijkstra 与 Floyd
java·算法·宽度优先
梦帮科技11 小时前
Kali Linux Scapy 畸形报文构造学——深度解剖非法 TCP Flags 与反常序列号
linux·爬虫·神经网络·算法·数学建模·系统架构·模拟退火算法
171320330计算机毕设编程12 小时前
计算机毕业设计 基于YOLO改进算法的车辆特征识别系统设计与实现--lw
java·大数据·python·sql·算法