c語言均值濾波
㈠ 下面這段單片機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、缺點:
對於快速變化的參數不宜