数字基带信号功率谱的MATLAB仿真程序代码

数字基带信号功率谱的MATLAB仿真程序代码
数字基带信号功率谱的MATLAB仿真程序代码

clear all;

close all;

Ts=1;

N_sample=8;

dt=Ts/N_sample;

N=1000;

t=0:dt:(N*N_sample-1)*dt;

T=t(end);

gt1=ones(1,N_sample);

gt2=ones(1,N_sample/2);

gt2=[gt2 zeros(1,N_sample/2)];

mt3=sinc((t-5)/Ts);

gt3=mt3(1:10*N_sample);

d=(sign(randn(1,N))+1)/2;

data=sigexpand(d,N_sample);

st1=conv(data,gt1);

st2=conv(data,gt2);

d=2*d-1;

data=sigexpand(d,N_sample);

st3=conv(data,gt3);

[f,st1f]=T2F(t,[st1(1:length(t))]);

[f,st2f]=T2F(t,[st2(1:length(t))]);

[f,st3f]=T2F(t,[st3(1:length(t))]);

figure(1)

subplot(321)

plot(t,[st1(1:length(t))]);grid;

axis([0 20 -1.5 1.5]);ylabel('单极性NRZ波形');

subplot(322)

plot(f,10*log10(abs(st1f).^2/T));grid;

axis([-5 5 -40 10]);ylabel('单极性NRZ攻略谱密度'); subplot(323)

plot(t,[st2(1:length(t))]);grid;

axis([0 20 -1.5 1.5]);ylabel('单极性RZ波形');

subplot(324)

plot(f,10*log10(abs(st2f).^2/T));

axis([-5 5 -40 10]);ylabel('单极性RZ功率谱密度(dB/Hz)');

subplot(325)

plot(t-5,[st3(1:length(t))]);grid;

axis([0 20 -2 2]);ylabel('双极性sinc波形');

subplot(326)

plot(f,10*log10(abs(st3f).^2/T));

grid;

axis([-5 5 -40 10]);ylabel('sinc 波形功率谱密度');xlabel('f*Ts');

matlab功率谱估计

功率谱估计及其MATLAB仿真 1经典功率谱估计 经典功率谱估计是将数据工作区外的未知数据假设为零,相当于数据加窗。经典功率谱估计方法分为:相关函数法(BT法)、周期图法以及两种改进的周期图估计法即平均周期图法和平滑平均周期图法,其中周期图法应用较多,具有代表性。 1.1相关函数法(BT法) 该方法先由序列x(n)估计出自相关函数R(n),然后对R(n)进行傅立叶变换,便得到x(n)的功率谱估计。当延迟与数据长度相比很小时,可以有良好的估计精度。 Matlab代码示例1(Btfangfa.M): Fs=500;%采样频率 n=0:1/Fs:1; xn=cos(2*pi*40*n)+3*cos(2*pi*90*n)+randn(size(n));%产生含有噪声的序列 nfft=512; cxn=xcorr(xn,'unbiased');%计算序列的自相关函数 CXk=fft(cxn,nfft); Pxx=abs(CXk); index=0:round(nfft/2-1); %Round towards nearest integer. k=index*Fs/nfft; plot_Pxx=10*log10(Pxx(index+1)); figure(1); plot(k,plot_Pxx); 结果如下: 1.2周期图法(periodogram) 周期图法是把随机序列x(n)的N个观测数据视为一能量有限的序列,直接计算x(n)的离散傅立叶变换得X(k),然后再取其幅值的平方,并除以N,作为序列x(n)真实功率谱的估计。Matlab代码示例2(PEriod.M): Fs=600; n=0:1/Fs:1;

matlab实现功率谱密度分析psd

matlab实现功率谱密度分析psd及详细解说 功率谱密度幅值的具体含义?? 求信号功率谱时候用下面的不同方法,功率谱密度的幅值大小相差很大! 我的问题是,计算具体信号时,到底应该以什么准则决定该选用什么方法啊? 功率谱密度的幅植的具体意义是什么??下面是一些不同方法计算同一信号的matlab 程序!欢迎大家给点建议! 直接法: 直接法又称周期图法,它是把随机序列x(n)的N个观测数据视为一能量有限的序列,直接计算x(n)的离散傅立叶变换,得X(k),然后再取其幅值的平方,并除以N,作为序列x(n)真实功率谱的估计。 Matlab代码示例: clear; Fs=1000; %采样频率 n=0:1/Fs:1; %产生含有噪声的序列 xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n)); window=boxcar(length(xn)); %矩形窗 nfft=1024; [Pxx,f]=periodogram(xn,window,nfft,Fs); %直接法 plot(f,10*log10(Pxx)); 间接法: 间接法先由序列x(n)估计出自相关函数R(n),然后对R(n)进行傅立叶变换,便得到x(n)的功率谱估计。 Matlab代码示例: clear; Fs=1000; %采样频率 n=0:1/Fs:1; %产生含有噪声的序列 xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n)); nfft=1024; cxn=xcorr(xn,'unbiased'); %计算序列的自相关函数 CXk=fft(cxn,nfft); Pxx=abs(CXk);

(完整版)功率谱估计性能分析及Matlab仿真

