matlab编程实现傅立叶变换

来源:百度知道 编辑:UC知道 时间:2024/06/15 13:13:05
初次使用matlab进行傅立叶变换,请教各位高手怎么编程实现:以y=cos(2*pi*fc*t)为例,fc中c是下标。这个是书本上的一个例子,如果笔算的话,得到的傅立叶变换F=0.5[dirac(f-fc))+dirac(f+fc)]。请问在matlab中怎么编程能够得到这个cos函数的对应傅立叶变换?是用fft 还是用fourier?具体怎么编程?最后结果能得到跟笔算相同的结果吗,我的意思是在matlab中能显示0.5[dirac(f-fc))+dirac(f+fc)]这个结果吗?在matlab里可以不给fc赋值,而让其成为一个变量从而得到一个cos函数傅立叶变换的通式即0.5[dirac(f-fc))+dirac(f+fc)]吗?

我试着用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