📄 filter.lst
字号:
C51 COMPILER V8.05a FILTER 10/28/2008 10:30:07 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE FILTER
OBJECT MODULE PLACED IN filter.OBJ
COMPILER INVOKED BY: F:\Keil C51 V8\C51\BIN\C51.EXE filter.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <math.h>
2
3 #define N 7
4 int _buf[N];
5 unsigned char _n = 0;
6 unsigned char _ptr = 0;
7
8 //限幅滤波
9 //滤波幅度
10 int _filter_0(int v) {
11 1 return 0;
12 1 }
*** WARNING C280 IN LINE 10 OF FILTER.C: 'v': unreferenced local variable
13
14 //中值滤波
15 int _filter_1(int v) {
16 1 int tmp[N];
17 1 unsigned char i = 0, j = 0;
18 1 int s = 0;
19 1 _buf[_ptr] = v;
20 1 if (++_ptr == N) _ptr = 0;
21 1 if (_n < N) _n++;
22 1 for (i = 0 ; i < _n ; i++) tmp[i] = _buf[i];
23 1 //对tmp排序(冒泡法)
24 1 for (i = 0 ; i < _n - 1 ; i++) {
25 2 for (j = i + 1 ; j < _n ; j++) {
26 3 if (tmp[i] > tmp[j]) {
27 4 s = tmp[i];
28 4 tmp[i] = tmp[j];
29 4 tmp[j] = s;
30 4 }
31 3 }
32 2 }
33 1 return tmp[_n / 2];
34 1 }
35
36 //算术平均值滤波
37 int _filter_2(int v) {
38 1 return 0;
39 1 }
*** WARNING C280 IN LINE 37 OF FILTER.C: 'v': unreferenced local variable
40
41 //滑动平均值滤波
42 int _filter_3(int v) {
43 1 unsigned char i = 0;
44 1 int sum = 0;
45 1 buf[_ptr] = v;
46 1 if (++_ptr == N) _ptr = 0;
47 1 if (_n < N) _n++;
48 1 for (i = 0 ; i < _n ; i++)
49 1 sum += buf[i];
50 1 return sum / _n;
51 1 }
52
53 //加权滑动平均值滤波
C51 COMPILER V8.05a FILTER 10/28/2008 10:30:07 PAGE 2
54 //unsigned char weight[N] = {1, 1, 2, 2, 2, 2, 90};//接近于不滤波
55 unsigned char code weight[N] = {1, 2, 2, 5, 10, 20, 60};
56 //unsigned char weight[N] = {5, 7, 8, 12, 18, 25, 25};
57 //unsigned char weight[N] = {14, 14, 14, 14, 14, 14, 16};//相当于不加权
58 int _filter_4(int v) {
59 1 unsigned char i = 0, j = 0;
60 1 float rst = 0;
61 1 _buf[_ptr] = v;
62 1 if (_n < N) _n++;
63 1 for (i = 0 ; i < _n ; i++) {
64 2 j = _ptr + i;
65 2 if (j >= _n) j -= _n;
66 2 rst += (float)_buf[j] / 100.0 * (float)weight[_n - 1 - i];
67 2 }
68 1 if (++_ptr == N) _ptr = 0;
69 1 return rst;
70 1 }
71
72 int filter(int v, unsigned char flt_idx) {
73 1 switch (flt_idx) {
74 2 case 0:
75 2 return v;
76 2 case 1:
77 2 return _filter_0(v);//限幅
78 2 case 2:
79 2 return _filter_1(v);//中值
80 2 case 3:
81 2 return _filter_2(v);//算术平均
82 2 case 4:
83 2 return _filter_3(v);//滑动
84 2 case 5:
85 2 return _filter_4(v);//加权滑动
86 2 default:
87 2 return 0;
88 2 }
89 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 542 ----
CONSTANT SIZE = 7 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 26
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -