㈠ 下面这段单片机c语言程序是一段滤波函数是什么意思麻烦给讲解一下

其实你拿纸笔算一下就能看出来,这是一个四次均值滤波。
缓冲区的值加上最新采样值以后,乘以四分之三(最新采样值的权值为四分之一)。

㈡ 写论文需要关于边缘保持类滤波器中对称近邻均值滤波器的代码 要求用MATLAB编写 希望会的朋友多多帮忙。

f=imread('trees.tif');%读取图像
subplot(131),imshow(f);
title('原图');
f1=imnoise(f,'gaussian',0,0.02);%图像加噪
subplot(132),imshow(f1);title('加噪');
a(1:3,1:3)=1;
[m,n]=size(f1);
%[M,N]=size(f1);
X1=double(f1);
X2=X1;
%Y=zeros(M,N);
%funBox=zeros(3,3);
for i=1:m-2
for j=1:n-2
c=X1(i:i+2,j:j+2).*a;
s=sum(sum(c));
x2(i+(3-1)/2,j+(3-1)/2)=s/(9);
end
end
d=uint8(x2);
subplot(133),imshow(d);
title('均值去噪');
这个是3×3的滤波

㈢ 用单片机c编写程序进行极值平均滤波

int a[8]={},sum;
int avg;
for(i=0;i<8;i++){
sum+=a[i];
}
avg=sum/8;

这就是求8个数的平均的代码

㈣ 请问一下pwm+低通滤波器是怎么来实现的怎样通过无源低通滤波器来取得占空比可调方波的平均值,谢谢

PWM经过低通滤波器之后的电压,就可以认为是PWM的平均值。无源低通滤波可以用阻容网络来构造,如下图。此滤波器的带宽为1/(6.28×R×C),选择滤波器带宽为PWM频率的1/10即可。

㈤ 能解释下这个程序么

函数FMatrix = mfccf(num的年代,Fs)
%作者:Olutope Foluso Omogbenigun
%的电子邮件:在hotmail.com olutopeomogbenigun
%大学:伦敦城市大学
%日期:11/09/07
%的语法:M = mfccf(num的年代,Fs);
%计算并返回mfcc参数语音信号年代
%,num所需数量的MFCC系数。利用
function”melbankm”从工具箱的喉由迈克·布鲁克斯版权(c)
% 1997(GNU通用公共许可证),免费提供的 %来实现三角梅尔过滤器银行
n = 512;%数量的FFT点
Tf = 0.025;%框架在秒时间
N = f * Tf;%每帧数量的样品
fn = 24;%数量的梅尔过滤器
l =长度(s);%样品总数在讲话
Ts = 0.01;%框架步骤在几秒钟内
FrameStep = f * Ts;%框架步骤在样本
一个= 1;
b =[1,- -0.97];% a和b被高通滤波系数
noFrames =地板(l / FrameStep);%最大没有中的框架演FMatrix = 0(noFrames-2,num);%矩阵持有cepstral系数0矩阵
升降机= 1:num;%升降机向量索引
升降机= 1 +地板((num)/ 2)*(罪(升降机* pi / num));%提高正弦扶正器的版本
如果平均(abs(s))> 0.01%求平均值意味着(x,昏暗)求每一列的平均值dim默认为1
s = s / max(s);%恢复正常来补偿麦克风卷差异
结束
%段信号分解到重叠框架和计算MFCC系数
因为我= 1:noFrames-2
框架= s((i-1)* FrameStep + 1:(i-1)* FrameStep + N);%Ce1 = sum(框架。^ 2);%帧能源
Ce2 = max(Ce1,2 e-22);% 2×10层,提高到-22年的权力
Ce =日志(Ce2);
framef =过滤器(b,一个、帧);% pre-emphasis滤波器的实现高通滤波器
F = framef。*哈明(N);%乘以每帧窗口信号与明
FFTo = fft(F,N);%对信号进行快速傅里叶变换fft计算
melf = melbankm(fn、n、Fs);%创建24过滤器,梅尔过滤器银行
halfn = 1 +地板(n/2);
spectr1 = log10(melf * abs(FFTo(1:halfn))。^ 2);%的结果是我spectr = max(spectr1(:),1 e-22);
c = dct(spectr);%获得dct,更改cepstral域
c(1)= Ce;%取代第一系数
coeffs = c(1:num);%保留第一num系数
ncoeffs = coeffs。*扶正器”;%繁殖系数值的举重运动员
FMatrix(我,:)= ncoeffs”;% coeffs mfcc分配到succesive行我
结束
%调用函数来计算的deltacoeff MFCC衍生品
%系数;添加在一起来产生一个矩阵,其中3 * num西

㈥ 在PLC编程中,WORD和INT、DW和DI有什么区别,求详解数据类型感觉有点模糊

1、储存数据不同。

WORD和INT都指16位数据。WORD通常侧重于数据存储区域和带符号数据的长度,只有16位长度。INT主要关注整数数据类型(无符号)。

在PLC中它指的是16位数据的类型,但在C语言中它可以是32位。

2、储存地址长度不同。

DW是对两字存储地址长度的描述,它可以存储32位数据,即两个字的数据存储区域的长度。

3、信号不同。

DI是双字输入信号缓存区的地址定义。与DW不同,DW定义了程序内存缓存区域的数据长度,它属于PLC内部公共存储区域。

DI为输入端信号缓存区,属于本地特定函数的存储区。



(6)c语言均值滤波扩展阅读:

模糊操作是一种基于邻域的图像平滑方法。

当图像噪声只是图像的一小部分时,通过对一个像素的邻域进行变换得到的新像素可以减小噪声的影响,从而很好地平滑噪声。

均值滤波是中心点邻域的算术均值和,中值滤波是中心点邻域的中值。

本文主要研究高斯滤波。高斯滤波可以看作是均值滤波的改进。

以33的邻域为例,均值滤波是计算9个数字的平均值,高斯滤波是计算9个数字的加权平均值。中心思想是邻域内的每个点与中心点之间的距离是不同的。

它不应该与均值滤波相同,但越靠近中心,权重越大。每个点的权值都是高斯分布。

㈦ 急求中值滤波的伪代码(300分)

unsigned char WINAPI GetMedianNum(unsigned char * bArray, int iFilterH,int iFilterW)

{

/* unsigned char m = mid(

mid(bArray[0],bArray[1],bArray[2]),

mid(bArray[3],bArray[4],bArray[5]),

mid(bArray[6],bArray[7],bArray[8]));

return m;*/

// 循环变量

int i;

int j;

int k;

// 中间变量

unsigned char bTemp;

int iFilterLen=iFilterH*iFilterW;

float average=0;//用于均值加速

//求均值

for (i=0;i<iFilterLen;i++)

{

average+=bArray[i];

}

average=average/iFilterLen;

unsigned char pixel_mid;

pixel_mid=bArray[(iFilterH-1)/2*iFilterW+(iFilterW-1)/2];//滤波窗口中心的取中值前的像素值

if (abs(average-pixel_mid)>10) //均值加速,其中“10”为原中值和均值之差,根据你的实际情况自行设置大小

//if(1) //不用均值加速时选此

{

//超快速中值法(本质就是伪中值法)

//行排列

if (0)

{

for (k = 0; k < iFilterH; k ++)

{

for (j = 0; j < iFilterH-1; j ++)

{

for (i = 0; i < iFilterW-1-j; i++)

{

number++;

if (bArray[i+iFilterH*k] > bArray[i+iFilterH*k+1])

{ // 互换

bTemp = bArray[i+iFilterH*k];

bArray[i+iFilterH*k] = bArray[i+iFilterH*k+1];

bArray[i+iFilterH*k+1] = bTemp;

}

}

}

}

//列排列

// for (k = 0; k < iFilterW; k ++)

//{

k=(iFilterW-1)/2;

for (j = 0; j < iFilterH-1; j ++)

{

for (i = 0; i < iFilterW-1-j; i++)

{

number++;

if (bArray[k+iFilterW*i] > bArray[k+iFilterW*(i+1)])

{

// 互换

bTemp = bArray[k+iFilterW*i];

bArray[k+iFilterW*i] = bArray[k+iFilterW*(i+1)];

bArray[k+iFilterW*(i+1)] = bTemp;

}

}

}

}

else

{

//传统冒泡法获取中值

if(0)

{for (j = 0; j < iFilterLen - 1; j ++)

{

for (i = 0; i < iFilterLen - j - 1; i ++)

{

number++;

if (bArray[i] > bArray[i + 1])

{

// 互换

bTemp = bArray[i];

bArray[i] = bArray[i + 1];

bArray[i + 1] = bTemp;

}

}

}

}

else

{

quickSort(bArray,0,iFilterLen-1);//快速排序法

}

}

}

//else

// 计算中值。注:本程序的数组均为奇数个元素

bTemp=bArray[(iFilterLen -1) / 2];

// 返回中值

return bTemp;

}

