當前位置:首頁 » 編程語言 » iir濾波器c語言

iir濾波器c語言

發布時間: 2022-05-19 12:13:25

❶ 什麼是 IIR數字濾波器

IIR是」Infinite Impulse Response「的意思,所以IIR數字濾波器,又名「無限脈沖響應數字濾波器」,或「遞歸濾波器」。

❷ 學長 我想設計一個基於ccs環境下的IIR濾波器 想讓你給設計一個程序 c語言的 自己設計的運行時出錯 謝謝啦

低通、高通、帶通、帶阻、全通,你想要什麼類型的,設計參數都沒有!

❸ 二階濾波器用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"

❹ FIR、IIR濾波器程序

fp=500; fs=750; % 設置濾波器的通帶和阻帶頻率
Fs=8000; Fs2=Fs/2; % 采樣頻率
Wp=fp/Fs2; Ws=fs/Fs2; % 把通帶和阻帶頻率歸一化
Rp=3; Rs=50; % 通帶波紋和阻帶衰減
[n,Wn]=cheb2ord(Wp,Ws,Rp,Rs); % 求取濾波器階數
[b,a]=cheby2(n,Rs,Wn); % 設計契比雪夫II型低通濾波器系數
[db,mag,pha,grd,w]=freqz_m(b,a); % 求濾波器的頻率響應曲線

這是iir低通,,高通,帶通類似

❺ 二階通用濾波器用C語言怎麼編程

shorth[],shorty[]){inti,j,sum;for(j=0;j>15;}}2voidfir(shortx[],shorth[],shorty[]){inti,j,sum0,sum1;shortx0,x1,h0,h1;for(j=0;j>15;y[j+1]=sum1>>15;}}3voidfir(shortx[],shorth[],shorty[]){inti,j,sum0,sum1;shortx0,x1,x2,x3,x4,x5,x6,x7,h0,h1,h2,h3,h4,h5,h6,h7;for(j=0;j>15;y[j+1]=sum1>>15;}}

❻ IIR數字濾波器與FIR數字濾波器的定義

無限脈沖響應濾波器是數位濾波器的一種,簡稱IIR數位濾波器(infinite impulse response filter)。由於無限脈沖響應濾波器中存在反饋迴路,因此對於脈沖輸入信號的響應是無限延續的。

有限脈沖響應濾波器是數字濾波器的一種,簡稱FIR數字濾波器(finite impulse response filter)。這類濾波器對於脈沖輸入信號的響應最終趨向於0,因此是有限的,而得名。它是相對於無限脈沖響應濾波器(IIR)而言。

有限脈沖響應濾波器(FIR filter)的優點:
1. 脈沖響應(impulse response)為有限長:造成當輸入數位訊號為有限長的時候,輸出數位訊號也為有限長。
2. 比無限脈沖響應濾波器(IIR filter)較容易最佳化(optimize)。
3. 線性相位(linear phase):造成h(n)\,是偶對稱(even)或奇對稱(odd)且有限長。
4. 一定是穩定的(stable):因為Z轉換(Z transform)後所有的極點(pole)都在單位圓內。

有限脈沖響應濾波器(FIR filter)的缺點:
設計方式較無限脈沖響應濾波器(IIR filter)不容易。

無限脈沖響應濾波器(IIR filter)的優點:
較容易設計以及實現。

無限脈沖響應濾波器(IIR filter)的缺點:
1. 脈沖響應(impulse response)為無限長:造成當輸入數位訊號為有限長的時候,輸出數位訊號會變成無限長。
2. 比有限脈沖響應濾波器(FIR filter)較不易最佳化(optimize)。
3. 不一定是穩定的(stable):因為Z轉換(Z transform)後所有的極點(pole)不一定都在單位圓內。

reference:w開頭的被屏蔽的某網站

❼ 求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語言寫出FIR和IIR數字濾波器(最好有一個例子)。謝謝各位大俠了

以我的理解,你要使用反變換得到濾波器的脈沖響應函數,這樣才好運算

❾ IIR濾波器有什麼特點

iir濾波器有以下幾個特點:

【1】 iir數字濾波器的系統函數可以寫成封閉函數的形式。

【2】 iir數字濾波器採用遞歸型結構,即結構上帶有反饋環路。iir濾波器運算結構通常由延時、乘以系數和相加等基本運算組成,可以組合成直接型、正准型、級聯型、並聯型四種結構形式,都具有反饋迴路。由於運算中的舍入處理,使誤差不斷累積,有時會產生微弱的寄生振盪。

【3 】iir數字濾波器在計上可以藉助成熟的模擬濾波器的成果,如巴特沃斯、契比雪夫和橢圓濾波器等,有現成的設計數據或圖表可查,其設計工作量比較小,對計算工具的要求不高。在設計一個iir數字濾波器時,我們根據指標先寫出模擬濾波器的公式,然後通過一定的變換,將模擬濾波器的公式轉換成數字濾波器的公式。

【4 】iir數字濾波器的相位特性不好控制,對相位要求較高時,需加相位校準網路。

你好,很高興為你解答,希望對你有所幫助,若滿意請及時採納。
這真的很難一下子說明白最好上硬之城看看吧。

熱點內容
sql2008伺服器 發布:2025-05-15 11:03:27 瀏覽:305
我的世界pe伺服器創造 發布:2025-05-15 10:51:17 瀏覽:608
移動端打吃雞要什麼配置 發布:2025-05-15 10:48:16 瀏覽:756
我的世界哪五個伺服器被炸了 發布:2025-05-15 10:36:16 瀏覽:994
ehcache存儲對象 發布:2025-05-15 10:35:31 瀏覽:528
搭建虛擬電腦的伺服器 發布:2025-05-15 10:29:31 瀏覽:270
湖人雙核配置哪個最好 發布:2025-05-15 10:09:48 瀏覽:980
手機熱點密碼怎麼查看 發布:2025-05-15 09:54:47 瀏覽:109
生意發力雲存儲 發布:2025-05-15 09:54:45 瀏覽:617
編寫一個shell腳本添加用戶 發布:2025-05-15 09:54:43 瀏覽:506