题目描述

离散时间信号处理时,通常会把信号进行分帧截断再进行分析,为了减少在信号截断处频率泄露的影响会对分帧截断后的信号乘上一个窗函数,即“加窗”。常用的窗函数包括矩阵窗、汉宁窗、汉明窗等,其中汉宁窗(Hanning Window)的公式是:HannWin(n) = 0.5*(1-cos(2*PI*n/N)),N为窗长度,0≤n<N, PI=3.1415927; 对任意长度为N的双字节整数序列x(n),加窗之后y(n) = x(n)*HanWin(n)

输入描述

第一行输入窗长度N:16≤N<512
第二行输入N个双字节整数x(n),以空格间隔开

输出描述

N个加窗之后的数据y(n),四舍五入的方式保留整数部分

示例1

输入输出示例仅供调试,后台判断数据一般不包括示例

输入

32
1953 2347 16 -1042 -1546 -933 -1946 -2722 -427 2111 3260 -1265 -8196 -8766 -2922 4135 6564 4644 2726 2789 4939 4451 149 -2320 -1348 2211 3370 900 -886 -1998 -643 172

输出

0 23 1 -88 -226 -207 -601 -1095 -214 1261 2254 -984 -6996 -8027 -2811 4095 6564 4599 2622 2554 4216 3462 103 -1386 -674 890 1040 200 -130 -168 -24 2

备注

计算结果为小数时,采用四舍五入,如果不记得四舍五入函数,还可以通过取整来实现。

题目分析

直接通过公式:y(n) = x(n)HanWin(n)计算即可【注:HannWin(n) = 0.5(1-cos(2PIn/N)),N为窗长度,0≤n<N, PI=3.1415927】

Python代码实现

import math
N = int(input())
ls = list(map(int,input().strip().split()))
y=[]
Pi = 3.1415927
for i in range(N):
y.append(round(ls[i]*0.5*(1-math.cos(2*Pi*i/N))))
for i in range(N-1):
print(y[i],end=' ')
print(y[-1])

作者:​​楚千羽​