void quickSort(unsigned char a[], int l, int r)

{// 排序a [ l : r ], a[r+1] 有大值

int t;

if (l >= r) return;

int i = l, // 从左至右的游标

j = r + 1; // 从右到左的游标

unsigned char pivot = a[l];

// 把左侧>= pivot的元素与右侧<= pivot 的元素进行交换

while (true) {

do {// 在左侧寻找>= pivot 的元素

i = i + 1;

number++;

} while (a[i] < pivot);

do {// 在右侧寻找<= pivot 的元素

j = j - 1;

number++;

} while (a[j] > pivot);

if (i >= j) break; // 未发现交换对象

t=a[i];

a[i]=a[j];

a[j]=t;

}

// 设置p i v o t

a[l] = a[j];

a[j] = pivot;

quickSort(a, l, j-1); // 对左段排序

quickSort(a, j+1, r); // 对右段排序

}

㈧ c语言程序,本屌是初学者所以麻烦不要用太高级的语句谢谢QAQ

额 我的数字信号处理学的很差,但是我大概了解了下,是不是这个意思首先由两个sin函数构成了一个输入信号,在数字信号处理中叫做激励的东西,然后您给了一个平滑滤波的公式,于是您期望输出信号,也就是信号与系统中所说的Y(z)=H(z)*X(z)如果是的话。那么我就上图了。

intExcitationSignal(intN,float*OutSignalBuffer)
{
floatPi=3.14;
floatx=0;
inti;
for(i=0;i<=N;i++,x++)
{
*(OutSignalBuffer+i)=sin(0.05*Pi*x)+0.1*sin(0.7*Pi*x);

}

return0;
}
voidPrint(float*Buffer,intN)
{
inti=0;
for(i=0;i<N;i++)
printf(" [%d] [%f] ",i,*(Buffer+i));
}

voidtest()
{
float*InS;
InS=(float*)malloc(sizeof(float)*128);
float*OutS;
OutS=(float*)malloc(sizeof(float)*128);

ExcitationSignal(127,InS);
//Print(InS,127);


intj,i;
for(j=0;j<124;j++)
Smooth(i,j,3,InS,OutS);
Print(OutS,124);

}
intmain(void)
{
test();
getchar();
return0;
}

我程序中子函数中malloc但是没有free,你可以看情况free下。

㈨ 数字滤波的C语言程序怎么写

大体上有两种软件滤波方法,都是用来过滤数据,去掉突变的值:
1、移动平均版
2、中值滤权波

移动平均:
就是对数据做FIFO,并取平均值,使数据平滑,过滤掉突变的值;

中值滤波:
中值滤波比移动平均更能使数据平滑,原理是,将规定的一组数据进行排序,并取其中值,这样可以去掉数据中的最大值和最小值,以使数据更加平滑;

以上两种可以组合使用,如:先进行移动平均,再进行中值滤波,使数据平滑美观。

㈩ 获取直流,怎么数字滤波

