python中怎么生成基于窗函数的fir滤波器

Python017

python中怎么生成基于窗函数的fir滤波器,第1张

SciPy提供了firwin用窗函数设计低通滤波器,firwin的调用形式如下:

firwin(N, cutoff, width=None, window='hamming')

其中N为滤波器的长度;cutoff为以正规化的频率;window为所使用的窗函数。

结果:

过程如下:

import numpy as np

a=np.zeros([512,512])

print(a)

print(a.shape)

望采纳

#include<stdio.h>

#include <stdlib.h>

#include <limits.h>

#include<malloc.h>

#define maxsize 6 //每个波形数据最大采集个数  默认6

typedef struct array1

{

    int *data

    struct array1 *next

}ARR1

ARR1 *addNewArr(ARR1 *arrHead,ARR1 *arrTail)//插入一组波形数据节点 返回尾节点

int findMaxF(ARR1 *arrHead)//查找最大峰值

int removeMinF(ARR1 *arrHead)//移除最小峰值数据组   返回最小峰值

void printfArr(ARR1 *arrHead)//打印数据链表

int main()

{

    ARR1 *arrHead=(ARR1 *)malloc(sizeof(ARR1))

    arrHead->next=NULL

    ARR1 *arrTail=NULL

    arrTail=addNewArr(arrHead,arrTail)//想插入几组,就调用几次  我就测试6组

    arrTail=addNewArr(arrHead,arrTail)

    arrTail=addNewArr(arrHead,arrTail)

    arrTail=addNewArr(arrHead,arrTail)

    arrTail=addNewArr(arrHead,arrTail)

    arrTail=addNewArr(arrHead,arrTail)

    printf("采集的原数据组为:\n")

    printfArr(arrHead)

    printf("最大峰值:%d,最小峰值值:%d\n",findMaxF(arrHead),removeMinF(arrHead))

    printf("删除最小峰值数据组后的数据为:\n")

    printfArr(arrHead)

    return 0

}

void printfArr(ARR1 *arrHead)//打印数据链表

{

    while(arrHead->next!=NULL)

    {

        printf("%d,%d,%d,%d,%d,%d\n",arrHead->next->data[0],arrHead->next->data[1],arrHead->next->data[2],arrHead->next->data[3],arrHead->next->data[4],arrHead->next->data[5])

        arrHead=arrHead->next

    }

}

ARR1 *addNewArr(ARR1 *arrHead,ARR1 *arrTail)//插入一组波形数据   返回尾节点

{

    int *data=(int *)malloc(sizeof(int)*maxsize),i

    printf("采集一组波形数据(最大采集个数%d):",maxsize)

    for(i=0i<maxsizei++)

        scanf("%d",&data[i])

    ARR1 *arrNew=(ARR1 *)malloc(sizeof(ARR1))

    arrNew->data=data

    arrNew->next=NULL

    if(arrHead->next==NULL)//插入第一组数组 作为首节点

        arrHead->next=arrNew

    else

        arrTail->next=arrNew

    arrTail=arrNew

    return arrTail

}

int findMaxF(ARR1 *arrHead)//查找最大峰值

{

    int i,maxNum=0,maxf=0

    while(arrHead->next!=NULL)

    {

        maxNum=0

        for(i=0i<maxsizei++)//获取每组数据的峰值

        {

            if(arrHead->next->data[i]>maxNum)

                maxNum=arrHead->next->data[i]

        }

        if(maxNum>maxf)//获取最大峰值

            maxf=maxNum

        arrHead=arrHead->next

    }

    return maxf

}

int removeMinF(ARR1 *arrHead)//移除最小峰值数据组   返回最小峰值

{

    int i,maxNum=0,minf=INT_MAX

    ARR1 *minDataSave=NULL,*arrHeadSave=arrHead

    while(arrHead->next!=NULL)

    {

        maxNum=0

        for(i=0i<maxsizei++)//获取每组数据的峰值

        {

            if(arrHead->next->data[i]>maxNum)

                maxNum=arrHead->next->data[i]

        }

        if(maxNum<minf)//获取最小峰值

        {

            minDataSave=arrHead->next

            minf=maxNum

        }

        arrHead=arrHead->next

    }

    arrHead=arrHeadSave

    //移除最小峰值数据组

    while(arrHead->next!=NULL)

    {

        if(arrHead->next==minDataSave)//删除节点重组链表

        {

            arrHead->next=minDataSave->next

            minDataSave->next=NULL

            free(minDataSave->data)//释放节点内存

            free(minDataSave)

            break

        }

        arrHead=arrHead->next

    }

    return minf

}