功率谱估计性能分析及Matlab 仿真 1 引言 随机信号在时域上是无限长的,在测量样本上也是无穷多的,因此随机信号的能量是无限的,应该用功率信号来描述。然而,功率信号不满足傅里叶变换的狄里克雷绝对可积的条件,因此严格意义上随机信号的傅里叶变换是不存在的。因此,要实现随机信号的频域分析,不能简单从频谱的概念出发进行研究,而是功率谱[1]。 信号的功率谱密度描述随机信号的功率在频域随频率的分布。利用给定的 N 个样本数据估计一个平稳随机信号的功率谱密度叫做谱估计。谱估计方法分为两大类:经典谱估计和现代谱估计。经典功率谱估计如周期图法、自相关法等,其主要缺陷是描述功率谱波动的数字特征方差性能较差,频率分辨率低。方差性能差的原因是无法获得按功率谱密度定义中求均值和求极限的运算[2]。分辨率低的原因是在周期图法中,假定延迟窗以外的自相关函数全为0。这是不符合实际情况的,因而产生了较差的频率分辨率。而现代谱估计的目标都是旨在改善谱估计的分辨率,如自相关法和Burg 法等。 2 经典功率谱估计 经典功率谱估计是截取较长的数据链中的一段作为工作区,而工作区之外的数据假设为0,这样就相当将数据加一窗函数,根据截取的N 个样本数据估计出其功率谱[1]。 周期图法( Periodogram ) Schuster 首先提出周期图法。周期图法是根据各态历经的随机过程功率谱的定义进行的谱估计。 取平稳随机信号()x n 的有限个观察值(0),(1),...,(1)x x x n -,求出其傅里叶变换 1 ()()N j j n N n X e x n e ω ω---==∑ 然后进行谱估计

功率谱和功率谱密度的区别

谱让人联想到的Fourier变换,是一个时间平均(time average)概念,对能量就是能量谱,对功率就是功率谱。 功率谱的概念是针对功率有限信号的,所表现的是单位频带内信号功率随频率的变化情况。保留了频谱的幅度信息,但是丢掉了相位信息,所以频谱不同的信号其功率谱是可能相同的。 有两点需要注意: 1. 功率谱是随机过程的统计平均概念,平稳随机过程的功率谱是一个确定函数;而频谱是随机过程样本的Fourier变换,对于一个随机过程而言,频谱也是一个“随机过程”。(随机的频域序列) 2. 功率概念和幅度概念的差别。此外,只能对宽平稳的各态历经的二阶矩过程谈功率谱,其存在性取决于二阶矩是否存在并且二阶矩的Fourier变换收敛;而频谱的存在性仅仅取决于该随机过程的该样本的Fourier变换是否收敛。 频谱分析: 对动态信号在频率域内进行分析,分析的结果是以频率为坐标的各种物理量的谱线和曲线,可得到各种幅值以频率为变量的频谱函数F(ω)。频谱分析中可求得幅值谱、相位谱、功率谱和各种谱密度等等。频谱分析过程较为复杂,它是以傅里叶级数和傅里叶积分为基础的。 功率谱密度: 功率谱密度(PSD),它定义了信号或者时间序列的功率如何随频率分布。这里功率可能是实际物理上的功率,或者更经常便于表示抽象的信号被定义为信号数值的平方,也就是当信号的负载为1欧姆(ohm)时的实际功率。

由于平均值不为零的信号不是平方可积的,所以在这种情况下就没有傅里叶变换。维纳-辛钦定理(Wiener-Khinchin theorem)提供了一个简单的替换方法,如果信号可以看作是平稳随机过程,那么功率谱密度就是信号自相关函数的傅里叶变换。 信号的功率谱密度当且仅当信号是广义的平稳过程的时候才存在。如果信号不是平稳过程,那么自相关函数一定是两个变量的函数,这样就不存在功率谱密度,但是可以使用类似的技术估计时变谱密度。 随机信号是时域无限信号,不具备可积分条件,因此不能直接进行傅氏变换。一般用具有统计特性的功率谱来作为谱分析的依据。 功率谱与自相关函数是一个傅氏变换对。 功率谱具有单位频率的平均功率量纲。所以标准叫法是功率谱密度。从名字分解来看就是说,观察对象是功率,观察域是谱域。 通过功率谱密度函数,可以看出随机信号的能量随着频率的分布情况。像白噪声就是平行于一条直线。 一般我们讲的功率谱密度都是针对平稳随机过程的,由于平稳随机过程的样本函数一般不是绝对可积的,因此不能直接对它进行傅立叶分析。可以有三种办法来重新定义谱密度,来克服上述困难。 1. 用相关函数的傅立叶变换来定义谱密度; 2. 用随机过程的有限时间傅立叶变换来定义谱密度; 3. 用平稳随机过程的谱分解来定义谱密度。 三种定义方式对应于不同的用处,首先第一种方式前提是平稳随机过程不包含周

功率谱估计介绍(介绍了matlab函数)

