应用matlab的基础训练(1)—— 连续信号的波形频谱仿真

   对于连续信号可分为周期信号和非周期信号,常见的连续非周期信号有双边指数函数、单边指数函数、矩形脉冲信号、钟形脉冲信号、符号函数、升余弦脉冲信号。常见的连续周期信号有正弦函数、余弦函数、方波、三角波。时域的周期性会使频谱是离散谱,而非周期性对应频域就是连续谱。下面我们可以明显看到两种类型信号谱的不同:

(1)连续非周期信号的时域表达式及幅度谱表达式

         1.双边指数函数 f=exp(-1*abs(t))、|F(w)|=\frac{2}{1+w^{2}}

         2.单边指数函数 f=exp(-1*t).*heaviside(t)、|F(w)|=\tfrac{}{}\tfrac{1}{({1+w^{2}})^{1/2}}

         3.矩形脉冲信号 f=3*ones(size(t)).*and(t>=-2,t<=2)、|F(w)|=12|Sa(2w)|

         4.钟形脉冲信号 f=5*exp(-(t/4).^2)、|F(w)|=20\sqrt{pi}*\small e^{-4w^{2}}

         5.符号函数 f=1*heaviside(t)-1*heaviside(-t)、|F(w)|=\small \frac{2}{|w|}

         6.升余弦脉冲信号 f=5/2*(1+cos(pi*t/4)).*((0<=abs(t))&(abs(t)<=4))、|F(w)|=\small \frac{10sa(4w)}{1-(\frac{4w}{pi})^{2}}

 (2) 连续周期信号的表达式和幅度谱特征

           1.正弦函数 f=5/2*sin(pi*t*4); 周期为1/2,在正半轴频率为2的时候会有冲击。

           2.余弦函数 f=5/2*cos(pi*t*4); 周期为1/2,在正半轴频率为2的时候会有冲击。

           3.方波 f=square(pi*t); 周期为2,傅里叶级数为奇次谐波,且幅度会逐渐减小,所以在频率为0.5、1.5 、2.5等均有周期为1的离散谱。

           4.三角波 f=sawtooth(0.5*pi*t,0.5); 周期为4,傅里叶级数同为奇次谐波,幅度以平方衰减,衰减更快,在频率为0.25、0.75 、1.25等均有周期为0.5的离散谱。

接下来让我们看看两种信号对应时域图和频谱图

 

典型连续时间非周期信号时域波形

 

典型连续时间非周期信号频谱

 

连续时间周期信号时域波形

 

连续时间周期信号频谱

思考总结:matlab编写程序时,不需要申明变量,使用起来很方便,上手起来也比其它软件更快速。在画时域图和频谱图的时候最重要的是一些函数的使用,例如阶跃函数heaviside,方波函数square,三角波函数sawtooth。在画频谱会用到fourier和fft。连续时间非周期信号的频谱是一个连续谱,而周期信号的频谱是一个离散谱,如果信号在时域集中于有限的范围,在频域中会无限延伸。

fourier是算符号表达式的傅里叶变换,fft是算有限长离散序列的离散傅里叶变换的。对于连续时间非周期信号用fourier函数,应用fourier函数画频谱时应注意自变量t的数据类型,先开始我将t定义为t=-10:0.1:10,编辑器报错,后来将t改为syms t,系统默认为double类型,编译成功,我觉得发生错误的主要原因还是fourier函数的使用不当,它是对连续的时间信号进行傅里叶变换,所以时间是要连续,如果是t=-10:0.1:10,时间的取值是离散的。而且当时我写双边指数函数等后面几个函数时用的都是分段函数写法,进行傅里叶变换的时候,这种表达式编译器不会执行,结果也会出错,使用abs heaviside 这些后才能编译成功。例如f=exp(1*t).*(t<0)+exp(-1*t).*(t>=0); 和改正后f=exp(-1*abs(t));

在对连续时间周期信号进行傅里叶变换时用fft,所以要确定采样间隔和频谱,根据奈奎斯特定理,采样频率大于信号频率的两倍。但对与fft的原理不是很了解,方波,三角波的主峰所在的频率点符合理论值,正余弦信号的冲击点处也符合理论值。

附代码如下:

%典型连续时间非周期信号时域波形

clc;

clear;

