Вы находитесь на странице: 1из 3

{

#include<stdio.h> real_part=0.0; imag_part=0.0


#include<math.h> ;
#define pi 3.1415926535 for(n=-M; n<=M; n++)
int N=31, M, n, k; {
double fs=20000, fc1=2000, fc2=4000, wc1, wc2, real_part = (y[n+M]*cos(2*pi*n*(k)/N)+real_part);
h[31], y[31], w[31]; imag_part = (y[n+M]*
double real_part=0.0, imag_part= 0.0, amp[31], (-1)*cos(2*pi*n*(k)/N)+imag_part);
phase[31]; }
amp[k+M]= sqrt(pow(real_part,2) +
/*Functions to calculate fir coefficients*/ (pow(imag_part,2));
phase[k+M] = atan(imag_part / real_part);
void calculate_fir_coefficients(void); }
{ }
for(n=-M; n<=M, n++)
{ /*functions to print fir coefficients*/
wc1 = 2*pi*f1/fs; void print_fir_coefficient(void);
wc2 = 2*pi*f2/fs; {
if(n==0) for(n=-M; n<=M; n++)
h[n+M]= (wc2-wc1)/pi; {
else printf("h[%d] = %lf\n",n,h[n+M]);
h[n+M] = (sin(wc2*n) -sin(wc1*n)) / (n*pi); }
} /*functions to print hamming window coefficients*/
} void print_window_coefficient(void);
/*functions to calculate hamming window coefficients*/ {
for(n=-M; n<=M; n++)
void calculate_window_coefficients(void); printf("w[%d] = %lf\n",n,w[n+M]);
{
for(n=-M; n<=M, n++) }
// Hamming Window /*functions to print windowed filter coefficients*/
w[n+M]=0.54 + (0.46 * cos( (2*pi*n )/ (2* void print_windowed_filter_coefficient(void);
(M+1)))); {
} for(n=-M; n<=M; n++)
/*functions to calculate windowed filter coefficient*/ printf("y[%d] = %lf\n",n,y[n+M]);
void calculate_windowed_filter_coefficients(void); }
{
for(n=-M; n<=M, n++) void calculate_fir_coefficients(void)
y[n+M] = h[n+M] * w[n+M]; void calculate_window_coefficients(void)
} void calculate_windowed_filter_coefficients(void)
void calculate_dft_coefficients(void)
/*functions to calculate dft amplitude &phase coefficients*/ void print_fir_coefficient(void)
void print_window_coefficient(void)
void calculate_dft_coefficients(void); void print_windowed_filter_coefficient(void)

{
for(k=-M;k<=M;k++)
void main() print_fir_coefficient();
{ print_window_coefficient();
M=(N-1)/2; print_windowed_filter_coefficient();
calculate_fir_coefficients(); getch();
calculate_window_coefficients(); }
calculate_windowed_filter_coefficients();
calculate_dft_coefficients();

RESULT:
h[-8]= 0.014454 w[-8]= 0.540000 y[-8] = 0.007805
h[-7]= 0.069976 w[-7]= 0.629742 y[-7] = 0.044066
h[-6]= 0.081638 w[-6]= 0.716034 y[-6] = 0.058456
h[-5]= -0.000000 w[-5]= 0.7995562 y[-5] = -0.000000
h[-4]= -0.122457 w[-4]= 0.865269 y[-4] = -0.105958
h[-3]= -0.163276 w[-3]= 0.922476 y[-3] = -0.150618
h[-2]= -0.057816 w[-2]= 0.964985 y[-2] = -0.055792
h[-1]= 0.115633 w[-1]= 0.991161 y[-1] = 0.114611
h[0]= 0.200000 w[0]= 1.000000 y[0] = 0.200000
h[1]= 0.115633 w[1]= 0.991161 y[1] = 0.114611
h[2]= -0.057516 w[2]= 0.964985 y[2] = -0.55792
h[3]= -0.163276 w[3]= 0.922476 y[3] = -0.150618
h[4]= -0.122457 w[4]= 0.865269 y[4] = -0.105958
h[5]= -0.000000 w[5]= 0.795562 y[5] = -0.000000
h[6]= 0.081638 w[6]= 0.716034 y[6] = 0.058456
h[7]= 0.069976 w[7]= 0.629742 y[7] = 0.044066
h[8]= 0.014454 w[8]= 0.540000 y[8] = 0.007805
h[9]= -0.012848 w[9]= 0.450258 y[9] = -0.00585
h[10]= -0.000000 w[10]= 0.363966 y[10] = -0.000000
h[11]= 0.010512 w[11]= 0.284438 y[11] = 0.002990
h[12]= -0.009636 w[12]= 0.214731 y[12] = -0.002069
h[13]= -0.037679 w[13]= 0.157524 y[13] = -0.005935
h[14]= -0.034988 w[14]= 0.115015 y[14] = -0.004024
h[15]= -0.000000 w[15]= 0.088839 y[15] = -0.000000
MATLAB IMPLEMENTATION:
1) Using fda tool

2) By designing filter using MATLAB code

bpFilt = designfilt('bandpassfir', 'FilterOrder', 5060, 'CutoffFrequency1', 2000,


'CutoffFrequency2', 4000, 'SampleRate', 20000 );
fvtool(bpFilt)
dataIn = randn(1000,1);
dataOut = filter(bpFilt, dataIn);
b= bpFilt.Coefficients

Вам также может понравиться