功率谱估计介绍 谱估计在现代信号处理中是一个很重要的课题,涉及的问题很多。在这里,结合matlab,我做一个粗略介绍。功率谱估计可以分为经典谱估计方法与现代谱估计方法。经典谱估计中最简单的就是周期图法,又分为直接法与间接法。直接法先取N点数据的傅里叶变换(即频谱),然后取频谱与其共轭的乘积,就得到功率谱的估计;间接法先计算N点样本数据的自相关函数,然后取自相关函数的傅里叶变换,即得到功率谱的估计.都可以编程实现,很简单。在matlab中,周期图法可以用函数periodogram实现。 周期图法估计出的功率谱不够精细,分辨率比较低。因此需要对周期图法进行修正,可以将信号序列x(n)分为n个不相重叠的小段,分别用周期图法进行谱估计,然后将这n段数据估计的结果的平均值作为整段数据功率谱估计的结果。还可以将信号序列x(n)重叠分段,分别计算功率谱,再计算平均值作为整段数据的功率谱估计。 种称为分段平均周期图法,一般后者比前者效果好。加窗平均周期图法是对分段平均周期图法的改进,即在数据分段后,对每段数据加一个非矩形窗进行预处理,然后在按分段平均周期图法估计功率谱。相对于分段平均周期图法,加窗平均周期图法可以减小频率泄漏,增加频峰的宽度。welch法就是利用改进的平均周期图法估计估计随机信号的功率谱,它采用信号分段重叠,加窗,FFT 等技术来计算功率谱。与周期图法比较,welch法可以改善估计谱曲线的光滑性,大大提高谱估计的分辨率。matlab中,welch法用函数psd实现。调用格式如下: [Pxx,F] = PSD(X,NFFT,Fs,WINDOW,NOVERLAP) X:输入样本数据 NFFT:FFT点数 Fs:采样率 WINDOW:窗类型 NOVERLAP,重叠长度 现代谱估计主要针对经典谱估计分辨率低和方差性不好提出的,可以极大的提高估计的分辨率和平滑性。可以分为参数模型谱估计和非参数模型谱估计。参数模型谱估计有AR模型,MA模型,ARMA模型等;非参数模型谱估计有最小方差法和MUSIC法等。由于涉及的问题太多,这里不再详述,可以参考有关资料。matlab中,现代谱估计的很多方法都可以实现。music方法用pmusic命令实现;pburg函数利用burg法实现功率谱估计;pyulear函数利用yule-walker算法实现功率谱估计等等。 另外,sptool工具箱也具有功率谱估计的功能。窗口化的操作界面很方便,而且有多种方法可以选择 在海杂波抑制的研究中,对海杂波谱分析一定要用到谱估计理论,一定得花时间学好!

功率谱密度估计方法的MATLAB实现

功率谱密度估计方法的MATLAB实现 在应用数学和物理学中,谱密度、功率谱密度和能量谱密度是一个用于信号的通用概念,它表示每赫兹的功率、每赫兹的能量这样的物理量纲。在物理学中,信号通常是波的形式,例如电磁波、随机振动或者声波。当波的频谱密度乘以一个适当的系数后将得到每单位频率波携带的功率,这被称为信号的功率谱密度(power spectral density, PSD)或者谱功率分布(spectral power distribution, SPD)。功率谱密度的单位通常用每赫兹的瓦特数(W/Hz)表示,或者使用波长而不是频率,即每纳米的瓦特数(W/nm)来表示。信号的功率谱密度当且仅当信号是广义的平稳过程的时候才存在。如果信号不是平稳过程,那么自相关函数一定是两个变量的函数,这样就不存在功率谱密度,但是可以使用类似的技术估计时变谱密度。信号功率谱的概念和应用是电子工程的基础,尤其是在电子通信系统中,例如无线电和微波通信、雷达以及相关系统。因此学习如何进行功率谱密度估计十分重要,借助于Matlab工具可以实现各种谱估计方法的模拟仿真并输出结果。下面对周期图法、修正周期图法、最大熵法、Levinson递推法和Burg法的功率谱密度估计方法进行程序设计及仿真并给出仿真结果。 以下程序运行平台:Matlab R2015a(8.5.0.197613) 一、周期图法谱估计程序 1、源程序 Fs=100000; %采样频率100kHz N=1024; %数据长度N=1024 n=0:N-1; t=n/Fs; xn=sin(2000*2*pi*t); %正弦波,f=2000Hz Y=awgn(xn,10); %加入信噪比为10db的高斯白噪声 subplot(2,1,1); plot(n,Y) title('信号') xlabel('时间');ylabel('幅度');

功率谱密度

功率谱密度 不同形式的数字基带信号具有不同的频谱结构,分析数字基带信号的频谱特性,以便合理地设计数字基带信号,使得消息代码变换为适合于给定信道传输特性的结构,是数字基带传输必须考虑的问题。 在通信中,除特殊情况(如测试信号)外,数字基带信号通常都是随机脉冲序列。因为,如果在数字通信系统中所传输的数字序列是确知的,则消息就不携带任何信息,通信也就失去了意义。故我们面临的是一个随机序列的谱分析问题。 考察一个二进制随机脉冲序列。设脉冲、分别表示二进制码“0”和“1”, 为 码元的间隔,在任一码元时间内,和出现的概率分别为p和1-p。 则随机脉冲序列x(t)可表示成: 其中 研究由上面二式所确定的随机脉冲序列的功率谱密度,要用到概率论与随机过程的有关知识。可以证明,随机脉冲序列x(t)的双边功率谱公式(1): 其中、分别为、的傅氏变换,。 可以得出如下结论: (1)随机脉冲序列功率谱包括两部分:连续谱(第一项)和离散谱(第二项)。对于连续谱而言,由于代表数字信息的及不能完全相同,故,因此,连 续谱总是存在;而对于离散谱而言,则在一些情况下不存在,如及是双极性的脉冲,且出现概率相同时。 (2)当、、p及给定后,随机脉冲序列功率谱就确定了。 上式的结果是非常有意义的,它一方面能使我们了解随机脉冲序列频谱的特点,以及如何去具体地计算它的功率谱密度;另一方面根据它的离散谱是否存在这一特点,将使我们明确能否从脉冲序列中直接提取离散分量,以及采取怎样的方法可以从基带脉冲序列中获得所需的离散分量。这一点,在研究位同步、载波同步等问题时,将是十分重要的;再一方面,根据它的连续谱可以确定序列的带宽(通常以谱的第一个零点作为序列的带宽)。 下面,以矩形脉冲构成的基带信号为例,通过几个有代表性的特例对功率谱密度公式的应用及意义做进一步的说明,其结果对后续问题的研究具有实用意义。

