使用Matlab对信号进行频域分析的方法
Matlab可以说是一个非常有用且功能齐全的工具,在通信、自控、金融等方面有广泛的应用。
本文讨论使用Matlab对信号进行频域分析的方法。
实验原理 1、信号的时频域转换方法 通过fourier级数展开或变换 可将时域信号变换为频域信号 反之 通过fourier逆变换可以将频域信号转换为时域信号。离散傅氏变换(dft)的目的是把信号由时域变换到频域,从而可以在频域分析处理信息,得到的结果再由逆dft变换到时域。 按照时域信号的特点 可以应用不同的方法将其转换为频域信号 分别为 时域连续周期性信号 fourier级数 频域离散 信号 时域连续非周期性信号 fourier变换 频域连续 信号 时域非周期性序列 序列fourier变换 频域连续周期性信号 时域有限长序列 离散fourier变换 频域有限长序列 四种时频域转换方式这四种变换原理如下 fourier级数展开级数展开有两种形式 三角级数和指数级数形式。
FFT
对提取到的光场数据进行四维傅里叶变化matlab离散信号的时域和频域分析,计算其傅里叶切片,对得到的傅里叶切片进行二维傅里叶逆变化提取重聚焦后的图像。分析的利器——傅里叶级数和傅里叶分析2.4.1傅里叶级数与傅里叶分析的由来2.4.2周期信号的数学表达——傅里叶级数2.4.3非周期信号的数学阐述——傅里叶分析2.5模拟信号如何转变为数字信号2.5.1声音是如何变成比特流的——奈奎斯特采样定理2.5.2从原始分到标准分——量化2.5.3从...。后者需将原始记录的模拟量变换为数字量后用数字计算机处理,由于精度很高,速度极快,所以随着各种功能齐全的专用数据处理机(如快速傅里叶分析仪)的出现,数字量处理法已逐渐取代了模拟量处理法。
接下来就谈谈如何使用这个函数。
3.2 探究adc 采样相位对频域代价函数幅度影响的原因 为了找出 adc 采样相位对频域代价函数幅度影响的原因,我们从公式 3-2 开始进行推导,公式 3-2 是在频域中表示的代价函数,可以简单概括为将快速傅里叶变换点数nfft 的复数信号做自相关运算及求和。传感器技术与测试系统实验讲义实验部分 编写 北京航空航天大学自动化科学与电气工程学院宇航学院第1节实验一信号的时频域分析及处理 6学时 实验目的 了解时域和频域转换的原理 掌握基本信号的时域和频域分析方法 了解信号处理的原理 掌握数字滤波器及窗函数的原理及应用 掌握信号采样的原理及过程 学习matlab软件编程及进行信号分析的方法 学习labview软件的编程思想及编程方法 学习使用labview的相关功能进行信号分析与处理的方法。 实验原理 1、信号的时频域转换方法 通过fourier级数展开或变换 可将时域信号变换为频域信号 反之 通过fourier逆变换可以将频域信号转换为时域信号。
一个简单的例子
从一个简单正弦信号开始吧,正弦信号定义为:
我们现在通过以下代码在Matlab中画出这个正弦曲线
fo = 4; %frequency of the sine wave
Fs = 100; %sampling rate
Ts = 1/Fs; %sampling time interval
t = 0:Ts:1-Ts; %sampling period
n = length(t); %number of samples
y = 2*sin(2*pi*fo*t); %the sine curve
%plot the cosine curve in the time domain
sinePlot = figure;
plot(t,y)
xlabel('time (seconds)')
ylabel('y(t)')
title('Sample Sine Wave')
grid
这就是我们得到的:
变换(dft)或快速傅立叶变换(fft)分析频谱,估计信号的频率,但dft存在频谱泄露和栏栅效应,当频谱峰值谱线对应频率不能与窗函数频谱主瓣的中心重合时便产生频率测量误差matlab离散信号的时域和频域分析,所以需要研究离散频谱分析校正理论来消除这个误差。[0009]步骤s1:对调频连续波雷达系统采集的中频信号进行离散傅里叶频谱计算,得到频谱峰值谱线号km所对应的粗计算的中频信号频率和距离。根据随机过程理论, Karman型自相关函数在水平和垂直方向上的自相功率谱是其自相关函数的傅氏变换,因此,选择自相 关长度a和b,可以方便地产生各种不同特点的随关函数 (x,z)以及自相关长度a、b,对 (x,z)进行 φ φ 机介质模型,而自相关长度a和b分别描述了随机二维傅氏变换 介质在水平(x)方向及深度(z)方向上非均匀异常 + + ∞ ∞ -i(kx+kz) φ(k,k)= φ(x,z)e x z dxdz(10) 的平均尺度。
使用FFT命令
我们知道目标是什么了,那么现在使用Matlab的内建的FFT函数来重新生成频谱
%plot the frequency spectrum using the MATLAB fft command
matlabFFT = figure; %create a new figure
YfreqDomain = fft(y); %take the fft of our sin wave, y(t)
stem(abs(YfreqDomain)); %use abs command to get the magnitude
%similary, we would use angle command to get the phase plot!
%we'll discuss phase in another post though!
xlabel('Sample Number')
ylabel('Amplitude')
title('Using the Matlab fft command')
grid
axis([0,100,0,120])
效果如下:
但是注意一下,这并不是我们真正想要的,有一些信息是缺失的
x轴本来应该给我们提供频率信息,但是你能读出频率吗?
幅度都是100
没有让频谱中心为
为FFT定义一个函数来获取双边频谱
以下代码可以简化获取双边频谱的过程,复制并保存到你的.m文件中
function [X,freq]=centeredFFT(x,Fs)
%this is a custom function that helps in plotting the two-sided spectrum
%x is the signal that is to be transformed
%Fs is the sampling rate
N=length(x);
%this part of the code generates that frequency axis
if mod(N,2)==0
k=-N/2:N/2-1; % N even
else
k=-(N-1)/2:(N-1)/2; % N odd
end
T=N/Fs;
freq=k/T; %the frequency axis
%takes the fft of the signal, and adjusts the amplitude accordingly
X=fft(x)/N; % normalize the data
X=fftshift(X); %shifts the fft data so that it is centered
这个函数输出正确的频域范围和变换后的信号,它需要输入需要变换的信号和采样率。
接下来使用前文的正弦信号做一个简单的示例,注意你的示例.m文件要和centeredFFT.m文件在一个目录下
[YfreqDomain,frequencyRange] = centeredFFT(y,Fs);
centeredFFT = figure;
%remember to take the abs of YfreqDomain to get the magnitude!
stem(frequencyRange,abs(YfreqDomain));
xlabel('Freq (Hz)')
ylabel('Amplitude')
title('Using the centeredFFT function')
grid
axis([-6,6,0,1.5])
效果如下:
这张图就满足了我们的需求,我们得到了在+4和-4处的峰值,而且幅值为1.
为FFT定义一个函数来获取右边频谱
从上图可以看出,FFT变换得到的频谱是左右对称的,因此,我们只需要其中一边就能获得信号的所有信息,我们一般保留正频率一侧。
以下的函数对上面的自定义函数做了一些修改,让它可以帮助我们只画出信号的正频率一侧
function [X,freq]=positiveFFT(x,Fs)
N=length(x); %get the number of points
k=0:N-1; %create a vector from 0 to N-1
T=N/Fs; %get the frequency interval
freq=k/T; %create the frequency range
X=fft(x)/N; % normalize the data
%only want the first half of the FFT, since it is redundant
cutOff = ceil(N/2);
%take only the first half of the spectrum
X = X(1:cutOff);
freq = freq(1:cutOff);
和前面一样,使用正弦信号做一个示例,下面是示例代码
[YfreqDomain,frequencyRange] = positiveFFT(y,Fs);
positiveFFT = figure;
stem(frequencyRange,abs(YfreqDomain));
set(positiveFFT,'Position',[500,500,500,300])
xlabel('Freq (Hz)')
ylabel('Amplitude')
title('Using the positiveFFT function')
grid
axis([0,20,0,1.5])
效果如下:
美国人的行动就是来挑战这种所谓的十二海里领海权