用Python编程实现功率谱估计的平滑改进

用Python编程实现功率谱估计的平滑改进

周期图法求解信号的功率谱

周期图法求解信号功率谱的基本思想是:将随机信号x(n)的N点观测数据视为能量有限信号,对该信号求解傅里叶变换,求解变换结果幅值的平方,并且除以N。
这一部分的代码如下:

#sig为所给信号,N为信号的长度
Pper=np.zeros(N)
xfft=np.fft.fft(sig)
for i in np.arange(N):
    Pper[i]=np.abs(xfft[i])*np.abs(xfft[i])/N

试验时所用的信号为:

N=200
sig=np.random.randn(N,)

程序运行结果为:
用周期图法计算出的sig的功率谱

对周期图法计算出的功率谱进行平滑改进

在本实验中,利用了Welch法对周期图法进行了改进,其基本思想是:对原始信号x(n)进行分段,并且允许每一段的数据有部分交叠;此外Welch法还允许选择不同的窗函数来进行分段。本文利用了最简单的窗函数来进行分段。
在利用Welch法时,首先要计算信号的分段数目,计算信号分段数的程序为:

def segL(N,M, overlap):     #N:信号长度;M:分段长度;overlap:重叠长度;返回值为分段数目sn。
    d=M-overlap
    n=np.int32(np.ceil((N-overlap)/d))
    return n

在计算完分段数后,就可以构造一个由所有段信号组成的sn*M的xi矩阵,对该矩阵的每一行再进行加窗操作,窗函数的宽度为该矩阵的列数。
加窗函数的程序为:

for i in np.arange(sn):
    xi=xi_snM[i]                     #xi_snM为求出的sn*M的xi矩阵
    for j in np.arange(M):
        xid[j]=xi[j]*d[j]            #d为所用的窗函数
    xifft[i]=np.fft.fft(xid)         #计算加窗后信号的傅里叶变换

到此为止,计算出了snM矩阵的每一行信号的傅里叶变换,其中xifft也是一个snM的矩阵。利用Welch法计算功率谱时,需要对xifft进行变换,变换的目的主要是让xifft的各行之间按照分段时的原则进行每段功率谱的相加求和。本文用的M=50,overlap=25。计算出的每小段开始时的索引号为:
在这里插入图片描述
计算完成的xifft和加窗后并且进行索引号变换的的xifftwin的数据如下图所示:
xifft,维度为sn*M
xifftwin,维度为sn*Nex(Nex为各小段按照分段时的原则组合后的新信号长度,这样做的目的是为了后面计算平滑后的功率谱)
原始信号和各小段信号组合后的新信号的图形如下图所示:
因为此处的分段方式正好可以将原始信号分完,故Nex=N,即新信号和原始信号的长度相同
最后就算xifftwin每一列幅值的平方和,并且除以MUsn,就可以得到改进后的功率谱。其中U为归一化因子,计算的程序为:

UWinwd=0
for n in np.arange(Winwd):      #Winwd为窗函数的宽度,此处Winwd=M。
    UWinwd=d[n]*d[n]+UWinwd     #d为所选用的窗函数,本文选用的为矩形窗,计算出的归一化因子为1。  
U=UWinwd/Winwd    

计算改进后的功率谱的程序为:

Pperwin=np.zeros(Nex)
for j in  np.arange(Nex):
    for i in np.arange(sn):
        Pperwin[j]=np.abs(xifftwin[i,j])*np.abs(xifftwin[i,j])+Pperwin[j]
    Pperwin[j]=Pperwin[j]/(M*U*sn)

最终得到的结果为:
红色曲线代表周期图法计算出的功率谱,蓝色曲线代表改进后的功率谱曲线
如果本文有什么错误,还请读者谅解,并且能够帮忙指正,感激不尽!!!

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值