AR功率谱估计MatlAB

AR模型的谱估计是现代谱估计的主要内容 AR模型的谱估计是现代谱估计的主要内容。 1.AR 模型的Yule—Walker方程和Levinson-Durbin递推算法:在MATLAB中,函数levinson和aryule都采用 Levinson-Durbin递推算法来求解AR模型的参数a1,a2,……,ap及白噪声序列的方差,只是两者的输入参数不同,它们的格式为: A=LEVINSON(R,ORDER) A=ARYULE(x,ORDER) 两函数均为定阶ORDER的求解,但是函数levinson的输入参数要求是序列的自相关函数,而函数aryule的输入参数为采样序列。 下面语句说明函数levinson和函数aryule的功能是相同的: 例子: randn('seed',0) a=[1 0.1 0.2 0.3 0.4 0.5]; x=impz(1,a,20)+randn(20,1)/20; r=xcorr(x,'biased'); r(1:length(x)-1)=[]; A=levinson(r,5) B=aryule(x,5) 2.Burg算法: 格式为:A=ARBURG(x,ORDER); 其中x为有限长序列,参数ORDER用于指定AR 模型的阶数。以上面的例子为例: randn('seed',0) a=[1 0.1 0.2 0.3 0.4 0.5]; x=impz(1,a,20)+randn(20,1)/20; A=arburg(x,5)

3.改进的协方差法: 格式为:A=ARMCOV(x,ORDER); 该函数用来计算有限长序列x(n)的ORDER阶AR 模型的参数。例如:输入下面语句: randn('seed',0) a=[1 0.1 0.2 0.3 0.4 0.5]; x=impz(1,a,20)+randn(20,1)/20; A=armcov(x,5) AR模型阶数P的选择: AR 模型阶数P一般事先是不知道的,需要事先选定一个较大的值,在递推的过程中确定。在使用Levinson—Durbin递推方法时,可以给出由低阶到高阶的每一组参数,且模型的最小预测误差功率Pmin(相当于白噪声序列的方差)是递减的。直观上讲,当预测误差功率P达到指定的希望值时,或是不再发生变化时,这时的阶数即是应选的正确阶数。 因为预测误差功率P是单调下降的,因此,该值降到多少才合适,往往不好选择。比较常见的准则是: 最终预测误差准则:FPE(r)=Pr{[N+(r+1)]/ [N-(r+1)]} 信息论准则:AIC(r)=N*log(Pr)+2*r 上面的N为有限长序列x(n)的长度,当阶数r由1增加时,FPE(r) 和AIC(r)都将在某一r处取得极小值。将此时的r定为最合适的阶数p。 MATLAB中AR模型的谱估计的函数说明: 1. Pyulear函数: 功能:利用Yule--Walker方法进行功率谱估计. 格式: Pxx=Pyulear(x,ORDER,NFFT) [Pxx,W]=Pyulear(x,ORDER,NFFT) [Pxx,W]=Pyulear(x,ORDER,NFFT,Fs) Pyulear(x,ORDER,NFFT,Fs,RANGE,MAGUNITS)

功率谱估计的MATLAB实现

实验功率谱估计 实验目的: 1、掌握最大熵谱估计的基本原理。 2、了解最终预测误差(FPE)准则。 3、掌握周期图谱估计的基本原理。 4、掌握传统谱估计中直接法与间接法之间的关系。 5、复习快速傅里叶变换与离散傅里叶变换之间关系。 实验内容: 1、设两正弦信号的归一化频率分别为0.175和0.20,用最大熵法编程计算信噪比S/N=30dB、N=32点时该信号的最大熵谱估计结果。 2、用周期图法编程计算上述信号的谱估计结果。 程序示例: 1、最大熵谱估计 clc; N=32; SNR=30; fs=1; t=1:N; t=t/fs; y=sin(2*pi*0.175*t)+sin(2*pi*0.20*t); x = awgn(y,SNR); M=1; P(M)=0; Rx(M)=0; for n=1:N P(M)=P(M)+(abs(x(n)))^2; ef(1,n)=x(n); eb(1,n)=x(n); end P(M)=P(M)/N; Rx(M)=P(M); M=2;

A=0; D=0; for n=M:N A=A+ef(M-1,n)*eb(M-1,n-1); D=D+(abs(ef(M-1,n)))^2+(abs(eb(M-1,n-1)))^2; end xishu=-2*A/D; a(M-1,M-1)=-2*A/D; P(M)=P(M-1)*(1-(abs(xishu))^2); FPE(M-1)=P(M)*(N+M)/(N-M); TH=FPE(M-1); for n=M:N ef(M,n)=ef(M-1,n)+xishu*eb(M-1,n-1); eb(M,n)=eb(M-1,n-1)+xishu*ef(M-1,n); end M=M+1; A=0; D=0; for n=M:N A=A+ef(M-1,n)*eb(M-1,n-1); D=D+(abs(ef(M-1,n)))^2+(abs(eb(M-1,n-1)))^2; end xishu=-2*A/D; a(M-1,M-1)=-2*A/D; P(M)=P(M-1)*(1-(abs(xishu))^2); FPE(M-1)=P(M)*(N+M)/(N-M); for m=1:M-2 a(M-1,m)=a(M-2,m)+xishu*a(M-2,M-1-m); end while FPE(M-1)

matlab求功率谱

