IIR、FIR问题
IIR FIR例程中不知道滤波器设计的通带最大衰减Rp和阻带最小衰减Rs,滤波器的系数是怎么计算出来的?调用MATLAB函数和FDATool都需要这些指标的另外对输入数据的处理的步进值为什么要那样取?有点云里雾里。FDATool 设计的滤波器的系数可以.c头文件的形式导出,这个要怎么用?求解。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#include "myapp.h"
#include "csedu.h"
#include "scancode.h"
#include <math.h>
#define FIRNUMBER 25
#define SIGNAL1F 1000
#define SIGNAL2F 4500
#define SAMPLEF10000
#define PI 3.1415926
float InputWave();
float FIR();
float fHn={ 0.0,0.0,0.001,-0.002,-0.002,0.01,-0.009,
-0.018,0.049,-0.02,0.11,0.28,0.64,0.28,
-0.11,-0.02,0.049,-0.018,-0.009,0.01,
-0.002,-0.002,0.001,0.0,0.0
};
float fXn={ 0.0 };
float fInput,fOutput;
float fSignal1,fSignal2;
float fStepSignal1,fStepSignal2;
float f2PI;
int i;
float fIn,fOut;
int nIn,nOut;
main()
{
nIn=0; nOut=0;
f2PI=2*PI;
fSignal1=0.0;
fSignal2=PI*0.1;
fStepSignal1=2*PI/30; // 频率改变的步进值
fStepSignal2=2*PI*1.4;
while ( 1 )
{
fInput=InputWave();
fIn=fInput;
nIn++; nIn%=256;
fOutput=FIR();
fOut=fOutput;
nOut++; /* break point */
if ( nOut>=256 )
{
nOut=0;
}
}
}
float InputWave()
{
for ( i=FIRNUMBER-1;i>0;i-- )
fXn=fXn;
fXn=sin((double)fSignal1)+cos((double)fSignal2)/6.0;
fSignal1+=fStepSignal1;
if ( fSignal1>=f2PI ) fSignal1-=f2PI;
fSignal2+=fStepSignal2;
if ( fSignal2>=f2PI ) fSignal2-=f2PI;
return(fXn);
}
float FIR()
{
float fSum;
fSum=0;
for ( i=0;i<FIRNUMBER;i++ )
{
fSum+=(fXn*fHn);
}
return(fSum);
} 导出的即为滤波系数,你建好差分方程就知道了 举例说明
1. 参数计算
窗函数选定:阻带衰减75dB,选择blackman窗;截止频率:2pi*(10+(22-10)/2)/50=0.64pi;
窗函数长度:blackman窗的过渡带宽为5.98,单位为2pi/N,而要设计的低通滤波器的过度带宽为2pi*12/50=0.48pi,两者相等,得N=24.9,取25。
2. 滤波器的脉冲响应
理想低通滤波器脉冲响应:
h1 = sin(nΩ1)/n/pi = sin(0.64pi*n)/n/pi
窗函数为:
w = 0.42 - 0.5cos(2pi*n/24) + 0.8cos(4pi*n/24)
则滤波器脉冲响应为:
h = h1*w |n|<=12
h = 0 |n|>12
3. 滤波器的差分方程
根据滤波器的脉冲响应计算出h,然后将脉冲响应值移位为因果序列,下面将利用matlab计算h的值,具体如下:
>> Window=blackman(25);
>> b=fir1(24,0.64,Window);
>> freqz(b,1)
>> b=roundn(b,-3) %任意位四舍五入
b =
Columns 1 through 8
0 0 0.0010 -0.0020 -0.0020 0.0100 -0.0090 -0.0180
Columns 9 through 16
0.0490 -0.0200 -0.1100 0.2800 0.6400 0.2800 -0.1100 -0.0200
Columns 17 through 24
0.0490 -0.0180 -0.0090 0.0100 -0.0020 -0.0020 0.0010 0
Column 25
0
最后得到滤波器的差分方程为:
y = 0.001x - 0.002x - 0.002x + 0.01x - 0.009x - 0.018
+ 0.049x -0.02x - 0.11x + 0.28x + 0.64x + 0.28x - 0.11 - 0.02x + 0.049x - 0.018x - 0.009x + 0.1x - 0.002x - 0.002x + 0.001x
uuflyaf 发表于 2014-5-23 20:23 static/image/common/back.gif
导出的即为滤波系数,你建好差分方程就知道了
这个我知道,我想问的是这个头文件是怎么运用的工程中的。不过大概知道了,在使用汇编编程是会用到,具体的还没有细细研究。 zhangmangui 发表于 2014-5-24 10:26 static/image/common/back.gif
举例说明
1. 参数计算
窗函数选定:阻带衰减75dB,选择blackman窗;截止频率:2pi*(10+(22-10)/2)/50=0.64p ...
我想问一下我所采集的数据怎样给滤波器呢???急急 伍紫琪 发表于 2014-8-15 00:45 static/image/common/back.gif
我想问一下我所采集的数据怎样给滤波器呢???急急
紫琪?啊 邓紫棋?:lol
fInput=InputWave();
fIn=fInput;
他分享的代码里 InputWave();是用来生成加了噪声的模拟波形用来滤波
你如果用ADC采集的数据 直接送入fIn数组 进行循环计算就可以啦 zhangmangui 发表于 2014-8-16 16:45 static/image/common/back.gif
紫琪?啊 邓紫棋?
fInput=InputWave();
fIn=fInput;
谢谢。已经整明白了!用的是TI公司给的库函数1 伍紫琪 发表于 2014-8-27 15:50 static/image/common/back.gif
谢谢。已经整明白了!用的是TI公司给的库函数1
好的算法这一块还望你多多指点 zhangmangui 发表于 2014-5-24 10:26 static/image/common/back.gif
举例说明
1. 参数计算
窗函数选定:阻带衰减75dB,选择blackman窗;截止频率:2pi*(10+(22-10)/2)/50=0.64p ...
窗函数为:
w = 0.42 - 0.5cos(2pi*n/24) + 0.8cos(4pi*n/24)
这个是错误的,我亲自笔算验证过,算出的系数根本不是程序里的系数,应该是0.42+0.5cos…+0.08cos… 846150568 发表于 2014-9-14 16:25 static/image/common/back.gif
窗函数为:
w = 0.42 - 0.5cos(2pi*n/24) + 0.8cos(4pi*n/24)
这个是错误的,我亲自笔算验证过,算出 ...
有可能出现错误 麻烦你将过程整理一下分享出来啊 zhangmangui 发表于 2014-9-14 22:17 static/image/common/back.gif
有可能出现错误 麻烦你将过程整理一下分享出来啊
加我企鹅846150568,过程有点长 846150568 发表于 2014-9-17 09:46 static/image/common/back.gif
加我企鹅846150568,过程有点长
呵呵 谢啦 为了让更多的网友看到 学习
建议你发帖吧 zhangmangui 发表于 2014-9-17 11:29 static/image/common/back.gif
呵呵 谢啦 为了让更多的网友看到 学习
建议你发帖吧
我过程是拍了照,打算上传图片的,可是附件大小限制了,暂时没有电脑所以手机写过程十分麻烦 846150568 发表于 2014-9-17 21:20 static/image/common/back.gif
我过程是拍了照,打算上传图片的,可是附件大小限制了,暂时没有电脑所以手机写过程十分麻烦 ...
好的谢谢啦 压缩了下图片看看清晰不 涨姿势了,我一般都是用matlab生成系数,窗口也就只选它提供的几个。
你这个是自己设计窗函数了吧。
顺便求个IIRC算法,自己弄了几个都失败了
页:
[1]