//高通
#include <stdio.h>
#include <math.h>
#include <string.h>
#define fs 22000 //定义与课本相同的采样频率22000Hz
#define pi 4.0*atan(1.0)
int high_fliter(double h1[],double w[],double h[],double fH,double fL,int m); //h[n]就是滤波器
int windows_hanning(double fh,double fl,double *w); //输入通带与阻带截止频率 输出w
int windows_haming(double fh,double fl,double *w);
double div(double up,double down);
// 说明,在高通滤波器中呢,大部分与低通滤波器相同,稍微有修改,一下的是,high_fliter 与 low_fliter 略有所不同,
// 首先,利用高通的 通带截止频率与阻带截止频率 ,计算出相应阻带的频率, 在 在最后 多乘了一个 cos(n*omega0)罢了;
int main(void)
{
int i,N;
double w[200]={0},h[200]={0},h1[200]={0},z[200]={0};
printf("使用汉宁窗的滤波器序列h[n]为:\n");
N=high_fliter(h1,w,h,8000,6000,0); // 调用滤波函数,最后一个参数为 0 时,使用 汉宁窗
for(i=0;i<N;i++)
{
printf("%.4f ",h[i]); // 打印滤波器序列
}
printf("\n\n使用哈明窗的滤波器序列h[n]为:\n");
memset(w,0,200*sizeof(double)); // 使用过的序列清零
memset(h1,0,200*sizeof(double));
N=high_fliter(h1,w,z,8000,6000,1); //
for(i=0;i<N;i++)
{
printf("%.4f ",z[i]);
}
}
int windows_hanning(double fh,double fl,double *w)
{
int TW,N;
double x;
int i,j;
TW=fl-fh;
x=3.32*fs/TW;
N=integer(x);
for(i=0;i<N;i++)
{
w[i]=0.5+0.5*cos(2*pi*(i-(N-1)/2)/(N-1));
}
return N;
}
int windows_haming(double fh,do