用Matlab进行fft仿真分析,最大的优势在于其丰富的函数库支撑,可以产生正弦波,矩形波等多种信号,支持信号运算,添加白噪声等功能,丰富的绘图输出功能,还可以对时域波形图和进行FFT变换后的频谱图、功率图进行展示,直观高效。 下面就mathlab变换仿真中可能用到的几个关键函数进行介绍,随后给出完整的fft仿真程序实例,欢迎沟通交流。
在mathlab中,fft函数有以下几种使用方法:
(1)Y = fft(x)
(2)Y = fft(X,n)
(3)Y = fft(X,n,dim)
其中(1)最简单,如果x是向量,则fft(x)返回该向量的傅里叶变换,如果x是矩阵,则fft(x)将x的各列视为向量,并返回每列的傅里叶变换。如果x是一个多维数组,则 fft(X) 将沿大小不等于 1 的第一个数组维度的值视为向量,并返回每个向量的傅里叶变换。
形式(2):Y = fft(X,n),第一个参数桶形式(1),第二个参数n标识做fft变换的数据长度。因此,不同于形式(1)的地方主要就是参数一的X长度和n的关系,如果 X 是向量且 X 的长度小于 n,则为 X 补上尾零以达到长度 n。如果 X 是向量且 X 的长度大于 n,则对 X 进行截断以达到长度 n。如果 X 是矩阵,则每列的处理与在向量情况下相同。如果 X 为多维数组,则大小不等于 1 的第一个数组维度的处理与在向量情况下相同。
形式(3)Y = fft(X,n,dim),在形式(2)基础上指定维度dim,当x为矩阵时,在指定的dim维上进行傅里叶变换,dim=1按列,dim =2按行。
matlab中支持所有的三角函数有两类:
第一类是例如sin、cos、tan等,函数参数都是以弧度为单位的。
第二类是用sind、cosd、tand等,是角度为单位的
当然,我们也可以用用deg2rad将角度转换为弧度。 例如
sin(pi/2) 和sind(90) 的结果是一样的。
利用上面的函数,我们可以生成各种各样的原始函数,
例1如:频率为F,0点相位P的cos函数,可以标识为:
S=cos(2piFt+piP/180);
其中pi代表π。
例2如:幅度为A1、频率为F1,0点相位P1的sin函数和幅度为A2、频率为F2,0点相位P2的cos信号叠加,可以表示为:
S=A1sin(2piF1t+piP1/180)+A2cos(2piF2t+piP2/180);
有时候,fft分析的原始信号并非由标准函数生成的组合信号,而是由传感器、采集器等外设实时采集的信号,这就需要mathlab能够导入相关数据进行分析,此时可以用mathlab自带的数据导入功能:
也可以不导入,在m源文件中通过函数从外部文件加载数据。
例如:
(1)importdata 函数
importdata 允许加载各种数据的不同格式的文件。它具有多种形式,详见mathlab的help我的,最常用的就是:
A = importdata(filename)
将数据从文件名所表示的文件中加载到数组 A 中。
(2)xlsread函数
xlsread 是数学软件 MATLAB 中读取 Excel 文件中数据的一个函数。即从当前程序所在文件夹里,按照函数中的参数指定的范围,从单元格开始读取文件,返回数据,也有多种形式,常见的有:
(1)num = xlsread(‘filename’)
从当前文件夹读取,比如说num=xlsread(‘data.xls’),即从当前程序所在文件夹里读取data.xls文件,把数据返回给num,数据从A1单元格开始读取。
(2)num = xlsread(‘filename’,‘sheet1’)
从当前文件夹读取filename文件的’sheet1’读取数据。
(3)num = xlsread(‘filename’, ‘range’)
从当前文件夹读取filename文件的中range范围内的单元格数据,比如说range=‘A1:A8’。
(4)num = xlsread(‘filename’, ‘sheet1’, ‘range’)
从当前文件夹读取filename文件的’sheet1’读取指定范围的数据
mathlab中,dlmwrite功能是将矩阵写入ASCII分隔的文件中,使用方法
1.dlmwrite(filename, M)
使用默认的分隔符(')将矩阵M写入ASCII格式的文件filname中,数据是从第一行的第一列开始写的。
2.dlmwrite(filename, M, 'D') matabc
将矩阵M写入一个ASCII格式的文件filename中,使用分隔符D来分割矩阵的元素。在目标文件filname中,数据是从第一行的第一列开始写的。逗号’是默认的分隔符,使用\t来产生制表符分割的文件。
举例如下:
dlmwrite(‘d:\data.txt’,A,‘delimiter’,‘\n’,‘newline’,‘pc’)
M的属性包括:
3.dlmwrite(filename, M, 'D', R, C)
将矩阵M写入一个ASCII格式的文件filename中,使用分隔符D来分割矩阵的元素。在目标文件filname中,数据是从第R行的第C列开始写的。
clc;
x = xlsread(‘fftdata.xlsx’); %load 数据
fs=12000; % 采样频率,自己根据实际情况设置
N=length(x); % x 是待分析的数据
n=1:N;
figure(1)
plot(n,x) %输出原始波形数据
%FFT 变换
X=fft(x,N); % FFT
dlmwrite(‘d:\work\outdata256.txt’,X,‘delimiter’,‘\n’,‘newline’,‘pc’) %输出数据
figure(2)
plot(n,X) %输出图形