用matlab进行fft(快速傅里叶)计算,怎么得到频谱图的复数形式?

vector(i) =tmp;

频谱本来就是复数啊。

matlab fft函数用法 matlab函数fft的用法matlab fft函数用法 matlab函数fft的用法


matlab fft函数用法 matlab函数fft的用法


说figure;的是:

fft后的结果需要除以N,才能得到双边谱的值,再乘以2得到单边谱。

用matlab编程,求解啊!

举个例子:在电力系统中计算谐波。电网频率是50Hz,一个周波就是20ms,设采样是一周波256个点,即采样率是fs = 25650 = 12800Hz,dt = 1/12800,采样点N = 256个(正好一个周期),则FFT的结果也是256个点,分别对应直流量,基波(50Hz),二次谐波(100Hz),三次谐波(150Hz),直到127次谐波;剩下的129个点是个特殊点,再剩下的127个点是跟1-127次共轭对称的值。

%题目要求用两种方法求解向量f的傅里叶变换

%方法一、使用Matlab的fft函数

f = [1 2 3 4 5 6 7 8]';

fft(f) %显示结果

f = [1 2 3 4 5 6 7 8]';

transform_matrix = dftmtx(8); %生成88的变换矩阵

transform_matrix f %相乘显示结果

=========================

两种方法的计算结果是一致的:

36.0F(ω) = ∫ f(t) e^(-iωt) dt000

-4.0000 + 9.6569i

-4.0000 + 4.0000i

-4.0000 + 1.6569i

-4.0000

-4.0000 - 1.6569i

-4.0000 - 9.6569i

求Matlab大神,问下fft做完以后如何写代码求得对应某个频率的幅值?

for i = 1 : N

你fft得到频谱时

得到了频率横坐标 freq

幅度纵坐标 plot(t, rect); title('矩形函数'); xlabel('时间 (s)'); ylabel('幅度'); mag

如果你要知道某个频率 f0 的幅值

mag0=mag(freq==f0);

mag0就是对应f0的幅度值

如果你的f0 不在freq里 (例如 freq=[ 1 2 3 4 5 ...],你的f0是2.5),那么就需要插值

mag0=interp1(freq,mag,f0);

你好,我要用matlab对x(t)=exp(-t)u(t)做FFT的频谱分析,程序应该如何写?

ylabel('振幅');title('N=1024');grid on;

>> n=0:15;

个人观点

>> x=exp(-n);

>> subplot(2,1,1);stem(n,x);

>> subplot(2,1,2);stem(n,abs(fft(x)));

请教高手:如何用Matlab自己编写基2的fft函数

%%变址运算

%======================================

% 频率向量

%ret_val 为fft变换后返回的频域序列

%N 为点数

%vector 为变换前的序列

%======================================

vector_size = size(vector);

N = vector_size(2);

c = zeros(1,N);

%j1 = 0;

if i < j1 + 1

tmp = vector(j1 + 1);

vector(j1 + 1) = vector(i);

while k <= j1

j1 = j1 - k;

k = k / 2;

j1 = j1 + k;

%%蝶形运算

%%%%%%%%计算 N 的

dig = 0;

while k > 1

dig = dig + 1;

k = k / 2;

%%%%%%

% m 为级; dist 为蝶形运两点的距离; n 为蝶形运算组数

%n = N / 2;

for m = 1 : dig

dist = 2 ^ (m - 1);

idx = 1;

for i = 1 : n

idx1 = idx;

for j1 = 1 : N / (2 n)

r = (idx - 1) 2 ^ (dig - m);

coef = exp(j (-2 pi r / N));

tmp = vector(idx);

vector(idx) = tmp + vector(idx + dist) coef;

vector(idx + dist) = tmp - vector(idx + dist) coef;

idx = idx + 1;

ret_val = vector;

MATLAB中fft的频率轴怎么计算

按时间抽取 我有

这个问题问得很不清楚,按我的理解可能是这样的:

fourier是符号函数,用于符号运算。例如:fourier(exp(-x^2),x,t)返回 pi^(1/2)exp(-1/4t^2)

