1.概要:本文以 x(n)=sin(2*π*f1*n+π/3)+10*\sin(6*π*f2*n+π/4)+wgn(0,sigma)
为例进行其功率谱的估计及观察sigma参数对f1,f2估计的影响,影响情况以MSE为衡量标准
(注:f1规定为0.1,f2规定为0.3。n的取值为[1,256],wgn(0,sigma)是0均值,标准差为sigma的高斯分布的随机数)
2.随机信号功率谱的估计方法:对于平稳随机信号,其功率谱与其自相关函数为傅里叶变换对。对于本例而言,其均值E[x(n)]为0,自相关函数R(m)与时间起点无关,只与时间间隔m有关因而具有平稳性,可以直接运用维纳-欣钦定理。如果是不具有平稳性的话可以把其自相关函数取均值得到E[R]再运用维纳欣钦定理。
3.自相关的估计方法:通过上文内容可以知道,对于随机信号来说,其自相关函数是得到功率谱的重要途径。常用的自相关估计方法有两种:
-
(1)
这种估计方法的均值为:
方差为:
可以看到这种估计方法是一种无偏估计 -
(2.)
均值为:
当N趋近于无穷时是无偏估计。 -
两种估计的性能比较:
一般用第二种方法去估计自相关。
4.估计参数f1和f2的方法:本例是一个实函数,其功率谱是有偶对称形状的。故其谱上一定会出现一高一低两个峰,两个峰出现的位置理论来说是在DTFT频谱的0.2π和0.6π处。但计算机无法处理DTFT,只能处理DFT和FFT。DTF是对DTFT在[0,2π]内的等间隔采样,FFT则是DFT的快速运算版本。在DFT的频谱横坐标是采样点的序号,我们需要由这样一个序号去转换到频率。这里我使用的方法就是在一定的范围内把寻找两个最大峰的横坐标,以256点DFT为例,那么横坐标的值乘以1/256得到就是f1和f2的估计值。
5.参数估计好坏的衡量指标:MSE均方误差
6.程序实现:功率谱估计
#随机信号功率谱估计
import numpy as np
import matplotlib.pyplot as plt
from math import *
#n取值从1到256
def signal(n):
if(n<1 or n>256):
return 0
else:
return (sin(0.2*pi*n+pi/3)+10*sin(0.6*pi*n+pi/4)+np.random.normal(0,1,1)[0])
#生成WN项(旋转因子)
def wn_k(k,n,N):
return complex(cos(2*pi*n*k/N),sin(