matlab实现经典功率谱估计 fft做出来是频谱,psd做出来是功率谱;功率谱丢失了频谱的相位信息;频谱不同的信号其功率谱是可能相同的;功率谱是幅度取模后平方,结果是个实数 matlab中自功率谱密度直接用psd函数就可以求,按照matlab的说法,psd能实现Welch法估计,即相当于用改进的平均周期图法来求取随机信号的功率谱密度估计。psd求出的结果应该更光滑吧。 1、直接法: 直接法又称周期图法,它是把随机序列x(n)的N个观测数据视为一能量有限的序列,直接计算x(n)的离散傅立叶变换,得X(k),然后再取其幅值的平方,并除以N,作为序列x(n)真实功率谱的估计。 Matlab代码示例: clear; Fs=1000; %采样频率 n=0:1/Fs:1; %产生含有噪声的序列 xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n)); window=boxcar(length(xn)); %矩形窗 nfft=1024; [Pxx,f]=periodogram(xn,window,nfft,Fs); %直接法 plot(f,10*log10(Pxx)); 2、间接法: 间接法先由序列x(n)估计出自相关函数R(n),然后对R(n)进行傅立叶变换,便得到x(n)的功率谱估计。 Matlab代码示例: clear; Fs=1000; %采样频率 n=0:1/Fs:1; %产生含有噪声的序列 xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n)); nfft=1024; cxn=xcorr(xn,'unbiased'); %计算序列的自相关函数 CXk=fft(cxn,nfft); Pxx=abs(CXk); index=0:round(nfft/2-1); k=index*Fs/nfft;

(完整word版)自己编写算法的功率谱密度的三种matlab实现方法

功率谱密度的三种matlab 实现方法 一:实验目的: (1)掌握三种算法的概念、应用及特点; (2)了解谱估计在信号分析中的作用; (3) 能够利用burg 法对信号作谱估计,对信号的特点加以分析。 二;实验内容: (1)简单说明三种方法的原理。 (2)用三种方法编写程序,在matlab 中实现。 (3)将计算结果表示成图形的形式,给出三种情况的功率谱图。 (4)比较三种方法的特性。 (5)写出自己的心得体会。 三:实验原理: 1.周期图法: 周期图法又称直接法。它是从随机信号x(n)中截取N 长的一段,把它视为能量有限x(n)真实功率谱)(jw x e S 的估计)(jw x e S 的抽样. 认为随机序列是广义平稳且各态遍历的,可以用其一个样本x(n)中的一段)(n x N 来估计该随机序列的功率谱。这当然必然带来误差。由于对)(n x N 采用DFT ,就默认)(n x N 在时域是周期的,以及)(k x N 在频域是周期的。这种方法把随机序列样本x(n)看成是截得一段)(n x N 的周期延拓,这也就是周期图法这个名字的来历。

2.相关法(间接法): 这种方法以相关函数为媒介来计算功率谱,所以又叫间接法。这种方法的具体步骤是: 第一步:从无限长随机序列x(n)中截取长度N 的有限长序列列 )(n x N 第二步:由N 长序列)(n x N 求(2M-1)点的自相关函数)(m R x ∧ 序列。 )()(1)(1 m n x n x N m R N n N N x += ∑-=∧ (2-1) 这里,m=-(M-1)…,-1,0,1…,M-1,M N ,)(m R x 是双边序列,但是由自相关函数的偶对称性式,只要求出m=0,。。。,M-1的傅里叶变换,另一半也就知道了。 第三步:由相关函数的傅式变换求功率谱。即 jwm M M m X jw x e m R e S ----=∧∧ ∑= )()(1) 1( 以上过程中经历了两次截断,一次是将x(n)截成N 长,称为加数据窗,一次是将x(n)截成(2M-1)长,称为加延迟窗。因此所得的功率谱仅是近似值,也叫谱估计,式中的)(jw x e S 代表估值。一般取M<

[matlab实现经典功率谱估计]matlab功率谱估计

[matlab实现经典功率谱估计]matlab功率 谱估计 1、直接法: 直接法又称周期图法,它是把随机序列x(n)的N个观测数据视为一能量有限的序列,直接计算x(n)的离散傅立叶变换,得X(k),然后再取其幅值的平方,并除以N,作为序列x(n)真实功率谱的估计。 Matlab代码示例: clear; Fs=1000; %采样频率 n=0:1/Fs:1; %产生含有噪声的序列 xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n)); window=boxcar(length(xn)); %矩形窗 nfft=1024; [Pxx,f]=periodogram(xn,window,nfft,Fs); %直接法 plot(f,10*log10(Pxx)); 2、间接法: 间接法先由序列x(n)估计出自相关函数R(n),然后对R(n)进行傅立叶变换,便得到x(n)的功率谱估计。 Matlab代码示例: clear; Fs=1000; %采样频率 n=0:1/Fs:1;

%产生含有噪声的序列 xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n)); nfft=1024; cxn=xcorr(xn,”unbiased”); %计算序列的自相关函数CXk=fft(cxn,nfft); Pxx=abs(CXk); index=0:round(nfft/2-1); k=index*Fs/nfft; plot_Pxx=10*log10(Pxx(index+1)); plot(k,plot_Pxx); 3、改进的直接法: 对于直接法的功率谱估计,当数据长度N太大时,谱曲线起伏加剧,若N太小,谱的分辨率又不好,因此需要改进。3.1、Bartlett法 Bartlett平均周期图的方法是将N点的有限长序列x(n)分段求周期图再平均。 Matlab代码示例: clear; Fs=1000; n=0:1/Fs:1; xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n)); nfft=1024; window=boxcar(length(n)); %矩形窗 noverlap=0; %数据无重叠