H是一个向量(通常意义下应该是一串等时间采样的时间序列),设H的采样率为fs,即采样时间为dt = 1/fs,采样点为N,则总时长T = Ndt。对N点序列做FFT得到的频谱,其分布区间为[0, fs),而频谱点的间隔即为df = 1/T。根据Nyquist采样定理,其中只有[0,fs/2)有信息量,剩下一半是共轭对称的。所以这段话有两个重要的信息,采样频率fs决定了可分辨的频率范围是[0,fs/2),而采样的总时长决定了频域分辨率df

如果我的理解是对的,题主想问的是要把FFT的结果n个点画出来,其横轴应该怎么设置,那就是0:1/T : (n-1)/T,而纵轴一般是两个分别画:幅值和相角。

matlab 中怎样对矩阵进行fft

N=6000; fs=12000000; n=0:N-1; %-4.0000 - 4.0000i%%num为6000000个数据k = N;值; F=fft(num); f=n/Nfs; plot(f,abs(F));

a=[2 1 4 2;3 3 3 4;1 5 4 6;0 7 2 8]

b=fft(a)

向量的话直接fft,矩阵用fft2

Matlab 信号处理的FFT问题

Fs=1000;

FFT是DFT的快速算法,你看看DFT的公式,x(n)=1/N....,FFT的结果是X(k),你的这段程序 画的是X(k)的[模]的平方 再除以N,估计是能量谱吧。如果求信号的FFT,一般画幅度谱,即X(k)的;f=1000(0:512)/1024,主要是抽样频率=1000,对应的模拟频率=500,频谱图到500,而FFt的点数=1024点,对应模拟频率0~1000,所以只取一半。

end

如果做谱分析,应该是=pyy=abs(Y)T,T=0.001

pyy=Y.conj(Y)/1024 相当于你画出来的图是Y的归一化模值 即 相当于 abs(Y)/1024 f=1000(0:512)/1024 相当于图中横坐标的频率归一化 作出的图为Y的模值关于f的图

关于如何用matlab做傅里叶变换的问题

idx = idx1 + 2 dist;

不需要拟合 :

设抽样频率为Fs(Hz),信号点数为N,信号序列为x。

x=imread(‘’)

f = fftshift(fft(x));

w = linspace(-Fs/2, Fs/2, N);%频率坐标,单位Hz

plot(w,abs(f));

title('信号的频谱');

xlabel('频率(Hz)');

fs=10000;%采样频率

N=1000; %采样点数

n=0:N-1;

t=n/fs;

y=sin(2pit)+0.1sin(4pit)+0.01sin(8pit);

%给定信号

figure(1);

subplot(211);

plot(t,x);%绘出信号的时域波形

xxlabel('频率/Hz');label('时间/t');

ylabel('幅值');

title('信号的时域波形');

grid on;

y=fft(x,N);%进行fft变换

m=abs(y(1:N/2))2/N;%求信号的真实幅值

f=nfs/N; %进行对应的频率转换

subplot(212);

stem(f(1:N/2),m(1:N/2));%绘出频谱图

ylabel('幅值');

title('信号频谱图');

grid on;

MATLAB fft变换,横坐标为频率

m=0,1…M-1 n=0,1…N-1(3)

可以用自功率密度函数或互功率谱密度函数,给你一个自功率谱:

ylabel('振幅');title('N=1024');grid on;

>> fid=fopen(fni,'r')

>> sf=200

>>fno= ‘自功率谱密度 ‘

>> a=fscanf(fid,'%f',[2,inf])

>> status=fclose(fid)

>> x=a(1,:)

>> y=a(2,:)-a(1,:)

>> f=0:sf/nfft:sf/2-sf/nfft

>> w=hanning(nfft)

>> z=psd(y,nfft,sf,w,nfft/2)

>> nn=1:nfft/4

>> subplot(2,1,1)

>>plot(f(nn),abs(z(nn)))

>> xlabel('频率(Hz)')

>> ylabel('幅值(m^2/s^4)')

>> grid on

>>fid=fopen(fno,’w’)

>> for k=1:nfft/2

fprintf(fid,'%f%%%fn',f(k),abs(z(k)))

status=fclose(fid)