Matlab DSPIC上IIR滤波器的实现

Matlab DSPIC上IIR滤波器的实现,matlab,filtering,signal-processing,mplab,dspic,Matlab,Filtering,Signal Processing,Mplab,Dspic,我正在使用dsplib库dsPIC30F DSP库在dsPIC上实现数字滤波器 我用MATLAB设计了我的滤波器 clc; clear all; filter=designfilt('lowpassiir', 'FilterOrder', 4, 'PassbandFrequency', 3900, 'PassbandRipple', 1, 'SampleRate', 16000); hd = dfilt.df2tsos(filter.Coefficients); coef = fi(hd.so

我正在使用dsplib库dsPIC30F DSP库在dsPIC上实现数字滤波器

我用MATLAB设计了我的滤波器

clc; clear all;
filter=designfilt('lowpassiir', 'FilterOrder', 4, 'PassbandFrequency', 3900, 'PassbandRipple', 1, 'SampleRate', 16000);
hd = dfilt.df2tsos(filter.Coefficients);

coef = fi(hd.sosMatrix)

fvtool(coef)

coef = 

    0.3949    0.7897    0.3949    1.0000   -0.0807    0.7538
    0.1279    0.2559    0.1279    1.0000   -0.7783    0.3203
从matlab dofumentation:

 SOS = [ b01 b11 b21  1 a11 a21
         b02 b12 b22  1 a12 a22
         ...
         b0L b1L b2L  1 a1L a2L ]
根据数据表:在有序集合{b0[s],b1[s],a1[s],b2[s],a2[s]},0中有5个系数/秒阶(双二次)部分≤ s 我已经按照建议实施了我的系数,见下文

const float filter[10] = {0.3948975, 0.7897339, -0.0807495, 
0.3948975, 0.7538452, 0.1279297, 0.2558594, -0.77825928, 0.1279297,  
0.3203125};

const float filter_float[10] = {0.3948975, 0.7897339, -0.0807495, 
0.3948975, 0.7538452, 0.1279297, 0.2558594, -0.77825928, 0.1279297,  
0.3203125};

fractional filter[10]; // 5

for(i=0; i<10; i++){
    filter[i]=Float2Fract(filter_float[i]);
}

fractional dbIr_1[2], dbIr_2[2];    // Delay-Line-Buffer I-Filte
(Segment 1 and 2)  
IIRTransposedStruct Filter; 
Filter.coeffsBase=filter;       // Sets the filtercoefficients
Filter.numSectionsLess1=1;      // Define number of sections
Filter.finalShift=0;            // Define shift of output (-1 
Filter.delayBase1=dbIr_1;       // Sets the delayline buffer
Filter.delayBase2=dbIr_2;       // --
Filter.coeffsPage=COEFFS_IN_DATA;   // Coefficient are stored in data 
IIRTransposedInit(&Filter);     // Initialize the filter

int blockLength=16;
int iyr[blockLength] = {0};

main{
    IIRTransposed (blockLength, iyl, xl, &Filter);
}
const float filter[10]={0.3948975,0.7897339,-0.0807495,
0.3948975, 0.7538452, 0.1279297, 0.2558594, -0.77825928, 0.1279297,  
0.3203125};
常量浮点过滤器_float[10]={0.3948975,0.7897339,-0.0807495,
0.3948975, 0.7538452, 0.1279297, 0.2558594, -0.77825928, 0.1279297,  
0.3203125};
分数滤波器[10];//5.

对于(i=0;iI)已使用此过滤器系数const float filteru float[10]={0.178447,-0.422417,0.844834,0.250000,-0.356893,0.178970,-0.495371,0.495371,0.500000,-0.178970}对同一代码进行了尝试我这里有声音。信号采样频率为16kHz。我今天尝试了更多,似乎存在稳定性问题。我尝试了不同的滤波器配置,要么声音在1秒后消失,要么是非常机械的,比如溢出之类的。