给你10种滤波方式你自己看看吧:
1、限幅滤波法(又称程序判断滤波法)
A、方法:
根据经验判断,确定两次采样允许的最大偏差值(设为A)
每次检测到新值时判断:
如果本次值与上次值之差<=A,则本次值有效
如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值
B、优点:
能有效克服因偶然因素引起的脉冲干扰
C、缺点
无法抑制那种周期性的干扰
平滑度差

2、中位值滤波法
A、方法:
连续采样N次(N取奇数)
把N次采样值按大小排列
取中间值为本次有效值
B、优点:
能有效克服因偶然因素引起的波动干扰
对温度、液位的变化缓慢的被测参数有良好的滤波效果
C、缺点:
对流量、速度等快速变化的参数不宜

3、算术平均滤波法
A、方法:
连续取N个采样值进行算术平均运算
N值较大时:信号平滑度较高,但灵敏度较低
N值较小时:信号平滑度较低,但灵敏度较高
N值的选取:一般流量,N=12;压力:N=4
B、优点:
适用于对一般具有随机干扰的信号进行滤波
这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动
C、缺点:
对于测量速度较慢或要求数据计算速度较快的实时控制不适用
比较浪费RAM

4、递推平均滤波法(又称滑动平均滤波法)
A、方法:
把连续取N个采样值看成一个队列
队列的长度固定为N
每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则)
把队列中的N个数据进行算术平均运算,就可获得新的滤波结果
N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4
B、优点:
对周期性干扰有良好的抑制作用,平滑度高
适用于高频振荡的系统
C、缺点:
灵敏度低
对偶然出现的脉冲性干扰的抑制作用较差
不易消除由于脉冲干扰所引起的采样值偏差
不适用于脉冲干扰比较严重的场合
比较浪费RAM

5、中位值平均滤波法(又称防脉冲干扰平均滤波法)
A、方法:
相当于“中位值滤波法”+“算术平均滤波法”
连续采样N个数据,去掉一个最大值和一个最小值
然后计算N-2个数据的算术平均值
N值的选取:3~14
B、优点:
融合了两种滤波法的优点
对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差
C、缺点:
测量速度较慢,和算术平均滤波法一样
比较浪费RAM

6、限幅平均滤波法
A、方法:
相当于“限幅滤波法”+“递推平均滤波法”
每次采样到的新数据先进行限幅处理,
再送入队列进行递推平均滤波处理
B、优点:
融合了两种滤波法的优点
对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差
C、缺点:
比较浪费RAM

7、一阶滞后滤波法
A、方法:
取a=0~1
本次滤波结果=(1-a)*本次采样值+a*上次滤波结果
B、优点:
对周期性干扰具有良好的抑制作用
适用于波动频率较高的场合
C、缺点:
相位滞后,灵敏度低
滞后程度取决于a值大小
不能消除滤波频率高于采样频率的1/2的干扰信号

8、加权递推平均滤波法
A、方法:
是对递推平均滤波法的改进,即不同时刻的数据加以不同的权
通常是,越接近现时刻的数据,权取得越大。
给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低
B、优点:
适用于有较大纯滞后时间常数的对象
和采样周期较短的系统
C、缺点:
对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号
不能迅速反应系统当前所受干扰的严重程度,滤波效果差

9、消抖滤波法
A、方法:
设置一个滤波计数器
将每次采样值与当前有效值比较:
如果采样值=当前有效值,则计数器清零
如果采样值<>当前有效值,则计数器+1,并判断计数器是否>=上限N(溢出)
如果计数器溢出,则将本次值替换当前有效值,并清计数器
B、优点:
对于变化缓慢的被测参数有较好的滤波效果,
可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动
C、缺点:
对于快速变化的参数不宜
如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导入系统

10、限幅消抖滤波法
A、方法:
相当于“限幅滤波法”+“消抖滤波法”
先限幅,后消抖
B、优点:
继承了“限幅”和“消抖”的优点
改进了“消抖滤波法”中的某些缺陷,避免将干扰值导入系统
C、缺点:
对于快速变化的参数不宜