随机信号的功率谱密度

随机信号的功率谱密度估计和相关函数

随机信号的功率谱密度估计和相关函数 1.实验目的 了解估计功率谱密度的几种方法,掌握功率谱密度估计在随机信号处理中的作用。 ⒉实验原理 随机信号的功率谱密度用来描述信号的能量特征随频率的变化关系。功率谱密度简称为功率谱,是自相关函数的傅里叶变换。对功率谱密度的估计又称功率谱估计。 1.线性估计法(有偏估计):线性估计方法是有偏的谱估计方法,谱分辨率随数据长度的增加而提高。包括自相关估计、自协方差法、周期图法。 2.非线性估计(无偏估计):非线性估计方法大多是无偏的谱估计方法,可以获得高的谱分辨率。包括最大似然法、最大熵法 ⒊实验任务与要求 1. 所有功能均用matlab仿真。 2. 输入信号为:方波信号+n(t),方波信号信号基频1KHz,幅值为1v,n(t)为白噪声。 3. 编写自相关估计法、自协方差法、周期图法、最大似然法、最大熵法的matlab 程序。正确的运行程序。 4. 必须用图示法来表示仿真的结果。对几种功率谱估计的方法进行比较分析,发现它们各自有什么特点?。 5. 按要求写实验报告。 4.Matlab程序如下: 生成输入信号: clear; fs=1024;%设采样频率为1024 n=0:1/fs:1; N=length(n); W=2000*pi;%因方波频率F=1000HZ所以角频率W=2000pi X1n=square(W*n);%方波信号 X2n=randn(1,N);%白噪声信号 xn=X1n+X2n; %产生含有噪声的信号序列XN subplot(3,1,1) plot(n,xn); xlabel('n') ylabel(…输入信号?) %绘输入信号图

MATLAB处理信号得到频谱、相谱、功率谱全解

第一:频谱 一.调用方法 X=FFT(x); X=FFT(x,N); x=IFFT(X); x=IFFT(X,N) 用MATLAB进行谱分析时注意: (1)函数FFT返回值的数据结构具有对称性。 例: N=8; n=0:N-1; xn=[4 3 2 6 7 8 9 0]; Xk=fft(xn) → Xk = 39.0000 -10.7782 + 6.2929i 0 - 5.0000i 4.7782 - 7.7071i 5.0000 4.7782 + 7.7071i 0 + 5.0000i -10.7782 - 6.2929i Xk与xn的维数相同,共有8个元素。Xk的第一个数对应于直流分量,即频率值为0。 (2)做FFT分析时,幅值大小与FFT选择的点数有关,但不影响分析结果。在IFFT时已经做了处理。要得到真实的振幅值的大小,只要将得到的变换后结果乘以2除以N即可。 二.FFT应用举例 例1:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。采样频率fs=100Hz,分别绘制N=128、1024点幅频图。 clf; fs=100;N=128; %采样频率和数据点数 n=0:N-1;t=n/fs; %时间序列 x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号 y=fft(x,N); %对信号进行快速Fourier变换 mag=abs(y); %求得Fourier变换后的振幅 f=n*fs/N; %频率序列

subplot(2,2,1),plot(f,mag); %绘出随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; %对信号采样数据为1024点的处理 fs=100;N=1024;n=0:N-1;t=n/fs; x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号 y=fft(x,N); %对信号进行快速Fourier变换 mag=abs(y); %求取Fourier变换的振幅 f=n*fs/N; subplot(2,2,3),plot(f,mag); %绘出随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=1024');grid on; subplot(2,2,4) plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=1024');grid on; 运行结果: fs=100Hz,Nyquist频率为fs/2=50Hz。整个频谱图是以Nyquist频率为对称轴的。并且可以明显识别出信号中含有两种频率成分:15Hz和40Hz。由此可以知道FFT变换数据的对称性。因此用FFT对信号做谱分析,只需考察0~Nyquist频率范围内的福频特性。若没有给出采样频率和采样间隔,则分析通常对归一化频率0~1进行。另外,振幅的大小与所用采样点数有关,采用128点和1024点的相同频率的振幅是有不同的表现值,但在同一幅图中,40Hz与15Hz振动幅值之比均为4:1,与真实振幅0.5:2是一致的。为了与真实振幅对应,需要将变换后结果乘以2除以N。 例2:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t),fs=100Hz,绘制: (1)数据个数N=32,FFT所用的采样点数NFFT=32; (2)N=32,NFFT=128; (3)N=136,NFFT=128; (4)N=136,NFFT=512。

功率谱密度机器实现

