做网站怎样办营业执照wordpress 正在连接
2026/4/18 14:28:13 网站建设 项目流程
做网站怎样办营业执照,wordpress 正在连接,建设历史文化旅游宣传网站,南宁网站制作定制STM32开发 FIR高通滤波器 STM32实现FIR有限冲击响应高通滤波器#xff0c;自编代码#xff0c;汉明窗#xff0c;送MATLAB程序#xff0c;代码注释详细先别急着写代码#xff0c;咱们得先搞定滤波器系数。掏出MATLAB#xff0c;20阶高通滤波器走起#xff1a; order 20…STM32开发 FIR高通滤波器 STM32实现FIR有限冲击响应高通滤波器自编代码汉明窗送MATLAB程序代码注释详细先别急着写代码咱们得先搞定滤波器系数。掏出MATLAB20阶高通滤波器走起order 20; cutoff 0.4; % 归一化截止频率 h fir1(order, cutoff, high, hamming(order1)); fprintf({%.8ff, , h(1:end-1)); fprintf(%.8ff}, h(end));这段脚本直接生成汉明窗加权的滤波器系数打印成C数组格式。注意这里截止频率别设太高0.4对应实际采样频率的40%。比如采样率1kHz的话截止就是200Hz。接下来STM32这边直接上硬核代码。先整个环形缓冲区管理输入数据#define FILTER_ORDER 20 float buffer[FILTER_ORDER1]; uint8_t buf_index 0; void push_sample(float new_sample) { buffer[buf_index] new_sample; buf_index (buf_index 1) % (FILTER_ORDER1); }这个环形缓冲区的骚操作在于每次新数据覆盖最老的数据省去了数组整体移动的开销。注意FILTER_ORDER1的缓冲区长度刚好装下当前窗口的所有采样点。卷积运算才是重头戏直接手撸float fir_filter(float *coeffs) { float output 0.0f; uint8_t index buf_index; for(int i0; iFILTER_ORDER; i){ if(index 0) index FILTER_ORDER; output coeffs[i] * buffer[index]; index--; } return output; }这里倒着取缓冲区数据的操作是关键因为新数据总在buf_index位置老数据顺时针排列。用if判断代替取模运算实测能省20%计算时间。实际工程里记得把系数转成Q15格式上ARM的DSP库加速#include arm_math.h arm_fir_instance_f32 fir; float fir_state[FILTER_ORDER BLOCK_SIZE -1]; void filter_init() { arm_fir_init_f32(fir, FILTER_ORDER1, hamming_coeffs, fir_state, BLOCK_SIZE); } void process_block(float *input, float *output) { arm_fir_f32(fir, input, output, BLOCK_SIZE); }用DSP库的批处理模式一次处理一个数据块比单点处理快3倍不止。注意state数组要足够大别溢出。调试时遇到过坑直接浮点运算在F103上慢成狗后来切到CMSIS-DSP的定点库Q15格式配合armfirq15速度直接起飞。不过要小心系数缩放搞不好就溢出。建议先用MATLAB验证定点化的误差q15_coeffs int16(h * 32767);最后在main函数里这么用while(1) { float raw read_adc(); push_sample(raw); float filtered fir_filter(coeffs); printf(%f\t%f\n, raw, filtered); }实测效果拔群50Hz工频干扰被干得服服帖帖。完整工程丢在Github了需要自取。记住滤波器阶数不是越高越好够用就行STM32F4跑100阶滤波器照样轻松。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询