MATLAB信号与系统分析(五)——连续时间信号的频谱分析
一、实验目的:
1、掌握傅立叶级数(FS),学会分析连续时间周期信号的频谱分析及MATLAB实现;
2、掌握傅立叶变换(FT),了解傅立叶变换的性质以及MATLAB实现。
二、利用符号运算求傅里叶级数的系数
1、复习几个函数:
F1=int(f,v,a,b) — 对f表达式的v变量在(a,b)区间求定积分
F2=subs(s,OLD,NEW)-用新变量NEW代替S中的指定变量OLD。
F3=vpa(x,n) : 显示可变精度计算;x为符号变量,n表示要精确计算的位数。
2、周期函数的傅里叶级数的形式
3、利用符号运算求傅立叶级数的系数
代码抄袭如下:
%ex_1
%求系数
clear all; syms t x n t0;
T=10; % 信号周期
tao_2=0.5; %脉冲宽度
Nf=7; % 分解的最高级数
Nn=6; % 有效位数 x=heaviside(t+t0)-heaviside(t-t0); % 注意:Ver 2011b
x=subs(x,t0,tao_2) A0=int(x,t,-tao_2,T-tao_2)/T % a0 As=int(x*2*cos(2*pi*n*t/T)/T,t,-tao_2,T-tao_2) % an Bs=int(x*2*sin(2*pi*n*t/T)/T,t,-tao_2,T-tao_2) % bn Fn=(As-j*Bs)/2 % fn A(1)=double(vpa(A0,Nn)); % 直流分量
for k=1:Nf
A(k+1)=double(vpa(subs(As,n,k),Nn));
B(k+1)=double(vpa(subs(Bs,n,k),Nn));
end
A
B
%求各次谐波::开始采用数值处理方法
t1=-T/2:0.01:T/2;
f0=A(1); %直流分量
f1=A(2).*cos(2*pi*1*t1/T)+B(2).*sin(2*pi*1*t1/T); ; % 基波
f2=A(3).*cos(2*pi*2*t1/T)+B(3).*sin(2*pi*2*t1/T); ; % 2次谐波
f3=A(4).*cos(2*pi*3*t1/T)+B(4).*sin(2*pi*3*t1/T); % 3次谐波
f4=A(5).*cos(2*pi*4*t1/T)+B(5).*sin(2*pi*4*t1/T); ; % 4次谐波
f5=A(6).*cos(2*pi*5*t1/T)+B(6).*sin(2*pi*5*t1/T); % 5次谐波
f6=A(7).*cos(2*pi*6*t1/T)+B(7).*sin(2*pi*6*t1/T); % 6次谐波
f7=f1+f2+f0; % 基波+2次谐波
f8=f7+f3+f0; % 基波+2次谐波+3次谐波
f9=f8+f4+f6+f0; % 基波+2次谐波+3次谐波+4次谐波+6次谐波
%画出谐波图形
y=subs(x,t,t1); %调用连续时间函数-周期矩形脉冲
subplot(2,2,1),plot(t1,f1),hold on;plot(t1,y,'r:');title('周期矩形波的形成—基波'),axis([-2.5,2.5,-0.5,1.1])
subplot(2,2,2),plot(t1,f7),hold on;plot(t1,y,'r:');title('周期矩形波的形成—基波+2次谐波'),axis([-2.5,2.5,-0.5,1.1])
subplot(2,2,3),plot(t1,f8),hold on;plot(t1,y,'r:');title('基波+2次谐波+3次谐波'),axis([-2.5,2.5,-0.5,1.1])
subplot(2,2,4),plot(t1,f9),hold on;plot(t1,y,'r:');title('基波+2次谐波+3次谐波+4次谐波+6次谐波'),axis([-2.5,2.5,-0.5,1.1]) %求频谱---------------这边给出双边谱的正轴部分,仅供参考
Fn=(As-j*Bs)/2
Nf=60;
A(1)=double(vpa(A0,Nn));
for k=1:Nf
A(k+1)=double(vpa(subs(As,n,k),Nn));
B(k+1)=double(vpa(subs(Bs,n,k),Nn));
end
Fn1(1) = A(1);
Fn1(2:Nf+1)=(A(2:Nf+1)-j*B(2:Nf+1))/2;
absFn1 = abs(Fn1);
angleFn1 = angle(Fn1);
figure;
subplot(211);stem([0:Nf],absFn1,'r.');title('双边幅度谱的正半轴,注意与p200图比较幅度值')
subplot(212);stem([0:Nf],angleFn1,'r.');title('双边相位谱的正半轴')
注意:课件里的基波定义有误,不应该含有直流分量
% 例9_1
% 观察周期方波信号的分解与合成
% m:傅里叶级数展开的项数
clc;clear all;close all; display('Please input the value of m (傅里叶级数展开的项数)'); % 在命令窗口显示提示信息
m = input('m = '); % 键盘输入傅里叶级数展开的项数
t = -2*pi:0.01:2*pi; % 时域波形的时间范围-2π~2π,采样间隔0.01
n = round(length(t)/4); % 根据周期方波信号的周期,计算1/2周期的数据点数
f = [ones(n,1);-1*ones(n,1);ones(n,1);-1*ones(n+1,1)]; %构造周期方波信号
y = zeros(m+1,max(size(t)));
y(m+1,:) = f';
figure(1);
plot(t/pi,y(m+1,:)); %绘制方波信号
grid; %在图形中加入栅格
axis([-2 2 -1.5 1.5]); %指定图形显示的横坐标范围和纵坐标范围
title('周期方波'); %给显示的图形加上标题
xlabel('单位pi','Fontsize', 8); %显示横坐标单位
x = zeros(size(t));
kk = '1';
for k=1:2:2*m-1 %循环显示谐波叠加图形
pause;
x = x+sin(k*t)/k;
y((k+1)/2,:) = 4/pi*x; %计算各次谐波叠加和
plot(t/pi,y(m+1,:));
hold on;
plot(t/pi,y((k+1)/2,:)); %绘制谐波叠加信号
hold off;
grid;
axis([-2 2 -1.5 1.5]);
title(strcat('第',kk,'次谐波叠加'));
xlabel('单位pi','Fontsize', 8);
kk = strcat(kk,'、',num2str(k+2));
end
pause;
plot(t/pi,y(1:m+1,:));
grid;
axis([-2 2 -1.5 1.5]);
title('各次谐波叠加波形');
xlabel('单位pi','Fontsize', 8);
% End
4、周期信号的频谱分析:
%ex_3求频谱
clear all;syms t x n t0;
T=5;tao=0.5;Nf=60;Nn=6;
x=heaviside(t+t0)-heaviside(t-t0)
x=subs(x,t0,tao)
A0=int(x,t,-tao,T-tao)/T
As=int(x*2*cos(2*pi*n*t/T)/T,t,-tao,T-tao)
Bs=int(x*2*sin(2*pi*n*t/T)/T,t,-tao,T-tao)
Fn=(As-j*Bs)/2
A(1)=double(vpa(A0,Nn));
for k=1:Nf
A(k+1)=double(vpa(subs(As,n,k),Nn));
B(k+1)=double(vpa(subs(Bs,n,k),Nn));
end
t1=-2.5:0.003:2.5;
y=subs(x,t,t1);
subplot(3,1,1),plot(t1,y),title('矩形脉冲'),axis([-2.5,2.5,-0.1,1.1])
%单边谱
Fs(1)=A(1);
Fs(2:Nf+1)=abs(A(2:Nf+1)-j.*B(2:Nf+1));
Ns=0:Nf;
subplot(3,1,2),stem(Ns,Fs),title('连续时间函数的单边谱')
%双边谱
N=Nf*2*pi/T;
K=-N:2*pi/T:N;
Fs(2:Nf+1)=abs(A(2:Nf+1)-j.*B(2:Nf+1))/2;
Fd=[fliplr(Fs),Fs(2:Nf+1)];
subplot(3,1,3),stem(K,Fd),title('连续时间函数的双边谱')
5、利用MATLAB实现典型周期信号的频谱
(1)周期方波脉冲频谱的Matlab实现
% 周期方波信号频谱分析
function CTFS_SQ
% 绘制并观察周期方波信号频谱
% Nf:傅里叶级数展开的项数
% an:各次谐波余弦项系数
display('Please input the value of Nf ');
Nf = input('Nf = ');
an = zeros(Nf+1,1);
cn(1) = 0;
for i = 1:Nf
an(i+1) = 2/(i*pi)*sin(i*pi/2); %计算系数an
cn(i+1) = abs(2/(i*pi)*sin(i*pi/2)); %计算幅度谱
end
t = -5:0.01:5;
x = square(pi*(t+0.5)); %用square函数求方波信号
subplot(211);
plot(t,x); %绘制方波信号
axis([-5 5 -1.5 1.5]);
title('周期方波信号','Fontsize',8);
xlabel('t (单位:s)', 'Fontsize',8);
subplot(212);
k = 0:Nf;
stem(k,cn);
hold on;
plot(k,cn);
title('幅度频谱','Fontsize',8);
xlabel('谐波次数', 'Fontsize',8);
% End
(2)周期锯齿波脉冲频谱的Matlab实现
% 周期锯齿脉冲信号频谱分析
function CTFS_JC
% 绘制并观察周期锯齿脉冲信号频谱特性
% Nf:谐波的次数
% bn:第1,2,3,...次谐波正弦项系数
display('Please input the value of Nf ');
Nf = input('Nf = ');
bn = zeros(Nf+1,1);
cn = zeros(Nf+1,1);
bn(1) = 0;
for i = 1:Nf
bn(i+1) = (-1)^(i+1)*1/(i*pi); % 计算系数bn
cn(i+1) = abs(bn(i+1)); %计算幅度频谱
end
t = -5:0.01:5;
x = sawtooth(pi*(t+1)); %用sawtooth函数构造周期锯齿脉冲信号
subplot(211);
plot(t,x);
axis([-5 5 -1.5 1.5]);
title('周期锯齿脉冲信号','Fontsize',8);
xlabel('t (单位:s)', 'Fontsize',8);
subplot(212);
k = 0:Nf;
stem(k,cn);
hold on;
plot(k,cn);
title('幅度频谱','Fontsize',8);
xlabel('谐波次数', 'Fontsize',8);
% End
(3)周期三角波脉冲频谱的Matlab实现
% 周期三角脉冲信号频谱分析
function CTFS_SJ
% 绘制周期三角脉冲信号频谱
% Nf:谐波的次数
% an:第1,2,3,...次谐波余弦项系数
display('Please input the value of Nf ');
Nf = input('Nf = ');
an = zeros(Nf+1,1);
cn = zeros(Nf+1,1);
an(1) = 1/2;
an(1) = an(1);
for i = 1:Nf
an(i+1) = 4*sin(i*pi/2)*sin(i*pi/2)/(i*i*pi*pi);
cn(i+1) = abs(an(i+1));
end
t = -5:0.01:5;
x = (sawtooth(pi*(t+1),0.5)+1)/2; %构造三角脉冲信号
subplot(211);
plot(t,x);
axis([-5 5 -1.5 1.5]);
title('周期三角脉冲信号','Fontsize',8);
xlabel('t (单位:s)', 'Fontsize',8);
subplot(212);
k = 0:Nf;
stem(k,cn);
hold on;
plot(k,cn);
title('幅度频谱','Fontsize',8);
xlabel('谐波次数', 'Fontsize',8);
% End
三、非周期函数的傅立叶变换
1、利用符号函数求傅立叶变换
傅立叶变换:F=fourier(f); F,f应为符号表达式
反傅立叶变换:f=ifourier(F);
2、连续时间信号傅立叶变换的数值计算
代码实现
%ex_4
clear all;
R=0.01;
t=-2:R:2;
f=Heaviside(t+1)-Heaviside(t-1);
W1=2*pi*5;
N=1000;k=-N:N;W=k*W1/N; F=f*exp(-j*t'*W)*R;
F_r=real(F);
figure(1)
subplot(2,1,1);plot(t,f);
xlabel('t');ylabel('f(t)');title('f(t)=u(t+1)-u(t-1)');
subplot(2,1,2);plot(W,F_r);
xlabel('w');ylabel('F(w)');title('f(t)的付氏变换F(w)');
F_A=abs(F);%幅频特性
F_P=angle(F);%相频特性
figure(2)
subplot(2,1,1),plot(W,F_A),xlabel('w');ylabel('abs(F(w))');title('f(t)幅频特性)');
subplot(2,1,2),plot(W,F_P),xlabel('w');ylabel('angle(F(w))');title('f(t)相频特性)');
MATLAB信号与系统分析(五)——连续时间信号的频谱分析的更多相关文章
- MATLAB信号与系统分析(一)——连续时间信号与系统的时域分析
一.连续时间信号的表示: 1.向量表示法: 在MATLAB中,是用连续信号在等时间间隔点的样值来近似表示连续信号,当取样时间间隔足够小时,这些离散的样值就能较好地近似出连续信号. 对于连续时间信号f( ...
- MATLAB信号与系统分析(三)——连续信号与系统的复频域分析及MATLAB实现
一.系统的拉普拉斯变换和反变换 1.MATLAB函数 F=laplace(f) %求拉氏变换 f=ilaplace(F) %求拉氏反变换 2.例子 clear all;clc;close all f= ...
- MATLAB实现连续周期信号的频谱分析(正余弦波信号举例)
关于MATLAB实现连续信号的频谱分析,以正余弦波信号频谱分析为例分析如下: 1.含有频率f ,2f和3f的正弦波叠加信号,即: 其中,f =500Hz.试采用Matlab仿真软件对该信号进行频谱分析 ...
- 张高兴的 .NET Core IoT 入门指南:(五)PWM 信号输出
什么是 PWM 在解释 PWM 之前首先来了解一下电路中信号的概念,其中包括模拟信号和数字信号.模拟信号是一种连续的信号,与连续函数类似,在图形上表现为一条不间断的连续曲线.数字信号为只能取有限个数值 ...
- linux系统编程之信号(五):信号集操作函数,信号阻塞与未决
一,信号集及相关操作函数 信号集被定义为一种数据类型: typedef struct { unsigned long sig[_NSIG_WORDS]: } sigset_t 信号集用来描述信号的集合 ...
- Linux 信号详解五(信号阻塞,信号未决)
信号在内核中的表示 执行信号的处理动作成为信号递达(Delivery),信号从产生到递达之间的状态称为信号未决(Pending).进程可以选择阻塞(Block)某个信号. 被阻塞的信号产生时将保持在未 ...
- APUE 3 -- 信号 (signal)<II>: 可靠信号
一个事件可以事一个信号发送给一个进程,这个事件可以是硬件异常,可以是软件条件触发,可以是终端产生信号,也可以是一个kill函数调用.当信号产生后,内核通常会在进程表中设置某种形式的标志(flag).我 ...
- sleep与信号唤醒的问题 & 内核对信号的处理方式 & udelay
http://www.cnblogs.com/charlesblc/p/6277848.html 注意,sleep是会被信号唤醒的. sleep函数:#include <unistd.h&g ...
- linux信号基本概念及如何产生信号
linux信号基本概念及如何产生信号 摘自:https://blog.csdn.net/summy_j/article/details/73199069 2017年06月14日 09:34:21 阅读 ...
随机推荐
- java本地方法如何调用其他程序函数,方法详解2
Java调用本地方法(JNI浅谈) (2006-11-27 14:55:36) 转载▼ 分类: Java类文章 本人在项目开发实践中的总结和体会 前段时间公司 ...
- windows中快速停掉占用某端口的进程的方法
在Windows操作系统中,我们在启动一个tomcat服务器时,经常会发现8080端口已经被占用的错误,而我们又不知道如何停止这个tomcat服务器. 本文将通过命令来强行终止这个已经运行的tomca ...
- Emmet插件使用方法总结
Emmet插件使用方法总结 在前端开发的过程中,一大部分的工作是写 HTML.CSS 代码.特别是手动编写 HTML 代码的时候,效率会特别低下,因为需要敲打很多尖括号,而且很多标签都需要闭合标签等. ...
- (ヒトコト)一个挺有趣的东西!作为一个动漫宅,游戏宅来说还是一个挺有趣的接口!banner上面就是
Hitokoto API 更新:2014.02.22 问题/反馈:api # hitokoto.us 数据获取:[ 数据获取 ] 调用举例:[ JavaScript + HTML (同步) ] [ J ...
- 第三方br查询工具害人不浅
第三方br查询工具害人不浅,查询的时候会大批量调用百度的数据库,为什么说是大批量查询呢? 首先是自己查询,心急的站长恨不得下一次刷新br时数值会有所提高,不是那么急的也会一天查一次或几天一次,记录网站 ...
- Stockbroker Grapevine(floyd)
Stockbroker Grapevine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 28231 Accepted: ...
- 解决win8下chrome浏览器打开提示没有注册类的方法
今天又把win8装回来了,继续装了个chrome浏览器,但是发现只能从安装的文件打开,从快捷方式或者快速启动栏都会提示没有注册类.找到一种解决的办法是删除注册表中的相关键值,具体如下: 1.打开注册表 ...
- [Effective JavaScript 笔记]第62条:在异步序列中使用嵌套或命名的回调函数
异步程序的操作顺序 61条讲述了异步API如何执行潜在的代价高昂的I/O操作,而不阻塞应用程序继续处理其他输入.理解异步程序的操作顺序刚开始有点混乱.例如,下面的代码会在打印"finishe ...
- [BZOJ4530][Bjoi2014]大融合 LCT + 启发式合并
[BZOJ4530][Bjoi2014]大融合 试题描述 小强要在N个孤立的星球上建立起一套通信系统.这套通信系统就是连接N个点的一个树. 这个树的边是一条一条添加上去的.在某个时刻,一条边的负载就是 ...
- Remove Nth Node From End of List
Given a linked list, remove the nth node from the end of list and return its head. Notice The minimu ...