1. 如何用c語言實現低通濾波器
floatmiddle_filter(floatmiddle_value[],intcount)
{
floatsample_value,data;
inti,j;
for(i=1;ifor(j=count-1;j>=i,--j){
if(middle_value[j-1]=middle_value[j]{
data=middle_value[j-1];
middle_value[j-1]=middle_value[j]
middle_value[j]=data;
}
}
sample_value=middle_value(count-1)/2];
return(sample_value);
}
2. C51能不能實現卡爾曼濾波,如果可以能不能給我代碼
卡爾曼濾波只是一個演算法,而C51是基於標准C語言擴展而來的,你只要明白卡爾曼濾波的數學表達演算法,就能用C語言寫出來卡爾曼濾波的程序,所以,C語言完全可以寫出來卡爾曼濾波演算法,C51自然也就能.
但是,這里有個但是!!!
C51雖然是基於標准C語言擴展的,但是,C51是用在51內核單片機上的,而以51內核為內核組成的單片機,大都硬體架構簡單,內存容量小,沒有專用的硬體乘法器,而且是8位的,基於以上原因,在實際應用中,51單片機是無法完成卡爾曼濾波的.
1 是沒有專用硬體乘法/除法器
2 卡爾曼濾波是一種遞歸演算法,需要極大的內存支持,51一般只有幾K內存,不足以支持龐大的
卡爾曼濾波.演算法
所以,如果你一定要卡爾曼濾波演算法,換個強大的MCU吧
3. 求:一個關於FIR帶通濾波器的C語言設計程序 代碼
short h[], short y[])
{
int i, j, sum; for (j = 0; j < 100; j++) {
sum = 0;
for (i = 0; i < 32; i++)
sum += x[i+j] * h[i];
y[j] = sum >> 15;
}
}
2
void fir(short x[], short h[], short y[])
{
int i, j, sum0, sum1;
short x0,x1,h0,h1; for (j = 0; j < 100; j+=2) {
sum0 = 0;
sum1 = 0;
x0 = x[j];
for (i = 0; i < 32; i+=2){
x1 = x[j+i+1];
h0 = h[i];
sum0 += x0 * h0;
sum1 += x1 * h0;
x0 = x[j+i+2];
h1 = h[i+1];
sum0 += x1 * h1;
sum1 += x0 * h1;
}
y[j] = sum0 >> 15;
y[j+1] = sum1 >> 15;
}
}
3
void fir(short x[], short h[], short y[])
{
int i, j, sum0, sum1;
short x0,x1,x2,x3,x4,x5,x6,x7,h0,h1,h2,h3,h4,h5,h6,h7; for (j = 0; j < 100; j+=2) {
sum0 = 0;
sum1 = 0;
x0 = x[j];
for (i = 0; i < 32; i+=8){
x1 = x[j+i+1];
h0 = h[i];
sum0 += x0 * h0;
sum1 += x1 * h0;
x2 = x[j+i+2];
h1 = h[i+1];
sum0 += x1 * h1;
sum1 += x2 * h1;
x3 = x[j+i+3];
h2 = h[i+2];
sum0 += x2 * h2;
sum1 += x3 * h2;
x4 = x[j+i+4];
h3 = h[i+3];
sum0 += x3 * h3;
sum1 += x4 * h3;
x5 = x[j+i+5];
h4 = h[i+4];
sum0 += x4 * h4;
sum1 += x5 * h4;
x6 = x[j+i+6];
h5 = h[i+5];
sum0 += x5 * h5;
sum1 += x6 * h5;
x7 = x[j+i+7];
h6 = h[i+6];
sum0 += x6 * h6;
sum1 += x7 * h6;
x0 = x[j+i+8];
h7 = h[i+7];
sum0 += x7 * h7;
sum1 += x0 * h7;
}
y[j] = sum0 >> 15;
y[j+1] = sum1 >> 15;
}
}
4. 卡爾曼濾波 用C語言實現 急!!.......
#include "rinv.c"
缺少rinv.c文件
5. 如何用C語言來實現數字濾波器
用C語言實現,希望能給出個完整的已調試好程序,不甚感謝,給你20分問題補充:例子中9、2、14有誤,應該是11、2、14
太麻煩了
我只編了一
6. c語言中值濾波問題
1. 是規定做中值濾波的點不含邊緣的點(取決於中值濾波窗口大小)。 2,對圖像邊緣部分的信息進行鏡像處理。
7. 請教C語言卡爾曼濾波演算法
網上能找到一些程序。
例如,卡爾曼濾波簡介+ 演算法實現代碼 :
http://blog.21ic.com/user1/349/archives/2009/55947.html
較詳細地 提供了 C 和 C++ 程序。可以同他的方法比較一下,如果結果接近,
則你的演算法沒問題。
8. 二階濾波器用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"
9. C語言卡爾曼濾波演算法求教
Optimal_value = 23; //上次最優值,根據環境開始可以隨便設一個大概的數
{
for(i=0;i<10;i++)
這里多了一個花括弧也能運行?
10. 需要一些c語言寫得經典濾波,pid控制,模糊控制的演算法。
這個世界沒有免費的晚餐,還是多看資料,自己動手吧。 下面資料僅供參考
http://wenku..com/view/8466a429cfc789eb172dc86c.html
http://wenku..com/view/89b366e9e009581b6bd9ebf2.html
http://wenku..com/view/8e9d022f2af90242a895e593.html
http://wenku..com/view/55d3532f7375a417866f8fed.html
http://wenku..com/view/bb24150d76c66137ee0619dc.html
http://wenku..com/view/5b0fbce0524de518964b7ddd.html
http://wenku..com/view/90a2edf49e314332396893d3.html