matlab编程实现傅立叶变换
来源:百度知道 编辑:UC知道 时间:2024/06/15 13:13:05
我试着用fourier函数编写了一个程序:
syms t;
fourier(cos(t))
得到的结果是
ans =
pi*(dirac(w-1)+dirac(w+1)),这个式子怎么跟笔算得到的式子不一样呢?问题比较多,请各位达人帮帮忙啊!谢谢!!
还有一个问题:以matlab提供的cos函数的傅立叶变换pi*(dirac(w-1)+dirac(w+1))为基础,如果想得到这个变换的图形,写了以下程序实现:>> w=-5:001:5;
>> f=pi*(dirac(w-1)+dirac(w+1));
>> plot(f)
>> w=linspace(-100,100,10000);
>> plot(f)
怎么得到一个很奇怪的图形啊,为什么跟书上得到的不一样呢?
t=0:2.5e-6:5.0e-3 %时域点
y=2.0e7*sin(2*pi*25000*t) %正弦信号
yf=fft(y)%快速傅立叶变换
magf=abs(yf)*2/2001%幅值
fs=(0:2000)*400000/2001%频率
plot(fs,magf)%绘图
%%%%%%%%你的程序大大的有问题
你求的是正弦信号抽样序列的fft,首先要整周期采样,然后如果想求单边谱的话,fft后要乘以2/N,如果是双边谱的话除以N,另外fft点数最好是以2为基底的,这样才能突出fft的效率,给个典型程序你去自己看:
fs=1024; %采样频率
N=1024; %采样点数
t=(0:N-1)/fs; %采样时间序列s
f=30; %设置信号频率Hz
x=cos(2*pi*f*t); %生成信号
subplot(211);
plot(t,x);
xlabel('t/s');
xf=fft(x,N)/N;
xf=fftshift(xf); %双边复数谱
df=fs/N; %频率分辨率Hz
%绘制双边幅值谱
f=(-N/2:N/2-1)*df; %频域序列
subplot(212);
plot(f,abs(xf));
xlabel('f/Hz');
Matlab中FFT有1D和2D的,FFT得到的是信号的频谱即t-》f
如
clear
%编写骆遥
fs=1000
t=0:1/fs:0.6;
f1=100;
f2=300;
x=sin(2*pi*f1*t)+sin(2*pi*f2*t);
subplot(711)
plot(x);
title('f1(100Hz)\f2(300Hz)的正弦信号,初相0')
xlabe