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

相关推荐
花月C8 小时前
线性动态规划(Linear DP)
算法·动态规划·代理模式
Dev7z8 小时前
基于MATLAB的5G物理层文本传输系统仿真与性能分析
开发语言·5g·matlab
hetao17338379 小时前
2025-03-24~04-06 hetao1733837 的刷题记录
c++·算法
_深海凉_9 小时前
LeetCode热题100-环形链表
算法·leetcode·链表
原来是猿9 小时前
Linux进程信号详解(三):信号保存
开发语言·c++·算法
2401_892070989 小时前
算法与数据结构精讲:最大子段和(暴力 / 优化 / 分治)+ 线段树从入门到实战
c++·算法·线段树·最大子段和
memcpy09 小时前
LeetCode 904. 水果成篮【不定长滑窗+哈希表】1516
算法·leetcode·散列表
老四啊laosi9 小时前
[双指针] 8. 四数之和
算法·leetcode·四数之和
汀、人工智能9 小时前
[特殊字符] 第24课:反转链表
数据结构·算法·链表·数据库架构··反转链表
田梓燊9 小时前
leetcode 41
数据结构·算法·leetcode