如果你只对[-0.5,0.5]之间的信号进行采样,那么你采的将会是常数1,这样做出的FFT应该是一个delta函数,也就是一个冲击,所以你应该采包括外边的值才能够反映出信号的特性。
matlab编写傅里叶变换函数 matlab傅里叶变换代码
matlab编写傅里叶变换函数 matlab傅里叶变换代码
这样结果没有任何问题,问题是你采样的值太少了,换句话说就是你采样的信号反映不出这是个门函数的特性来。
matlab里边是可以利用单边函数表示门函数的。你可以跑一下下边的程序,看一下门函数:
fx=heiside(x+0.5)-heiside(x-0.5);
ezplot(fx,[-1,1]);
而且matlab里边还有对符号表达式做傅里叶变换的函数fourier(),用法如下:
FX=fourier(fx);
ezplot(FX,[-30,30]);
title('fourier transformation of fx')
而如果你非想用fft做,就必须加大采样点数,尤其是门之外的部分,才能够完整的描述信号。
步,双击matlab软件图标,打开matlab软件,可以看到matlab软件的界面。
2/8
第二步,使用syms命令,创建四个符号变量a、b、c、x、t。
simulink如何提升仿真速度_想告别蜗牛效率_找速石科技
速石CAE仿真云计算平台,即算即用,无需IT基础,本地怎么作,上云就怎么作让流体力学/有限元分析效率翻倍。欢迎免费试用。
上海速石信息科技有..广告
3/8
第三步,使用符号变量a,创建代数式A,其中A=7sin(a)。
4/8
第四步,使用函数fourier(A,a,t),对代数式A进行傅里叶变换。得到的结果中diract(t-1)是狄拉克函数。
5/8
第五步,使用符号变量c,创建代数式B,其中A=3c^2。
6/8
第六步,使用函数fourier(B,c,t),对代数式B进行傅里叶变换。得到的结果中dirac(2,t)是对狄拉克函数的二阶导数。
7/8
第七步,使用符号变量x,创建代数式C,其中C=abs(4x)。
8/8
第八步,使用函数fourier(C,x,t),对代数式C进行傅里叶变换
matlab软件是一款科学计算软件,在工程和科学研究中应用广泛。这篇经验告诉你,如何使用matlab软件创建代数式,并对代数式进行傅里叶变换。
Fs = 128; % 采样频率
T = 1/Fs; % 采样时间
L = 256; % 信号长度
t = (0:L-1)T; % 时间
x = 5 + 7cos(2pi15t - 30pi/180) + 3cos(2pi40t - 90pi/180); %cos为底原始信号
y = x + randn(size(t)); %添加噪声
figure;
plot(t,y)
title('加噪声的信号')
xlabel('时间(s)')
N = 2^nextpow2(L); %采样点数,采样点数越大,分辨的频率越,N>=L,超出的部分信号补为0
Y = fft(y,N)/N2; %除以N乘以2才是真实幅值,N越大,幅值精度越高
f = Fs/N(0:1:N-1); %频率
A = abs(Y); %幅值
P = angle(Y); %相值
figure;
subplot(211);plot(f(1:N/2),A(1:N/2)); %函数fft返回值的数据结构具有对称性,因此我们只取前一半
title('幅值频谱')
xlabel('频率(Hz)')
ylabel('幅值')
subplot(212);plot(f(1:N/2),P(1:N/2));
title('相位谱频')
xlabel('频率(Hz)')
ylabel('相位')
x=sin(2pit); %任意输入一个函数
y=fft(x); %傅里叶变换函数
plot(abs(y)); %振幅频率
clear %清除内存
clc %清除命令窗口显示内容
x=0:1e-3:20; %以1e-3为单位间隔从0到20生成向量x的元素,离散取值
h=cos(2x).^2; %将题设赋值给变量h
w=0:1e-2:2; %区间[0,2]
y=w; %y赋初值
a=w; %a赋初值
j=sqrt(-1); %虚数单位
for i=1:length(w) %取得w的长度for循环从1开始到length(w)为止
g=(1/sqrt(2pi))trapz(x,h.exp(-jw(i)x));%求梯形数值积分
y(i)=abs(g); %求矢径
a(i)=angle(g); %求幅角
end
subplot(3,1,1), %在显示图像窗口中,将窗口划分为上下三块区域(3行1列),在第1个区域显示图像
plot(x,h) %以x为横坐标,以h为纵坐标画出的图形
title('h=(cos(2x))^2') %图名
subplot(3,1,2), %在显示图像窗口中,将窗口划分为上下三块区域(3行1列),在第2个区域显示图像
plot(w,y) %以w为横坐标,以g为纵坐标画出的图形
title('y=abs(g)') %图名
subplot(3,1,3), %在显示图像窗口中,将窗口划分为上下三块区域(3行1列),在第3个区域显示图像
plot(w,a) %以w为横坐标,以a为纵坐标画出的图形
title('a=angle(g)') %图名
很遗憾,都不是。(我不会叫你去看书的,^_^ 因为你看了我的回答后会自己会去看书的...)
FFT是一种快速算法,它是DFT(离散傅里叶变换)的快速算法而已。它并不是一种严格数学上的变换。(但是它有严格的数学定义和物理含义,这一点希望你能明白)你应当知道,用传统的傅里叶变换,由于其频域或者时域是连续的,用计算机是实现不了的。DFT的提出就是为了解决这个问题。(注意了,DFT,是工程上为了能够让计算机计算傅里叶变换而弄出一种概念,它是人为规定了一些内容下所导出的“傅里叶变换”,这种变换物理含义有,而且计算机也能接受)
你的意思是DTFT(离散时间傅里叶变换),它主要是用于离散时间序列的频域分析,它才是真正数学严格意义上的傅里叶变换!!虽然DTFT有着很高的理论价值,但是在实际应用中不便直接采纳。(呐,就如我上面说的那样,不适合计算机运算)
DFT处理结果会有一些偏,但是由于它具有一种快速算法——FFT,所以在各类数字信号处理应用中广泛采用。
——纯手工打出来的,建议你先弄明白这几个概念:DFS、DTFT、DFT,FFT。(这是基本功~~~~)
-----------
64位傅里叶变换是指在进行FFT运算时,将序列先扩展(一般是填零)到64位后再进行FFT运算,一般扩展都是2的幂次数,这是FFT算法所提倡的。
题目不明确,无法解答
用MATLAB进行傅里叶变换用fft()函数来变换,其逆变换用ifft()函数来变换。变换要求X为向量,而不是变量。
根据题主的代码应这样来处理。
>> t=-pi:pi/100:pi;
>> x=sin(2pit);
>> y=fft(x); %傅里叶变换
>> plot(abs(y))
x=ifft(y); %傅里叶逆变换
>> plot(t,x)
几种傅立叶变换的区别
Fourier Transform 通称,或者特征连续时间的Fourier变换
Continuous-Time Fourier Transform
涉及到积分
Discrete-Time Fourier Transform
通过一个序列(元素个数为无限多)求各个频率的振幅。
涉及到积分
Discrete Fourier Transform (Finite Fourier Transfor)
把一个有限个元素的序列变换成另一个具有同样元素个数的序列。
只涉及到求和
Fast Fourier Transform
巧妙的方法以更少的计算量来计算 DFT.
fs=1000;%设定采样频率
N=128
n=0:N-1;
t=n/fs;
f0=50;%设定正弦信号频率
%生成正弦信号
x=sin(2pif0t);
figure(1);
subplot(231);
plot(t,x);%作正弦信号的时域波形
xlabel('t');
ylabel('y');
title('正弦信号y=2pi10t时域波形');
grid;
%进行FFT变换并做频谱图
y=fft(x,N);%进行fft变换
mag=abs(y);%求幅值
f=(0:length(y)-1)'fs/length(y);%进行对应的频率转换
figure(1);
subplot(232);
stem(f,mag);%做频谱图
axis([0,100,0,80]);
xlabel('频率(Hz)');
ylabel('幅值');
title('正弦信号y=2pi100t幅频谱图N=128');
首先你的数据是通过函数获得还是源自其他测量,对于不同的数据来源,FFT会有一定的异。
直接fft(X) 就可以用的,X是个向量
版权声明:本文内容由互联。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发 836084111@qq.com 邮箱删除。