我試圖做一個簡單的過濾器傳入數據(保存最大和最小的選擇),例如: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