當前位置:首頁 » 編程語言 » c語言濾波函數

c語言濾波函數

發布時間: 2023-08-30 04:15:24

c語言中值濾波問題

1. 是規定做中值濾波的點不含邊緣的點(取決於中值濾波窗口大小)。 2,對圖像邊緣部分的信息進行鏡像處理。

② c語言中fabs()是什麼意思

數學函數:fabs

原型:extern float fabs(float x);

用法:#include <math.h>

功能:求浮點數x的絕對值

說明:計算|x|, 當x不為負時返回x,否則返回-x

舉例:

// fabs.c

#include <syslib.h>

#include <math.h>

main()

{

float x;

clrscr(); // clear screen

textmode(0x00); // 6 lines per LCD screen

x=-74.12;

printf("|%f|=%f ",x,fabs(x));

x=0;

printf("|%f|=%f ",x,fabs(x));

x=74.12;

printf("|%f|=%f ",x,fabs(x));

getchar();

return 0;

}

(2)c語言濾波函數擴展閱讀:

程序判數濾波 采樣的信號,如因常受到隨機干擾感測器不穩定而引起嚴重失真時,可以採用此方法。

方法是:根據生產經驗確定兩交采樣允許的最大偏差△×,若先後兩次采樣的信號相減數值大於△×,表明輸入的是干擾信號,應該去掉;

用上次采樣值作為本次采樣值,若小於、等於△×表明沒有受到干,本次采樣值效。該方法適用於慢變化的物理參數的采樣,如溫度、物理位置等測量系統。

程序判斷濾波的C程序函數如下:

float program_detect_filter(float old_new_value[], float X)

{

float sample_value;

if (fabs(old_new_value[1]_old_new_value[0])>X)

sample_value=old_new_value[0];

else

sample_value=old_new_value[1];

retrun(sample_value);

}

