MatLab实现FFT与功率谱
FFT和功率谱估计
- 用Fourier变换求取信号的功率谱---周期图法
clf;
Fs=1000;
N=256;Nfft=256;%数据的长度和FFT所用的数据长度
n=0:N-1;t=n/Fs;%采用的时间序列
xn=sin(2*pi*50*t)+2*sin(2*pi*120*t)+randn(1,N);
Pxx=10*log10(abs(fft(xn,Nfft).^2)/N);%Fourier振幅谱平方的平均值,并转化为dB
f=(0:length(Pxx)-1)*Fs/length(Pxx);%给出频率序列
subplot(2,1,1),plot(f,Pxx);%绘制功率谱曲线
xlabel('频率/Hz');ylabel('功率谱/dB');
title('周期图 N=256');grid on;
Fs=1000;
N=1024;Nfft=1024;%数据的长度和FFT所用的数据长度
n=0:N-1;t=n/Fs;%采用的时间序列
xn=sin(2*pi*50*t)+2*sin(2*pi*120*t)+randn(1,N);
Pxx=10*log10(abs(fft(xn,Nfft).^2)/N);%Fourier振幅谱平方的平均值,并转化为dB
f=(0:length(Pxx)-1)*Fs/length(Pxx);%给出频率序列
subplot(2,1,2),plot(f,Pxx);%绘制功率谱曲线
xlabel('频率/Hz');ylabel('功率谱/dB');
title('周期图 N=256');grid on;
- 用Fourier变换求取信号的功率谱---分段周期图法
%思想:把信号分为重叠或不重叠的小段,对每小段信号序列进行功率谱估计,然后取平均值作为整个序列的功率谱
clf;
Fs=1000;
N=1024;Nsec=256;%数据的长度和FFT所用的数据长度
n=0:N-1;t=n/Fs;%采用的时间序列
randn('state',0);
xn=sin(2*pi*50*t)+2*sin(2*pi*120*t)+randn(1,N);
Pxx1=abs(fft(xn(1:256),Nsec).^2)/Nsec; %第一段功率谱
Pxx2=abs(fft(xn(257:512),Nsec).^2)/Nsec;%第二段功率谱
Pxx3=abs(fft(xn(513:768),Nsec).^2)/Nsec;%第三段功率谱
Pxx4=abs(fft(xn(769:1024),Nsec).^2)/Nsec;%第四段功率谱
Pxx=10*log10(Pxx1+Pxx2+Pxx3+Pxx4/4);%Fourier振幅谱平方的平均值,并转化为dB
f=(0:length(Pxx)-1)*Fs/length(Pxx);%给出频率序列
subplot(2,1,1),plot(f(1:Nsec/2),Pxx(1:Nsec/2));%绘制功率谱曲线
xlabel('频率/Hz');ylabel('功率谱/dB');
title('平均周期图(无重叠) N=4*256');grid on;
%运用信号重叠分段估计功率谱
Pxx1=abs(fft(xn(1:256),Nsec).^2)/Nsec; %第一段功率谱
Pxx2=abs(fft(xn(129:384),Nsec).^2)/Nsec;%第二段功率谱
Pxx3=abs(fft(xn(257:512),Nsec).^2)/Nsec;%第三段功率谱
Pxx4=abs(fft(xn(385:640),Nsec).^2)/Nsec;%第四段功率谱
Pxx5=abs(fft(xn(513:768),Nsec).^2)/Nsec;%第四段功率谱
Pxx6=abs(fft(xn(641:896),Nsec).^2)/Nsec;%第四段功率谱
Pxx7=abs(fft(xn(769:1024),Nsec).^2)/Nsec;%第四段功率谱
Pxx=10*log10(Pxx1+Pxx2+Pxx3+Pxx4+Pxx5+Pxx6+Pxx7/7);%Fourier振幅谱平方的平均值,并转化为dB
f=(0:length(Pxx)-1)*Fs/length(Pxx);%给出频率序列
subplot(2,1,2),plot(f(1:Nsec/2),Pxx(1:Nsec/2));%绘制功率谱曲线
xlabel('频率/Hz');ylabel('功率谱/dB');
title('平均周期图(重叠1/2)
N=1024');grid on; - 用Fourier变换求取信号的功率谱---welch方法
%思想:welch法采用信号重叠分段,加窗函数和FFT算法等计算一个信号序列的自功率谱(PSD)和两个信号序列的互功率谱(CSD),采用MATLAB自
%带的函数psd
clf;
Fs=1000;
N=1024;Nfft=256;n=0:N-1;t=n/Fs;
window=hanning(256);
noverlap=128;
dflag='none';
randn('state',0);
xn=sin(2*pi*50*t)+2*sin(2*pi*120*t)+randn(1,N);
Pxx=psd(xn,Nfft,Fs,window,noverlap,dflag);
f=(0:Nfft/2)*Fs/Nfft;
plot(f,10*log10(Pxx));
xlabel('频率/Hz');ylabel('功率谱/dB');
title('PSD--Welch方法');grid on; - 功率谱估计----多窗口法(multitaper method ,MTM法)
%思想:利用多个正交窗口获得各自独立的近似功率谱估计,综合这些得到一个序列的功率谱估计;相对于普通的周期图有更大的自由度;MTM法采用一个参数:时间带
%宽积NW,这个参数用以定义计算功率谱所用窗的数目为2*NW-1,NW越大,时间域分辨率越高而频率分辨率越低,使得功率谱估计的波动减小;随着NW的增大
%,每次估计中谱泄露增多,总功率谱估计的偏差增大
clf;
Fs=1000;
N=1024;Nfft=256;n=0:N-1;t=n/Fs;
randn('state',0);
xn=sin(2*pi*50*t)+2*sin(2*pi*120*t)+randn(1,N);
[Pxx1,f]=pmtm(xn,4,Nfft,Fs); %此处有问题
subplot(2,1,1),plot(f,10*log10(Pxx1));
xlabel('频率/Hz');ylabel('功率谱/dB');
title('多窗口法(MTM)NW=4');grid on;
[Pxx,f]=pmtm(xn,2,Nfft,Fs);
subplot(2,1,2),plot(f,10*log10(Pxx));
xlabel('频率/Hz');ylabel('功率谱/dB');
title('多窗口法(MTM)NW=2');grid on; - 功率谱估计----最大熵法(maxmum entmpy method,MEM法)
%思想:假定随机序列为平稳高斯过程利用已知的自相关序列rxx(0),rxx(1),rxx(2)...rxx(p)为基础,外推自相关序列rxx(p+1),rxx(p+2)...保证信息熵最大
clf;
Fs=1000;
N=1024;Nfft=256;n=0:N-1;t=n/Fs;
window=hanning(256);
randn('state',0);
xn=sin(2*pi*50*t)+2*sin(2*pi*120*t)+randn(1,N);
[Pxx1,f]=pmem(xn,14,Nfft,Fs); %此处有问题
subplot(2,1,1),plot(f,10*log10(Pxx1));
xlabel('频率/Hz');ylabel('功率谱/dB');
title('最大熵法(MEM)Order=14');grid
on;
%采用Welch方法估计功率谱
noverlap=128;
dflag='none';
subplot(2,1,2)
psd(xn,Nfft,Fs,window,noverlap,dflag);
xlabel('频率/Hz');ylabel('功率谱/dB');
title('Welch方法估计功率谱');grid on; - 功率谱估计----多信号分类法(multiple signal classification,music法)
%注:适用于白白噪声中的多正弦波频率估计
%思想:将数据自相关矩阵看成是由信号自相关矩阵和噪声自相关矩阵两部分组成,求他们的矩阵特征值向量
clf;
Fs=1000;
N=1024;Nfft=256;n=0:N-1;t=n/Fs;
randn('state',0);
xn=sin(2*pi*100*t)+2*sin(2*pi*200*t)+randn(1,N);
pmusic(xn,[7,1.1],Nfft,Fs,32,16);
xlabel('频率/KHz');ylabel('功率谱/dB');
title('Welch方法估计功率谱');grid on;
MatLab实现FFT与功率谱的更多相关文章
- MATLAB中FFT的使用方法
MATLAB中FFT的使用方法 说明:以下资源来源于<数字信号处理的MATLAB实现>万永革主编 一.调用方法X=FFT(x):X=FFT(x,N):x=IFFT(X);x=IFFT(X, ...
- [转载]Matlab中fft与fftshift命令的小结与分析
http://blog.sina.com.cn/s/blog_68f3a4510100qvp1.html 注:转载请注明出处——by author. 我们知道Fourier分析是信号处理里很重要的技术 ...
- matlab中fft快速傅里叶变换
视频来源:https://www.bilibili.com/video/av51932171?t=628. 博文来源:https://ww2.mathworks.cn/help/matlab/ref/ ...
- MATLAB中fft函数的正确使用方法
问题来源:在阅读莱昂斯的<数字信号处理>第三章离散傅里叶变换时,试图验证实数偶对称信号的傅里叶变换实部为偶对称的且虚部为零.验证失败.验证信号为矩形信号,结果显示虚部是不为零且最大幅值等于 ...
- [转载]MATLAB中FFT的使用方法
http://blog.163.com/fei_lai_feng/blog/static/9289962200971751114547/ 说明:以下资源来源于<数字信号处理的MATLAB实现&g ...
- matlab 中fft的用法
一.调用方法X=FFT(x):X=FFT(x,N):x=IFFT(X);x=IFFT(X,N) 用MATLAB进行谱分析时注意: (1)函数FFT返回值的数据结构具有对称性. 例:N=8;n=0:N- ...
- Matlab 之 FFT的理解和应用
网上看了一些大牛的关于FFT的见解,加上自己的一点儿理解,针对以下这几个问题来加深对FFT的理解. 不知道大家有没有类似以下几点的困惑: 问题的提出 对于1秒钟输出的连续信号,使用采样率Fs不同,就会 ...
- MATLAB使用fft求取给定音频信号的频率
一段10s立体声音频,采样率位8000Hz,已知频率为1000Hz clc; clear; [data, Fs] = audioread('1khz_stereo_8000.wav'); fs=Fs; ...
- Matlab计算的FFT与通过Origin计算的FFT
实验的过程中,经常需要对所采集的数据进行频谱分析,软件的选择对计算速度影响挺大的.我在实验过程中,通常使用Origin7.5来进行快速傅里叶变换,因为方便快捷,计算之后,绘出来的图也容易编辑.但是当数 ...
随机推荐
- ACdream OJ 1153 (k-GCD)
题目链接: http://115.28.76.232/problem?pid=1153 题意: 从给定的n个数中取出k个数,使得他们的最大公约数最大,求这个最大的公约数 分析: 暴力分解不可取,我们能 ...
- start_kernel——local_irq_disable
在启动初期须要关闭CPU的IRQ,原因: 因为尚未对中断代码.向量表,中断处理器进行初始化,所以必须关闭中断. 我的源码里面定义了 CONFIG_TRACE_IRQFLAGS_SUPPORT,所以调用 ...
- poj1184 聪明的打字员(BFS剪枝)
http://poj.org/problem?id=1184 用字符串s存下数字,并把光标位置做一个字符加到s末尾,用map做标记状态是否出现过,然后bfs即可. 不剪枝是过不了的,考虑的两种交换操作 ...
- bootstrap使用中遇到的问题(二)
1.ie8不支持carousel组件, 解决方法:将jquery换为jquery1版本,具体原因不清楚~~~~~ 2.ie8不支持background-color:rgba(); 解决方法:这样写代码 ...
- OSError: [Errno 13] Permission denied: '/etc/cron.d/1sandbox_registration'
使用Hortonworks 的twitter tutorial: http://hortonworks.com/hadoop-tutorial/how-to-refine-and-visualize- ...
- javascript EcmaScript5 新增对象之Object.freeze
我们都知道在js里对象是很容易改变的 var obj1 ={ a:'111' } obj1.a = '222'; console.log( obj.a ) //output 222 对象的属性发生了变 ...
- 开发网站相关知识html和javascript
1.html 布局 https://github.com/bramstein/jlayout/ http://welcome.totheinter.net/columnizer-jquery-plug ...
- golang illegal base64 data at input byte
//one reason is whitespace ciphertext = strings.Replace(ciphertext, " ", "", -1) ...
- 多行文本垂直居中div高度确定
父元素高度确定的多行文本.图片.块状元素的垂直居中的方法有两种: 方法一:将内容写入table(包括tbody.tr.td)中的td标签里,同时设置 vertical-align:middle. cs ...
- 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'tb_MyInvoices' 中的标识列插入显式值
默认情况下,IDENTITY_INSER就是off 这种情况下,你写insert 语句时,identity栏位,不要写值,系统会自动帮你写入. 举例说明: ,),dt datetime,pay int ...