close all;

subplot(2,3,1);

t=-10:0.1:10;

f=exp(-1*abs(t));

plot(t,f);

xlabel('t');

ylabel('f');

title("双边指数函数");

subplot(2,3,2);

t=-10:0.1:10;

f=exp(-1*t).*heaviside(t);

plot(t,f);

xlabel('t');

ylabel('f');

title("单边指数函数");

subplot(2,3,3);

t=-10:0.1:10;

f=3*ones(size(t)).*and(t>=-2,t<=2);

plot(t,f);

xlabel('t');

ylabel('f');

title("矩形脉冲信号");

subplot(2,3,4);

t=-10:0.1:10;

f=5*exp(-(t/4).^2);

plot(t,f);

xlabel('t');

ylabel('f');

title("钟形脉冲信号");

axis([-10 10 0 4]);

subplot(2,3,5);

t=-10:0.1:10;

f=1*heaviside(t)-1*heaviside(-t);

plot(t,f);

xlabel('t');

ylabel('f');

axis([-5 5 -1.5 1.5]);

title("符号函数");

subplot(2,3,6);

t=-10:0.1:10;

f=5/2*(1+cos(pi*t/4)).*((0<=abs(t))&(abs(t)<=4));

plot(t,f);

xlabel('t');

ylabel('f');

title("升余弦脉冲信号");

%典型连续时间非周期信号频谱

clc;

clear;

close all;

syms t;

subplot(2,3,1);

f=exp(-1*abs(t));

F=fourier(f);

ezplot(F);

xlabel('w');

ylabel('F');

title("双边指数函数");

subplot(2,3,2);

f=exp(-1*t).*heaviside(t);

F=fourier(f);

ezplot(abs(F));

xlabel('w');

ylabel('F');

title("单边指数函数");

subplot(2,3,3);

f=3*(heaviside(t+2)-heaviside(t-2));

F=fourier(f);

ezplot(abs(F));

xlabel('w');

ylabel('F');

title("矩形脉冲信号");

subplot(2,3,4);

f=5*exp(-(t/4).^2);

F=fourier(f);

ezplot(abs(F));

xlabel('w');

ylabel('F');

title("钟形脉冲信号");

subplot(2,3,5);

f=1*heaviside(t)-1*heaviside(-t);

F=fourier(f);

ezplot(abs(F));

xlabel('w');

ylabel('F');

axis([-5 5 0 50]);

title("符号函数");

subplot(2,3,6);

f=5/2*(1+cos(pi*t/4)).*(heaviside(t+4)-heaviside(t-4));

F=fourier(f);

ezplot(abs(F));

xlabel('w');

ylabel('F');

axis([-5 5 0 22]);

title("升余弦脉冲信号");

%连续时间周期信号时域波形

clc;

clear;

close all;

subplot(2,2,1);

t=-10:0.1:10;

f=5/2*sin(pi*t*4);

plot(t,f);

xlabel('t');

ylabel('f');

title("正弦函数");

subplot(2,2,2);

t=-10:0.1:10;

f=5/2*cos(pi*t*4);

plot(t,f);

xlabel('t');

ylabel('f');

title("余弦函数");

subplot(2,2,3);

t=-10:0.01:10;

f=square(pi*t);

plot(t,f);

xlabel('t');

ylabel('f');

title("方波");

subplot(2,2,4);

t=-10:0.01:10;

axis([-2 2 -2 2]);

f=sawtooth(0.5*pi*t,0.5);

plot(t,f);

xlabel('t');

ylabel('f');

title("三角波");

%连续时间周期信号频谱

clc;

clear;

close all;

subplot(2,2,1);

t=-10:0.01:10;

f=5/2*sin(pi*t/4);

fs=100;

L = length(t);

n = 2^nextpow2(L);

Y = abs(fft(f,n));

f = fs*(0:(n/2))/n;

plot(f,Y(1:n/2+1)) ;

xlabel('w');

ylabel('F');

axis([-5 60 0 2000]);

title("正弦波");

subplot(2,2,2);

t=-10:0.01:10;

f=5/2*cos(pi*t/4);

fs=100;

L = length(t);

n = 2^nextpow2(L);

Y = abs(fft(f,n));

f = fs*(0:(n/2))/n;

