小作业 用matlab实现傅立叶变换

发布 2023-05-19 19:05:28 阅读 4707

习题:如图所示锯齿波信号,分别去一个周期的抽样数据,和五个周期的数据,,计算其傅立叶变换和。

锯齿波信号波形图。

编程如下:方法1:

计算单位锯齿波和五个周期波形的傅立叶变换

解法1:基本用循环实现数值的计算;对于5个周期锯齿波用内外循环来实现。

t1=1一个周期锯齿波。

n1=10000;

t1=linspace(0,t1-t1/n1,n1)';

f1=0*t1;

f1=1-2*t1;

omg=32*pi频率抽样区间。

k1=100频率抽样点数。

omg=linspace(-omg/2,omg/2-omg/k1,k1)';

x1=0*omg;

for k=1:k1求解五个周期函数的傅里叶变换系数。

for n=1:n1

x1(k)=x1(k)+t1/n1*f1(n)*exp(-j*omg(k)*t1(n));

endend

fs1=0*t1;

for n=1:n1通过傅里叶逆变换还原原函数。

for k=1:k1

fs1(n)=fs1(n)+omg/2/pi/k1*x1(k)*exp(j*omg(k)*t1(n));

endend

t2=5五个周期锯齿波。

n2=10000;

t2=linspace(0,t2-t2/n2,n2)';

f2=0*t2;

t3=linspace(0,t2/5-t2/n2,n2/5)';先定义一个周期内的锯齿波变量抽样值。

f3=0*t3初始化一个周期的函数抽样值。

f3=1-2*t3表示出一个周期内函数抽样值。

for s=0:4 %将一个周期锯齿波平移到五个周期,通过循环控制。

for a=1:n2/5

f2(2000*s+a)=f3(a);

endend将函数拓展表示为五个周期。

x2=0*omg;

for k=1:k1求解五个周期函数的傅里叶变换系数。

for n=1:n2

x2(k)=x2(k)+t2/n2*f2(n)*exp(-j*omg(k)*t2(n));

endend

fs2=0*t2;

for n=1:n1通过傅里叶逆变换还原原函数。

for k=1:k1

fs2(n)=fs2(n)+omg/2/pi/k1*x2(k)*exp(j*omg(k)*t2(n));

endend

figure;

subplot(2,2,1);

plot(omg,abs(x1),'r以幅度频谱画图。

xlabel('frequency'),ylabel('amplitude');

title('单个锯齿波的幅频曲线');

subplot(2,2,2);

plot(t1,fs1,'r');

xlabel('second(s)')ylabel('amplitude');

title('由频域还原时域函数');

subplot(2,2,3);

plot(omg,abs(x2),'r');

xlabel('frequency'),ylabel('amplitude');

title('五个周期锯齿波的幅频曲线');

subplot(2,2,4);

plot(t2,fs2,'r');

xlabel('second(s)')ylabel('amplitude');

title('由频域还原时域函数');

相关曲线:方法2:

计算单位锯齿波和五个周期波形的傅立叶变换

解法2:数值算法用矩阵实现,大大加快了运行速度;并且直接调用“sawtooth”生成5个周期的锯齿波。

t1=1单个周期时域范围

n1=10000时域抽样点数

t1=linspace(0,t1-t1/n1,n1生成抽样时间点。

f1=1-2*t1生成抽样函数值

omg=32*pi频域范围。

k1=100频域抽样点数。

omg=linspace(-omg/2,omg/2-omg/k1,k1)';生成抽样频率点。

x1=t1/n1*exp(-j*kron(omg,t1.')f1; %傅里叶正变换求解傅里叶系数。

fs1=omg/2/pi/k1*exp(j*kron(t1,omg.')x1; %傅里叶逆变换还原时域函数。

t2=5五个周期时域范围。

n2=10000时域抽样点数。

t2=linspace(0,t2-t2/n2,n2生成抽样时间点。

fs2=0*t2;

f2=sawtooth(t2*2*pi,0生成五个周期的锯齿波

x2=t2/n2*exp(-j*kron(omg,t2.')f2; %傅里叶正变换求解傅里叶系数。

fs2=fs2+omg/2/pi/k1*exp(j*kron(t2,omg.')x2; %傅里叶逆变换还原时域函数。

figure生成一个2*2矩阵子图。

subplot(2,2,1);

plot(omg,abs(x1),'r一个周期时的频谱图。

xlabel('frequency'),ylabel('amplitude')

title('单个锯齿周期幅频特性曲线');

subplot(2,2,2

plot(t1,fs1,'r还原的时域函数

xlabel('time'),ylabel('amplitude')

title('function after recovered');

subplot(2,2,3);

plot(omg,abs(x2),'r五个周期时的频谱图

xlabel('frequency'),ylabel('amplitude')

title('五个锯齿周期幅频特性曲线');

subplot(2,2,4);

plot(t2,fs2,'r还原的时域函数。

xlabel('time'),ylabel('function after recovered')

title('function after recovered');

经过本课程的学习,我们小组进一步对于matlab的数值算法有了自己的了解。很多数**算,可以类似地通过高级语言的方法实现,比如循环,可是这样花费的时间比较久,相应的**也比较长。matlab软件库函数中有很多基于矩阵算法,因此,将问题通过矩阵来实现,将大大缩短程序和运行时间。

基础函数MATLAB实现作业

第7组 1.利用matlab绘制典型离散时间序列的时域波形。1 单位阶跃序列 n 3 1 8 u zeros 1,3 ones 1,9 figure stem n,u xlabel n ylabel u n grid on title 单位阶跃序列 2 单位采样序列 n 3 1 8 y zeros ...

2019暑假建模培训Matlab小作业

1 matlab函数绘图。1 做出函数y t itsin t 在极坐标和直角坐标下的表示图。2 绘制z exp 0.1 i t 的复数图形。2 matlab编程。1 网上查找高斯插值算法和hermite插值算法的步骤,使用matlab编程实现这两个算法 要求定义为函数形式 2 已知某矩形温箱中3 5...

matlab作业

2011029170002王柳。a 一个问题的病态性如何,与求解它的算法有关系。错 b 无论问题是否病态,好的算法都会得到它好的近似解。错 c 计算中使用更高的精度,可以改善问题的病态性。错 d 用一个稳定的算法计算一个良态问题,一定会得到它好的近似解。对 e 浮点数在整个数轴上是均匀分布。错 f ...