功率谱和FFT变换频谱
功率谱:
nfft=length(total_wave);
window1=hamming(100); %海明窗
noverlap=20; %数据无重叠
range='onesided'; %频率间隔为[0 Fs/2],只计算一半的频率
[Pxx1,f_PSD]=pwelch(total_wave',window1,noverlap,nfft,Fs,range);
plot_Pxx1=10*log10(Pxx1);
figure
plot(f_PSD,plot_Pxx1);
频谱和功率谱的区别:
频谱的横轴是频率,纵轴是这个频率信号对应的振幅
功率谱
1) fs采样频率的设定:
Nyquist条件给出了采样频率设定的基本原则, 即采样频率必须大于等于信号频率的2倍。具体设定时,采样频率要能够大于等于信号中最高频率分量值的2倍,令fs表示采样频率,fh表示信号频谱的最高频率,那么要求: fs>=2fh, 否则将出现频谱混叠现象。一般在工程上选择采样频率为信号最高频率的5~10倍。
2) n 采样长度的设定:
在模拟进行频谱分析时,要自行设定采样点数N或采样的时间长度T。
在FFT变换后,频谱中能够区分出的最小频率刻度就是变换后的频率分辨率,满足:df=fs/n, n为FFT 变换的点数;即FFT结果只能表示k*df (k=0,1,2,…)频率坐标上的信号幅值,如果信号中的频率分量值不等于k*df,而介于k*df与(k+1)*df之间时,FFT变换的结果会将该频率分量的幅值泄露到其邻近的频率坐标位置上,从而出现FFT分析的信号泄露情况。因此,应当合理设定采样点数,使得信号中的各频率分量值能够被df整除,从而使得变换后的信号频谱能够更好地描述信号特性。
3) FFT变换特性:
FFT算法特性使得变换后不仅包括正频率部分,也包括负频率部分,如设置采样频率为120Hz,采样信号中包括频率分量10Hz、50Hz,则可知满足Nyquist采样定理,不会出现频谱混叠;经过FFT变换后,在频率坐标的10Hz和50Hz位置处将出现频谱峰值,而在110Hz和70Hz位置也同样出现,其实即是变换后的负频率成分-10Hz、-50Hz搬移120Hz后的结果。因此在分析上仅使用单边的变换结果就够用了
fft 采样频率Fs和采样点数N应该怎么确定?
已知离散信号频率100KSa/s,时间20s,即一共2000000个信号点。现在想作fft,则采样频率Fs和采样点数N应该怎么取呢?
Fs>=2*最高信号频率(奈奎斯特采样定律),还是说Fs=100K就可以?
N=Fs*20s,还是说N可以任意取,取2的阶乘次比较好呢?
1.你的这个采样速率是可以算出来的,“ 时间20s,即一共2000000个信号点”,那么采样速率自然就是100K了,所以给的那个就是采样速率。
2.N取默认值即可(即N为信号长度的点数),matlab现在不要求N必须是2的幂次了,速度非常快的。
3.顺便说一下,做出来的fft也是2000000个点,对应着0~Fs之间的频率。
如果取信号的长度作为采样点,信号的采样频率作为FFT的采样频率,频谱结果为0~Fs之间的频率
满足奈奎斯特采样定理的前提下,采样频率越高,时域内信号分辨率就越高,采集到的信号就越接近原始信号,在频谱上的频带就越宽,有利于后期频域分析
傅里叶变换中涉及到的函数:
1、linspace(x1,x2,N)
功能:linspace是Matlab中的一个指令,用于产生x1,x2之间的N点行矢量。其中x1、x2、N分别为起始值、中止值、元素个数。若缺省N,默认点数为100
时域和频域的关系:
时域的采样会造成频域的周期性
按傅里叶分析的原理,任何周期信号都可以用一组三角函数的组合表示
时域到频域的计算:根据w=2πf计算
横坐标是频率,纵坐标是对应频率成分的幅度(牢记)
画出信号的时域图(目前横轴表示的是一个数据包),信号采样频率设置为200HZ(0.005s)
t=0:0.005:(length(x)-1)*0.005
t_s=0.005%采样周期
f_s=1/t_s=200%采样频率
f_x=0:200/end_point:f_s
plot(f_x,abs(y))
FFT,DFT关系:
1、想对一段序列做DFT,但matlab中没有现成的DFT函数,百度了一下说是可以用FFT来代替,用FFT做出来后频率是对了,但为什么会有对称的两个峰值?
2、实验数据是离散的,自己用的连续信号的傅里叶变换,应该用离散信号的傅里叶变换
1、周期信号的傅里叶变换是离散的频谱(有限值)
2、离散信号的傅里叶变换是周期的函数。
3、非周期信号的傅里叶变换是连续频谱
非周期离散信号?
把数据全部转换为列向量
FFT变换后图像:
1、离散傅里叶变换之后频率为0点处对应的峰值很大,那是零频信号,就是直流分量。DFT后,会有一个直流分量。一般频谱仪的零频处都有一个输出。
去除直流分量的方法:直接减均值操作
xn2=after_wavelet_best-mean(after_wavelet_best);(从效果上看还是挺好的)
2、实信号fft变换频谱是关于二分之N对称的,复信号fft变换后不是对称的(横轴表示什么含义?)
3、确定频谱图中各点的坐标
看到的最高点不一定是我们想要的频率成分
正确示例说明:
[f_1,amp_1] = wfre(64, len, data);
plot(f_1,amp_1(1:fix(len/2)))
xlabel('频率 (Hz)')
ylabel('信号幅度')
title('PPG信号的频谱图')%频谱分析,返回横轴频率和幅度
function [f,amp] = wfre (Fs,N,x)y = fft(x,N);amp =abs(y)/N;% y.*conj(y)/N;f = Fs/N*(0:fix(N/2)-1);
end
必须除数据点数
尝试过的方法:
1、直接传入信号和信号的点数(没有频谱)
2、
N=512;
n=0:N-1;
X=dft(origin_wave,N);
magX=abs(X);
k=(0:length(magX)-1)*N/length(magX);
stem(k,magX);
function [Xk]=dft(xn,N)
n=[0:1:N-1];
k=[0:1:N-1];
WN=exp(-j*2*pi/N);
nk=n'*k;
WNnk=WN.^nk;
Xk=xn*WNnk
end
提示维度不一致(多次出现这个问题)
3、
xn=origin_wave;
M=length(xn);
n=[0:1:M-1];
N=1024; %原离散信号1024个点的DFT变换
k=[0:1:N-1];
%xn=[1 1 1 1]
%w=[-800:1:800]*pi/800; %频域共-pi -- +pi(-800----+800)的长度(本应是无穷,高频分量很少,故省去)
Wn=exp(-j*2*pi/N);
%X=xn*exp(-j.*(n'*w)); %求dtft变换,采用原始定义的方法,对复指数分量求和而得
X=xn*(Wn.^(n'*k));
stem(k,abs(X));
title('原信号的16点DFT变换');
提示错误使用 .^ 矩阵维度必须一致
4、直接进行FFT变换是可行的
%FFT
N=1000; %原离散信号有8点
n=[0:1:N-1] %原信号是1行8列的矩阵
%xn=0.5.^n; %构建原始信号,为指数信号
xn=origin_wave;
Xk=fft(xn,N);
subplot(221);
plot(n,xn);
title('原信号');
subplot(212);
plot(n,abs(Xk));
title('FFT变换')
问题和之前一样,原始信号在零频率处的幅度很大,其余地方幅度很小
功率谱和FFT变换频谱相关推荐
- FFT变换频谱图中幅值的设置方法
按照上篇博文所画出来的频谱图中,原信号的每个频率是准确地找出来了,但是各个频率点所对应的的幅值可不是原信号中真正的幅值,因为在进行DFT(FFT)变换的时候,已经把幅值改变了,要想让频谱图的纵坐标显示 ...
- FFT变换频谱图中频率刻度的设置方法
看到matlab中关于fft变换的几行代码,总想把它们几行语句搞清楚,看了许多,还是有些搞不清楚,可能需要更多的知识才能把它们彻底搞懂吧. 先来看一个简单的画频谱图的代码吧: clear all fs ...
- 故障诊断数据预处理之1-D振动信号FFT变换后的2-D灰度图转换
文章目录 前言 一.转换原理 二.Matlab代码展示 前言 目前,基于数据驱动的故障诊断方法通常采用深度神经网络来挖掘采集数据中隐藏的信息,实现故障分类.然而,它们大多利用原始的一维时域信号作为DN ...
- 通过二维FFT变换对比加入窗函数之后的图像频谱和相位
目录 一.理论基础 1.1二维FFT变换 1.2窗函数 二.核心程序 三.测试结果 一.理论基础 1.1二维FFT变换 以下公式定义 m×n 矩阵 X 的离散傅里叶变换 Y: ωm 和 ωn 是复单位 ...
- 深入浅出解释FFT(七)——fft求频谱图和功率谱密度图
频谱图: 声音频率与能量的关系用频谱表示.在实际使用中,频谱图有三种,即线性振幅谱.对数振幅谱.自功率谱.线性振幅谱的纵坐标有明确的物理量纲,是最常用的.对数振幅谱中各谱线的振幅都作了对数计算,所以其 ...
- FFT求频谱图和功率谱密度图
FFT求频谱图和功率谱密度图 频谱图 声音频率与能量的关系用频谱表示.在实际使用中,频谱图有三种,即线性振幅谱.对数振幅谱.自功率谱. 线性振幅谱的纵坐标有明确的物理量纲,是最常用的. 对数振幅谱中各 ...
- matlab fft反变换,Matlab实现FFT变换
Matlab实现FFT变换 Matlab实现FFT变换(单边谱及双边谱) 以前对于Fourier Transform从来没有细究,不管在LabVIEW还是Matlab里都有现成的FFT(快速Fo ...
- FFT变换的幅值和能量校正
FFT变换的幅值和能量校正 对于从时域通过傅立叶变换计算频谱的大多数人来说,幅值和能量校正一直是个困惑点.首先要说的是,数据中包括的信息和幅值与能量修正的频谱是等效的.幅值和能量修正谱的唯一的区别在于 ...
- 干货 | 使用FFT变换自动去除图像中严重的网纹
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:opencv学堂 这个课题在很久以前就已经有所接触,不过 ...
最新文章
- 10个你值得收藏的牛逼开源后台控制面板
- assert宏的用法
- java socket send_java socket编程
- 外刊评终极平板电脑十大功能:防眩目屏幕在列
- 分布式事务架构设计原理
- linux: 批量修改文件夹及文件夹下文件的名字
- 全国计算机二级C 错题/知识点整理
- [转]HTTP协议之状态码详解
- podman 在 windows 安装
- 学习《软件评测师教程》
- 广西大学计算机与电子信息学院李智,赵进创,广西大学 计算机与电子信息学院...
- python胶水语言融合其他语言_1. Python中如何使用其他语言?(python的胶水作用,python又叫胶水语言)...
- Android Intent FLAG标识
- 【软件构造】正则表达式合法性检测
- 如何关闭IE浏览器安全设置检查功能
- Android随机出加减乘除的四则运算算术题
- vue 使用qrcode生成二维码功能
- 绿色荧光油溶性CdSe/ZnS量子点(硒化镉/硫化锌)
- 关于webpack下载loader出现的问题(ERROR in ./src/img/timg.jpg Module build failed: ValidationError: File Loade)
- codeforces round 717 div2 D