plot(f,Y(1:n/2+1)) ;

xlabel('w');

ylabel('F');

axis([-5 60 0 2000]);

title("余弦波");

subplot(2,2,3);

t=-10:0.1:10;

f=square(pi*t);

fs=10;

L = length(t);

n = 2^nextpow2(L);

Y = abs(fft(f,n));

f = fs*(0:(n/2))/n;

plot(f,Y(1:n/2+1)) ;

xlabel('w');

ylabel('F');

title("方波");

subplot(2,2,4);

t=-10:0.1:10;

f=sawtooth(0.5*pi*t,0.5);

fs=10;

L = length(t);

n = 2^nextpow2(L);

Y = abs(fft(f,n));

f = fs*(0:(n/2))/n;

plot(f,Y(1:n/2+1)) ;

xlabel('w');

ylabel('F');

title("三角波");

  • 8
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要用MATLAB仿真FM信号频谱波形,可以按照以下步骤进行: 1. 首先,我们需要定义FM信号的基本参数,例如载波频率、调制频率和调制指数。可以使用MATLAB的变量来存储这些参数。 2. 接下来,可以使用MATLAB的`t`函数来生成对应的时间序列。例如,可以使用`0:0.01:1`来生成从0到1的时间序列,步长为0.01。这个时间序列用来确定信号的时间变化。 3. 然后,根据定义的信号参数和时间序列,可以使用MATLAB的三角函数函数生成FM信号波形。例如,可以使用`cos(2*pi*fc*t + kp*sin(2*pi*fm*t))`来生成FM信号波形,其中`fc`表示载波频率,`fm`表示调制频率,`kp`表示调制指数。 4. 接下来,可以使用MATLAB的FFT函数来计算FM信号频谱。首先,需要对FM信号进行采样,可以使用MATLAB的`Fs`函数来指定采样率。然后,可以使用MATLAB的FFT函数对采样后的信号进行傅里叶变换,得到信号频谱。 5. 最后,可以使用MATLAB的plot函数分别绘制FM信号波形频谱图。可以使用subplot函数来将波形频谱图放在同一个画布上,便于观察。 以上就是使用MATLAB仿真FM信号频谱波形的基本步骤。通过调整参数和函数,可以进一步优化仿真结果,并实现更复杂的信号处理。 ### 回答2: 要进行 MATLAB 仿真 FM 信号频谱波形,首先我们需要定义 FM 信号的调制指数和调制频率。调制指数 m 是指幅度变化与调制信号的频率变化之间的比例关系,而调制频率 f_m 是调制信号的频率。 假设我们选择调制指数 m=1 和调制频率 f_m=10Hz。我们可以通过以下步骤生成 FM 信号波形频谱: 1. 生成调制信号: t = 0:0.001:1; % 时间范围为 0 到 1 秒,每个采样点之间间隔 0.001 秒 modulating_signal = sin(2*pi*f_m*t); % 生成调制信号波形,使用正弦函数 2. 生成载波信号: carrier_frequency = 1000; % 载波频率为 1000 Hz carrier_signal = cos(2*pi*carrier_frequency*t); % 生成载波信号波形,使用余弦函数 3. 进行 FM 调制: frequency_deviation = m*f_m; % 计算频偏,频偏等于调制指数乘以调制频率 fm_signal = cos(2*pi*carrier_frequency*t + frequency_deviation*cos(2*pi*f_m*t)); % 生成 FM 信号波形 4. 绘制波形: subplot(2,1,1); % 创建一个 2 行 1 列的子图网格,并选择第一个子图 plot(t, fm_signal); % 绘制 FM 信号波形 title('FM信号波形'); % 添加图标题 5. 绘制频谱: subplot(2,1,2); % 选择子图网格的第二个子图 N = length(fm_signal); % 获取 FM 信号的长度 frequency_spectrum = abs(fftshift(fft(fm_signal, N))); % 计算 FFT 并进行频谱中心化处理 frequency_axis = linspace(-carrier_frequency, carrier_frequency, N); % 创建频谱的横坐标 plot(frequency_axis, frequency_spectrum); % 绘制频谱 title('FM信号频谱'); % 添加图标题 通过以上步骤,我们就可以在 MATLAB 中进行 FM 信号频谱波形仿真了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值