C语言实现周期数组复用相减完成混合无线电信号降噪
信号降噪函数C语言实现方案
原代码存在的核心问题
- 数组作为函数参数传入时会退化为指针,使用
sizeof(noisy)只能获取指针字节数,无法得到数组实际长度,题目明确信号以-1为结束标记,应该通过遍历终止符计算长度 - 硬编码中子星信号数组长度为3,适配性差,无法适配任意长度的单周期信号
- 逻辑上使用goto跳转实现周期复用完全没有必要,直接用取模运算即可实现循环遍历star数组
- 结尾标记错误,题目要求纯净信号以
-1结束,原代码错误使用了字符串终止符\0 - sizeof运算优先级错误,未加括号导致计算逻辑完全不符合预期
正确实现代码
#include <stdio.h> #include <stdlib.h> void jeltisztitas(int noisy[], int star[], int clean[]) { // 计算中子星单周期信号的实际长度 int star_len = 0; while (star[star_len] != -1) { star_len++; } // 遍历混合信号计算纯净信号 int i = 0; while (noisy[i] != -1) { // 取模运算自动实现star数组循环复用 clean[i] = noisy[i] - star[i % star_len]; i++; } // 按要求添加结束标记 clean[i] = -1; }
实现说明
- 首先遍历star数组直到遇到
-1,得到单周期信号的实际长度,适配任意长度的中子星周期信号 - 遍历混合信号noisy的每个元素,通过
i % star_len自动循环取star的元素,不需要额外的下标重置逻辑,代码简洁不易出错 - 遍历完所有混合信号元素后,直接在对应位置给clean数组赋值
-1作为结束标记,保证clean数组长度和noisy完全一致 - 符合题目要求不需要额外校验计算结果的非负性,直接赋值即可
内容的提问来源于stack exchange,提问作者balazscseh
相关产品推荐
相关产品推荐