1.基本方法 周期图法是直接将信号的采样数据x(n)进行Fourier变换求取功率谱密度估计的方法。假定有限长随机信号序列为x(n)。它的Fourier变换和功率谱密度估计存在下面的关系: 式中,N为随机信号序列x(n)的长度。在离散的频率点f=kΔf,有: 其中,FFT[x(n)]为对序列x(n)的Fourier变换,由于FFT[x(n)]的周期为N,求得的功率谱估计以N为周期,因此这种方法称为周期图法。下面用例子说明如何采用这种方法进行功率谱 用有限长样本序列的Fourier变换来表示随机序列的功率谱,只是一种估计或近似,不可避免存在误差。为了减少误差,使功率谱估计更加平滑,可采用分段平均周期图法(Bartlett法)、加窗平均周期图法(Welch法)等方法加以改进。 2. 分段平均周期图法(Bartlett法) 将信号序列x(n),n=0,1,…,N-1,分成互不重叠的P个小段,每小段由m个采样值,则 P*m=N。对每个小段信号序列进行功率谱估计,然后再取平均作为整个序列x(n)的功率谱估计。 平均周期图法还可以对信号x(n)进行重叠分段,如按2:1重叠分段,即前一段信号和后一段信号有一半是重叠的。对每一小段信号序列进行功率谱估计,然后再取平均值作为整个序列x(n)的功率谱估计。这两种方法都称为平均周期图法,一般后者比前者好。程序运行结果为图9-5,上图采用不重叠分段法的功率谱估计,下图为2:1重叠分段的功率谱估计,可见后者估计曲线较为平滑。与上例比较,平均周期图法功率谱估计具有明显效果(涨落曲线靠近0dB)。 3.加窗平均周期图法 加窗平均周期图法是对分段平均周期图法的改进。在信号序列x(n)分段后,用非矩形窗口对每一小段信号序列进行预处理,再采用前述分段平均周期图法进行整个信号序列x(n)的功率谱估计。由窗函数的基本知识(第7章)可知,采用合适的非矩形窗口对信号进行处理可减小“频谱泄露”,同时可增加频峰的宽度,从而提高频谱分辨率。 其中上图采用无重叠数据分段的加窗平均周期图法进行功率谱估计,而下图采用重叠数据分段的加窗平均周期图法进行功率谱估计,显然后者是更佳的,信号谱峰加宽,而噪声谱均在0dB附近,更为平坦(注意采用无重叠数据分段噪声的最大的下降分贝数大于5dB,而重叠数据分段周期图法噪声的最大下降分贝数小于5dB)。 4. Welch法估计及其MATLAB函数 Welch功率谱密度就是用改进的平均周期图法来求取随机信号的功率谱密度估计的。Welch 法采用信号重叠分段、加窗函数和FFT算法等计算一个信号序列的自功率谱估计(PSD如上例中的下半部分的求法)和两个信号序列的互功率谱估计(CSD)。 MATLAB信号处理工具箱函数提供了专门的函数PSD和CSD自动实现Welch法估计,而不需要自己编程。 (1)函数psd利用Welch法估计一个信号自功率谱密度,函数调用格式为: [Pxx[,f]]=psd(x[,Nfft,Fs,window,Noverlap,’dflag’])

功率谱估计MATLAB实现

功率谱估计性能分析及其MATLAB实现 一、经典功率谱估计分类简介 1.间接法 根据维纳-辛钦定理,1958年Blackman和Turkey给出了这一方法的具体实现,即先由N个观察值,估计出自相关函数,求自相关函数傅里叶变换,以此变换结果作为对功率谱的估计。 2.直接法 直接法功率谱估计是间接法功率谱估计的一个特例,又称为周期图法,它是把随机信号的N 个观察值直接进行傅里叶变换,得到,然后取其幅值的平方,再除以N,作为对功率谱的估计。 3.改进的周期图法 将N点的观察值分成L个数据段,每段的数据为M,然后计算L个数据段的周期图的平均 ,作为功率谱的估计,以此来改善用N点观察数据直接计算的周期图的方差特性。根据分段方法的不同,又可以分为Welch法和Bartlett法。 Welch法 所分的数据段可以互相重叠,选用的数据窗可以是任意窗。 Bartlett法 所分的数据段互不重叠,选用的数据窗是矩形窗。

二、经典功率谱估计的性能比较 1.仿真结果 为了比较经典功率谱估计的性能,本文采用的信号是高斯白噪声加两个正弦信号,采样率Fs=1000Hz,两个正弦信号的频率分别为f1=200Hz,f2=210Hz。所用数据长度N=400. 仿真结果如下: Figure1(a)示出了待估计信号的时域波形;

Figure2(b)示出了用该数据段直接求出的周期图,所用的数据窗为矩形窗; Figure2(c)是用BT法(间接法)求出的功率谱曲线,对自相关函数用的平滑窗为矩形窗,长度M=128,数据没有加窗; Figure2(d)是用BT法(间接法)求出的功率谱曲线,对自相关函数用的平滑窗为Hamming 窗,长度M=64,数据没有加窗; Figure2(e)是用Welch平均法求出的功率谱曲线,每段数据的长度为64点,重叠32点,使用的Hamming窗; Figure2(f)是用Welch平均法求出的功率谱曲线,每段数据的长度为100点,重叠48点,使用的Hamming窗; 2.性能比较 1)直接法得到的功率谱分辨率最高,但是方差性能最差,功率谱起伏剧烈,容易出现 虚假谱峰; 2)间接法由于使用了平滑窗对直接法估计的功率谱进行了平滑,因此方差性能比直接 法好,功率谱比直接法估计的要平滑,但其分辨率比直接法低。 3)Welch平均周期图法是三种经典功率谱估计方法中方差性能最好的,估计的功率谱 也最为平滑,但这是以分辨率的下降及偏差的增大为代价的。 3.关于经典功率谱估计的总结 1)功率谱估计,不论是直接法还是间接法都可以用FFT快速计算,且物理概念明确,因而 仍是目前较常用的谱估计方法。 2)谱的分辨率较低,它正比于2π/N,N是所使用的数据长度。 3)方差性能不好,不是真实功率谱的一致估计,且N增大时,功率谱起伏加剧。 4)周期图的平滑和平均是和窗函数的使用紧密关联的,平滑和平均主要是用来改善周期图 的方差性能,但往往又减小了分辨率和增加了偏差,没有一个窗函数能使估计的功率谱在方差、偏差和分辨率各个方面都得到改善,因此使用窗函数只是改进估计质量的一个技巧问题,并不能从根本上解决问题。 三、AR模型功率谱估计 1.A R模型功率谱估计简介 AR模型功率谱估计是现代谱估计中最常用的一种方法,这是因为AR模型参数的精确估计可以用解一组线性方程(Yule-Walker方程)的方法求得。其核心思想是:将信号看成是一个p 阶AR过程,通过建立Yule-Walker方程求解AR模型的参数,从而得到功率谱的估计。 由于已知的仅仅是长度有限的观测数据,因此AR模型参数的求得,通常是首先通过某种算法求得自相关函数的估计值,进而求得AR模型参数的估计值。常用的几种AR模型参数提取方法有: 1)自相关法 假定观测数据区间之外的数据为0,在均方误差意义下使得数据的前向预测误差最小。

