在线调EQ

在线调EQ方法

1)软件上修改流程方法: 例如使用 board_ac695x_demo.c 配置。在 board_ac695x_demo_cfg.h 打开如下设置。

在这里插入图片描述
在线 EQ 调试默认使用 DP/DM 作为通信串口,需要注意的是不要和其他的串口(如串口打印、
充电仓等)冲突了,如果有冲突,可以根据硬件环境更改到其他的串口。如图冲突:
在这里插入图片描述
充电仓配置中,//是否支持测试盒修改为0
在这里插入图片描述
2)PC 端设置流程。 打开”杰理包管理器”。找到软件包名为“eq”的软件,如果可升级,点击更新到最新版本。
在这里插入图片描述
点击“执行”eq 软件。会弹出如下 eq 调试工具界面。
在这里插入图片描述
可以先查看我们的 EQ 使用文档。同时需要注意选择 AC695X 项,波特率注意为115200.
在这里插入图片描述
在这里插入图片描述
用上面图设置后,就可以实时的测试 EQ 效果。 EQ 效果调试好后,选择“导出固件配置”,那么对应的 bin 文件就保存在工具的安装列表下。
在这里插入图片描述
3)把 EQ 配置下载到芯片中 把上面调试出的 EQ 效果 BIN 文件 eq_cfg_hw.bin 放入下载目录里\cbp_out\cpu\br25\tools
在这里插入图片描述
在批处理下加入 eq_cfg_hw.bin 的资源。
在这里插入图片描述
在这里插入图片描述
注意:外部的配置资源一定要放在-res 这个所属项里头,例如 eq_cfg_hw.bin 的资源,因为跟工具的识别项是同步的。

注意点:打印线不需要接正极

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自动均衡算法需要先确定一个目标曲线,即所谓的“期望响应曲线”,然后通过对输入信号进行实时滤波,将其整为期望响应曲线的形状,从而实现自动均衡的效果。以下是一个简单的实现示例,使用C语言编写: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #define SAMPLE_RATE 44100 #define NUM_BANDS 10 float target_response[NUM_BANDS] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // 期望响应曲线 float eq_gain[NUM_BANDS] = {0}; // EQ增益值 float eq_q[NUM_BANDS] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; // EQ Q值 float eq_freq[NUM_BANDS] = {20, 100, 200, 400, 800, 1600, 3200, 6400, 12800, 20000}; // EQ中心频率 float eq_alpha[NUM_BANDS] = {0}; // EQ滤波器系数 float input_buffer[SAMPLE_RATE]; // 输入信号缓存 float output_buffer[SAMPLE_RATE]; // 输出信号缓存 void generate_alpha(float a[], float gain[], float freq[], float q[], int num_bands) { float w0, alpha; for (int i = 0; i < num_bands; i++) { w0 = 2 * M_PI * freq[i] / SAMPLE_RATE; alpha = sin(w0) / (2 * q[i]); a[i] = pow(10, gain[i] / 20); a[i] = a[i] * (1 - alpha); } } void apply_eq(float a[], float x[], float y[], int num_bands, int num_samples) { float w0, alpha, b0, b1, b2, a0, a1, a2, x1 = 0, x2 = 0, y1 = 0, y2 = 0; for (int i = 0; i < num_samples; i++) { y[i] = a[0] * x[i] + a[1] * x1 + a[2] * x2 - a[4] * y1 - a[5] * y2; x2 = x1; x1 = x[i]; y2 = y1; y1 = y[i]; } } void auto_eq(float x[], float y[], int num_bands, int num_samples) { float response[NUM_BANDS] = {0}, error[NUM_BANDS] = {0}, delta[NUM_BANDS] = {0}; float max_error, max_delta; int max_index; for (int i = 0; i < num_samples; i++) { for (int j = 0; j < num_bands; j++) { response[j] += pow(y[i], 2); error[j] += pow(y[i] - target_response[j], 2); } } for (int i = 0; i < num_bands; i++) { error[i] = sqrt(error[i] / num_samples); delta[i] = target_response[i] - response[i] / num_samples; } max_error = error[0]; max_delta = delta[0]; max_index = 0; for (int i = 1; i < num_bands; i++) { if (error[i] > max_error) { max_error = error[i]; } if (fabs(delta[i]) > fabs(max_delta)) { max_delta = delta[i]; max_index = i; } } eq_gain[max_index] += max_delta; generate_alpha(eq_alpha, eq_gain, eq_freq, eq_q, num_bands); apply_eq(eq_alpha, x, y, num_bands, num_samples); } int main() { // 加载输入信号 FILE *input_file = fopen("input.wav", "rb"); if (!input_file) { printf("Failed to open input file.\n"); return 1; } fseek(input_file, 44, SEEK_SET); fread(input_buffer, sizeof(float), SAMPLE_RATE, input_file); fclose(input_file); // 初始化EQ generate_alpha(eq_alpha, eq_gain, eq_freq, eq_q, NUM_BANDS); // 自动均衡整 for (int i = 0; i < 10; i++) { auto_eq(input_buffer, output_buffer, NUM_BANDS, SAMPLE_RATE); } // 保存输出信号 FILE *output_file = fopen("output.wav", "wb"); if (!output_file) { printf("Failed to open output file.\n"); return 1; } fwrite(output_buffer, sizeof(float), SAMPLE_RATE, output_file); fclose(output_file); return 0; } ``` 这个算法中,首先定义了一个目标响应曲线`target_response`,然后通过对输入信号进行滤波的方式不断EQ增益值,使得输出信号的响应曲线逐渐接近目标曲线。具体实现中,对于每个频段,使用一个二阶IIR滤波器来进行滤波,滤波器系数通过EQ增益值、中心频率和Q值计算得出。在每次滤波之后,计算输出信号的响应曲线,并与目标曲线进行比较,根据比较结果EQ增益值。最终输出的信号经过多次自动均衡整后,可以达到比较接近目标响应曲线的效果。 需要注意的是,这个算法只是一个简单的示例,实际应用中需要根据具体的需求进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值