函數調用需一個一維的兩個元素的數組(old_new_value[2],用於存放上次采樣值(old_new_value[0],)和本次采樣值(old_new_value[1],),函數中sample_value表示有效采樣值,X表示根據根據經驗確定的兩次采樣允許的最大偏差△×。

③ 求IIR及FIR數字濾波器的C語言實現。(VC++)

這個問題比較復雜,最近本人也在研究數字濾波,

結合圖片說一下

第一個圖是fir的流程圖,其中Z-1是延遲,是單個采樣時間1/fs

n階的fir濾波器就是選取最近的n+1個樣本,然後使他們各自乘以自己的濾波器系數即圖中的F(n),[一般其他書的表示是h(n)]

然後相加得到輸出的y(n)就是一個輸出點

,其中F(n)的得出需要根據采樣頻率和濾波器的通帶和阻帶來決定

其中為了改善旁瓣的幅值,一般在采樣後給樣本或者h(n)加窗,當然可以用「最佳方法」來做

得出h(n)大致方法是先將矩形窗進行DFT,得出h(n),然後對h(n)進行加窗得出h(k),然後將∑h(k)×x(n)=y(n),假如階數較多可以用傅里葉變換使時域變頻域後再將卷積相加,可以利用FFT來改進實時性,提升速度

上面就是fir濾波器的簡述

第二個圖片上傳不了,直接給鏈接

http://image..com/i?ct=503316480&z=0&tn=imagedetail&word=%D2%BB%BD%D7iir%C2%CB%B2%A8%C6%F7&in=12708&cl=2&cm=1&sc=0&lm=-1&pn=0&rn=1&di=2607528304&ln=1054&fr=

圖中的Z-1是延時,iir濾波器也叫無限沖擊響應濾波器,是有反饋的,

圖中的是一階的,相對fir濾波器來說,iir濾波器可以用較低的階數來獲得較好的濾波特效。但是其相位特性較差。

鑒於實用性,還是建議樓主去圖書館借書看,網路不可能得到確實的方案,

樓主可以去借「數字信號處理」的書,國外的中譯本就有詳細介紹fir和iir以及fft還有其他變換,國內的dsp大都幾乎是dsp用戶手冊的中譯本,對上述問題都是很簡陋地帶過,不予置評。

本人推薦一本書在www.ouravr.com上面的dsp專欄有下載,40多M,叫DSP演算法、應用和設計,本人有這本實體書,寫的較好

④ 只是用簡單的C語言,能實現高斯濾波嗎

可以的。
int*** SmoothImage(int ***XImage ,int width, int height, int channel)
{
double sigma = 1.85; //(n/2 -1)*0.3 +0.8 { n = 9 ,no. of elements}
double conv[3][3];
double hg = 0;
//Convolution kernel
for(i=0; i<3;i++)
{
for(j=0;j<3;j++)
{
int u=i-1; //subtract from centre element index in 3*3 (1,1)
int v=j-1;
conv[i][j] =exp ( - ((u*u) + (v*v)) / (2*sigma*sigma) );
hg += conv[i][j];
}
}
for(int i=0; i<3;i++)
{
for(int j=0;j<3;j++)
{
conv[i][j] = conv[i][j] / hg;
}
}
int*** sXImage = 0;
sXImage = CreateImageMatrix( sXImage , width , height , channel );// allocating a 3d array
//Assigning weights
for(int i =0; i < height ; i++)
{
for(int j =0; j < width ; j++)
{
for(int k =0; k < 3 ; k++)
{
double val = 0;
double valw =0;
if(j-1 > 0 && i-1 > 0)
{
val += conv[0][0] * XImage[i-1][j-1][k];
valw += conv[0][0];
}
if(i-1 > 0 )
{
val += conv[0][1] * XImage[i-1][j][k];
valw += conv[0][1];
}
if(i-1 > 0 && j+1 < width)
{
val += conv[0][2] * XImage[i-1][j+1][k];
valw += conv[0][2];
}

if(j-1 > 0 )
{
val += conv[1][0] * XImage[i][j-1][k];
valw += conv[1][0];
}

val += conv[1][1] * XImage[i][j][k];
valw += conv[1][1];
if(j+1 < width)
{
val += conv[1][2] * XImage[i][j+1][k];
valw += conv[1][2];
}

if(j-1 > 0 && i+1 < height)
{
val += conv[2][0] * XImage[i+1][j-1][k];
valw += conv[2][0];
}
if(i+1 < height)
{
val += conv[2][1] * XImage[i+1][j][k];
valw += conv[2][1];
}
if(j+1 < width && i+1 < height)
{
val += conv[2][2] * XImage[i+1][j+1][k];
valw += conv[2][2];
}

sXImage[i][j][k] = val / valw;

}
}
}

return( sXImage);

}

⑤ 給定一個信號s,包括高頻、低頻成份,現在做一個低通濾波器對信號進行濾波,求c語言程序,急急急!

教你實現神哪方法吧:

第一步:你需要採用MATLAB 設計濾凱瞎凳波器的脈沖響應序列,如記為h(n) = [ h1,h2,... hN]

第二步:c 語言實現的是 y(n) = h(n) 卷積x(n) 其中h(n)和x(n)都是向量

詳細代碼很簡單,自盯旅己來吧。

⑥ 巴特沃斯濾波器c語言實現

說的很對,濾波玩的就是增益(衰減)變化,不同的頻率,不同的增益(衰減)。稱幅頻曲線。
1、巴特奧斯濾波器的截止頻率指-3db通頻帶頻率,也就是在這個頻率以內保證暢通(通帶)。
2、另一個指標叫做阻帶,頻率大於此值能夠保證衰減大於某值

⑦ C語言中fabs是什麼含義

fabs函數是一個求絕對值的函數,求出x的絕對值,和數學上的概念相同,當x不為負時返回 x,否則返回 -x。

在TC中原型是extern float fabs(float x);在VC6.0中原型是double fabs(double x )。

頭文件為:#include <math.h>

舉個例子:

#include <syslib.h>

#include <math.h>

main()

{ float x;

clrscr(); // clear screen

textmode(0x00); // 6 lines per LCD screen

x=-74.12; printf("|%f|=%f ",x,fabs(x));

x=0; printf("|%f|=%f ",x,fabs(x));

x=74.12; printf("|%f|=%f ",x,fabs(x));

getchar();

return 0;

}

(7)c語言濾波函數擴展閱讀:

fabs函數的應用:

程序判數濾波 采樣的信號,如因常受到隨機干擾感測器不穩定而引起嚴重失真時,可以採用此方法。

方法是:根據生產經驗確定兩交采樣允許的最大偏差△×,若先後兩次采樣的信號相減數值大於△×,表明輸入的是干擾信號,應該去掉;用上次采樣值作為本次采樣值,若小於、等於△×表明沒有受到干,本次采樣值效。該方法適用於慢變化的物理參數的采樣,如溫度、物理位置等測量系統。

⑧ 求:一個關於FIR帶通濾波器的C語言設計程序 代碼

這兄弟可以用matlab做嗎?如果可以我給你寫代碼,很榮幸為您解答難題,竭誠為您服務,祝您開心,生活加油~~~

⑨ 二階濾波器用C語言怎麼寫

這個可比你想像的復雜多了,s是個復變數,1/(s+1)極點在-1,要想用C語言寫,必須理解清楚下面幾個問題:
1、輸入必須是個有限序列,比如(x+yi),x和y分別是兩個長度為N的數組
2、要過濾的頻率,必須是個整型值,或者是個整型區間
3、輸出結果同樣是兩個長度為N的數組(p+qi)
4、整個程序需要使用最基本的復數運算,這一點C語言本身不提供,必須手工寫復函數運算庫
5、實現的時候具體演算法還需要編,這里才是你問題的核心。

我可以送你一段FFT的程序,自己琢磨吧,和MATLAB的概念差別很大:
#include <assert.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include "complex.h"

extern "C" {

// Discrete Fourier Transform (Basic Version, Without Any Enhancement)
// return - Without Special Meaning, constantly, zero
int DFT (long count, CComplex * input, CComplex * output)
{
assert(count);
assert(input);
assert(output);

CComplex F, X, T, W; int n, i;

long N = abs(count); long Inversing = count < 0? 1: -1;

for(n = 0; n < N ; n++){ // compute from line 0 to N-1

F = CComplex(0.0f, 0.0f); // clear a line

for(i = 0; i < N; i++) {

T = input[i];

W = HarmonicPI2(Inversing * n * i, N);

X = T * W;

F += X; // fininshing a line

}//next i

// save data to outpus
memcpy(output + n, &F, sizeof(F));

}//next n

return 0;
}//end DFT

int fft (long count, CComplex * input, CComplex * output)
{
assert(count);
assert(input);
assert(output);

int N = abs(count); long Inversing = count < 0? -1: 1;

if (N % 2 || N < 5) return DFT(count, input, output);

long N2 = N / 2;

CComplex * iEven = new CComplex[N2]; memset(iEven, 0, sizeof(CComplex) * N2);
CComplex * oEven = new CComplex[N2]; memset(oEven, 0, sizeof(CComplex) * N2);
CComplex * iOdd = new CComplex[N2]; memset(iOdd , 0, sizeof(CComplex) * N2);
CComplex * oOdd = new CComplex[N2]; memset(oOdd , 0, sizeof(CComplex) * N2);

int i = 0; CComplex W;
for(i = 0; i < N2; i++) {
iEven[i] = input[i * 2];
iOdd [i] = input[i * 2 + 1];
}//next i

fft(N2 * Inversing, iEven, oEven);
fft(N2 * Inversing, iOdd, oOdd );

for(i = 0; i < N2; i++) {
W = HarmonicPI2(Inversing * (- i), N);
output[i] = oEven[i] + W * oOdd[i];
output[i + N2] = oEven[i] - W * oOdd[i];
}//next i
return 0;
}//end FFT

void __stdcall FFT(
long N, // Serial Length, N > 0 for DFT, N < 0 for iDFT - inversed Discrete Fourier Transform
double * inputReal, double * inputImaginary, // inputs
double * AmplitudeFrequences, double * PhaseFrequences) // outputs
{
if (N == 0) return;
if (!inputReal && !inputImaginary) return;
short n = abs(N);
CComplex * input = new CComplex[n]; memset(input, 0, sizeof(CComplex) * n);
CComplex * output= new CComplex[n]; memset(output,0, sizeof(CComplex) * n);
double rl = 0.0f, im = 0.0f; int i = 0;
for (i = 0; i < n; i++) {
rl = 0.0f; im = 0.0f;
if (inputReal) rl = inputReal[i];
if (inputImaginary) im = inputImaginary[i];
input[i] = CComplex(rl, im);
}//next i
int f = fft(N, input, output);

double factor = n;
//factor = sqrt(factor);

if (N > 0)
factor = 1.0f;
else
factor = 1.0f / factor;
//end if

for (i = 0; i < n; i++) {
if (AmplitudeFrequences) AmplitudeFrequences[i] = output[i].getReal() * factor;
if (PhaseFrequences) PhaseFrequences[i] = output[i].getImaginary() * factor;
}//next i
delete [] output;
delete [] input;
return ;
}//end FFT

int __cdecl main(int argc, char * argv[])
{
fprintf(stderr, "%s usage:\n", argv[0]);
fprintf(stderr, "Public Declare Sub FFT Lib \"wfft.exe\" \
(ByVal N As Long, ByRef inputReal As Double, ByRef inputImaginary As Double, \
ByRef freqAmplitude As Double, ByRef freqPhase As Double)");
return 0;
}//end main

};//end extern "C"

熱點內容
sql倒序查詢 發布:2025-02-04 06:49:18 瀏覽:192
r7000p2021買哪個配置 發布:2025-02-04 06:40:17 瀏覽:965
如何消除微信小程序緩存 發布:2025-02-04 06:34:24 瀏覽:633
python27mysqldb 發布:2025-02-04 06:28:44 瀏覽:768
svn文件夾許可權 發布:2025-02-04 06:23:47 瀏覽:902
師編程 發布:2025-02-04 06:22:51 瀏覽:170
加密類型wpa 發布:2025-02-04 06:21:27 瀏覽:178
互聯網與雲伺服器 發布:2025-02-04 06:15:56 瀏覽:254
硬碟挖礦源碼 發布:2025-02-04 06:15:45 瀏覽:76
寶馬3系哪個配置合適 發布:2025-02-04 06:03:10 瀏覽:328