基于matlab的经典功率谱估计(有源程序)

经典功率谱估计 直接法: 直接法又称周期图法,它是把随机序列x(n)的N个观测数据视为一能量有限的序列,直接计算x(n)的离散傅立叶变换,得X(k),然后再取其幅值的平方,并除以N,作为序列x(n)真实功率谱的估计。 Matlab代码示例: clear; Fs=1000; %采样频率 n=0:1/Fs:1; %产生含有噪声的序列 xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n)); window=boxcar(length(xn)); %矩形窗 nfft=1024; [Pxx,f]=periodogram(xn,window,nfft,Fs); %直接法 plot(f,10*log10(Pxx)); 间接法: 间接法先由序列x(n)估计出自相关函数R(n),然后对R(n)进行傅立叶变换,便得到x(n)的功率谱估计。 Matlab代码示例: clear; Fs=1000; %采样频率 n=0:1/Fs:1; %产生含有噪声的序列 xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n)); nfft=1024; cxn=xcorr(xn,'unbiased'); %计算序列的自相关函数 CXk=fft(cxn,nfft); Pxx=abs(CXk); index=0:round(nfft/2-1); k=index*Fs/nfft; plot_Pxx=10*log10(Pxx(index+1)); plot(k,plot_Pxx); 改进的直接法: 对于直接法的功率谱估计,当数据长度N太大时,谱曲线起伏加剧,若N太小,谱的分辨率又不好,因此需要改进。 1. Bartlett法 Bartlett平均周期图的方法是将N点的有限长序列x(n)分段求周期图再平均。 Matlab代码示例: clear; Fs=1000; n=0:1/Fs:1; xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n));

MATLAB中AR模型功率谱估计中AR阶次估计的实现

MATLAB中AR模型功率谱估计中AR阶次估计的实现 (最近看了几个关于功率谱的问题,有关AR模型的谱估计,在此分享一下,希望大家不吝指正) (声明:本文内容摘自我的毕业论文——心率变异信号的预处理及功率谱估计) (按:AR模型功率谱估计是对非平稳随机信号功率谱估计的常用方法,但是其模型阶次的估计,除了HOSA工具箱里的arorder函数外,没有现成的函数可用,arorder函数是基于矩阵SVD分解的阶次估计方法,为了比较各种阶次估计方法的区别,下面的函数使用了'FPE', 'AIC', 'MDL', 'CAT'集中准则一并估计,并采用试验方法确定那一个阶次更好。) ………………………………以上省略…………………………………………………………………… 假设原始数据序列为x,那么n阶参数使用最小二乘估计在MATLAB中实现如下: 复制内容到剪贴板 代码: Y = x; Y(1:n) = []; m = N-n; X = [];% 构造系数矩阵 for i = 1:m for j = 1:n X(i,j) = xt(n+i-j); end end beta = inv(X'*X)*X'*Y'; beta即为用最小二乘法估计出的模型参数。 此外,还有估计AR模型参数的Yule-Walker方程法、基于线性预测理论的Burg算法和修正的协方差算法等[26]。相应的参数估计方法在MATLAB中都有现成的函数,比如aryule、arburg以及arcov等。 4.3.3 AR模型阶次的选择及实验设计

文献[26]中介绍了五种不同的AR模型定阶准则,分别为矩阵奇异值分解(Singular Value Decomposition, SVD)定阶法、最小预测定误差阶准则 (Final Prediction Error Criterion, FPE)、AIC定阶准则(Akaika’s Information theoretic Criterion, AIC)、MDL定阶准则以及CAT定阶准则。文献[28]中还介绍了一种BIC定阶准则。SVD方法是对Yule-Walker方 程中的自相关矩阵进行SVD分解来实现的,在MATLAB工具箱中arorder函数就是使用的该算法。其他五种算法的基本思想都是建立目标函数,阶次估计的标准是使目标函数最小化。 以上定阶准则在MATLAB中也可以方便的实现,下面是本文实现FPE、AIC、MDL、CAT定阶准则的程序(部分): 复制内容到剪贴板 代码: for m = 1:N-1 …… % 判断是否达到所选定阶准则的要求 if strcmp(criterion,'FPE') objectfun(m+1) = (N+(m+1))/(N-(m+1))*E(m+1); elseif strcmp(criterion,'AIC') objectfun(m+1) = N*log(E(m+1))+2*(m+1); elseif strcmp(criterion,'MDL') objectfun(m+1) = N*log(E(m+1))+(m+1)*log(N); elseif strcmp(criterion,'CAT') for index = 1:m+1 temp = temp+(N-index)/(N*E(index)); end objectfun(m+1) = 1/N*temp-(N-(m+1))/(N*E(m+1)); end if objectfun(m+1) >= objectfun(m) orderpredict = m; break; end end orderpredict变量即为使用相应准则预测的AR模型阶次。

相关文档
最新文档