我试图做一个简单的过滤器传入数据(保存最大和最小的选择),例如:44100来每秒采样,但屏幕必须显示1000.我在44.1个采样范围内选择最大值或最小值,然后输出屏幕。但是,这个算法不是很准确。在代码中,它看起来像这样:示波器算法,动态数据输入,限制输出数据
例如伪算法
float max = 0;
float min = 0;
float filter = 0;
float step = 44100/1000;
for(int i = 0 ; i < 44100; i++){
if(input[i] > 0)
if(max < input[i])
max = input[i];
if(input[i] < 0)
if(min > input[i])
min = input[i];
filter++;
if(filter >= step){
filter = filter - step;
//1st version (bad version)
memory[count] = max + min;
//2nd version (bad version)
if(max > abs(min))
memory[count] = max;
else if(max < abs(min))
memory[count] = min;
//3nd version (only maximum)
memory[count] = max; //work great, but only > 0
//4nd version (only minimum)
memory[count] = min; //work great, but only < 0
max = 0;
min = 0;
count++;
if(count >= 1000)
count = 0;
};
};
我在做什么错?另外,一切工作正常(最大或最小),但当连接在一起,结果不好。
我有图片,但是我无法在这里粘贴它们。 该帖子下的图片链接。
您应该注意,整数除法44100/1000'实际上会产生44,而不是44.1。 – 2015-03-13 12:13:58
你确定你初始化min&max为0? – user3528438 2015-03-13 12:18:31
这并不重要,传入的数据可以是无限的,例如每10个样本我们可以取1。保存最大值和最小值的任务,从... – gotostereo 2015-03-13 12:27:36