返回信息流已知周期矩形脉冲信号周期为4,脉宽为1,求出傅里叶谱系数,并画出信号的双边频谱。
跪求答案
用了square(t,DUTY)函数,发现差距太大了,不太适合周期过大的函数,可是用rectpuls(t,w)只能产生一个单脉冲,不知道周期性的怎么写,捉摸了很久还是没弄出来,求大神指导呀
这是一条镜像帖。来源:北邮人论坛 / matlab / #10558同步于 2013/12/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖
如何画出矩形周期脉冲
zhurui
2013/12/23镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
可以自己写一个, 直接写的也没运行, 可能存在一些问题, 如果有问题再问吧..
os = 16; % 每bit抽样点数
pulseWidth = 1; % 脉冲bit数
cycle = 4 * pulseWidth; % 周期bit数
fb = 1e3; % 码元速率
fs = fb * os; % 抽样点速率
totalCycle = 100; % 总周期数
% 生成totalCycle个周期的矩形脉冲
singleCycleSig = [ones(1,pulseWidth*os) zeros(1,(cycle-pulseWidth)*os)];
cycleSig = repmat(singleCycleSig, 1, totalCycle);
t = (0 : totalCycle*cycle*os-1)/fs;
figure;
plot(t, cycleSig);xlabel('时间/s');ylabel('幅值');grid on;
% 计算频谱
sigSpectrum = fftshift(abs(fft(cycleSig)));
df = 1/(totalCycle*cycle*os);
f = -fs/2 : df : fs/2-df;
figure;
plot(f, sigSpectrum);xlabel('频率/Hz');ylabel('幅值');grid on;
【 在 zhurui 的大作中提到: 】
: 已知周期矩形脉冲信号周期为4,脉宽为1,求出傅里叶谱系数,并画出信号的双边频谱。
: 跪求答案
: 用了square(t,DUTY)函数,发现差距太大了,不太适合周期过大的函数,可是用rectpuls(t,w)只能产生一个单脉冲,不知道周期性的怎么写,捉摸了很久还是没弄出来,求大神指导呀
回来试了一下 发现有点小问题 不好意思
把df改成df = fs/(totalCycle*cycle*os);就行了
【 在 zhurui 的大作中提到: 】
: 已知周期矩形脉冲信号周期为4,脉宽为1,求出傅里叶谱系数,并画出信号的双边频谱。
: 跪求答案
: 用了square(t,DUTY)函数,发现差距太大了,不太适合周期过大的函数,可是用rectpuls(t,w)只能产生一个单脉冲,不知道周期性的怎么写,捉摸了很久还是没弄出来,求大神指导呀
我想让函数在t的取值范围为-20~20区间内显示,可是这个貌似只能产生t>0的周期脉冲,还有,周期好像有点不对,周期是4,脉宽是1,那么就是在-2~2区间内,当t的绝对值小于0.5的时候为1,其余为0,这个该怎么改呢?
【 在 z2642x 的大作中提到: 】
: 可以自己写一个, 直接写的也没运行, 可能存在一些问题, 如果有问题再问吧..
:
:
: ...................
只是时间坐标的调整问题 自行调整一下t和单周期信号的位置就可以了
【 在 zhurui 的大作中提到: 】
: 我想让函数在t的取值范围为-20~20区间内显示,可是这个貌似只能产生t>0的周期脉冲,还有,周期好像有点不对,周期是4,脉宽是1,那么就是在-2~2区间内,当t的绝对值小于0.5的时候为1,其余为0,这个该怎么改呢?
我发现repmat函数好像是一个和数组有关的东西,不会改,所以我用了rectpuls函数,将周期脉冲的值放在一个数组MX里,怎么样让画出来的是矩形脉冲呢?
clear all;close all;
w=1;
T=4;
p=0.001;
N1=20;
MX=[];
for m=-N1:N1
for t=m*T-T/2:p:(m+1)*T-T/2
x=rectpuls(t-m*T,w);
MX=[MX,x];
end;
end;
for t=-N1*T-T/2:p:(N1+1)*T-T/2 %这里我是想把数组的值赋给函数,可是老是报错
%v=ceil((t+N1*T+T/2)/p);
%x=MX(1,v);
end
figure(1);
plot(MX);
【 在 z2642x 的大作中提到: 】
: 只是时间坐标的调整问题 自行调整一下t和单周期信号的位置就可以了
没查rectpuls是干什么用的 用我的稍微修改一下就可以了
matlab的优势在于矩阵运算 能不用for循环就不用for循环 你这样效率非常低
我稍微按你的要求改了一下 不懂的函数请自行help理解
clear all;
close all;
clc;
os = 16; % 每bit抽样点数
pulseWidth = 1; % 脉冲bit数
cycle = 4 * pulseWidth; % 周期bit数
fb = 1; % 码元速率
fs = fb * os; % 抽样点速率
tmin = -20; % 时间最小值
tmax = 20; % 时间最大值
t = tmin : 1/fs : tmax-1/fs; % 时间坐标
totalCycle = floor((tmax-tmin+1)/(cycle*fb)); % 总周期数
% 生成totalCycle个周期的矩形脉冲
singleCycleSig = [ones(1,pulseWidth/2*os), zeros(1,(cycle-pulseWidth)*os), ones(1,pulseWidth/2*os)]; % 单周期波形
sigPos = ones(1, totalCycle); % 脉冲位置
cycleSig = kron(sigPos, singleCycleSig); % 周期脉冲信号
figure;
plot(t, cycleSig);xlabel('时间/s');ylabel('幅值');grid on;axis([tmin tmax -0.2 1.2]);
% 计算频谱
sigSpectrum = fftshift(abs(fft(cycleSig)));
df = fs/(totalCycle*cycle*os);
f = -fs/2 : df : fs/2-df;
figure;
plot(f, sigSpectrum);xlabel('频率/Hz');ylabel('幅值');grid on;
⊙﹏⊙⊙﹏⊙⊙﹏⊙⊙﹏⊙,看到这个题快要晕了,真的好难呀!
【 在 z2642x 的大作中提到: 】
: 没查rectpuls是干什么用的 用我的稍微修改一下就可以了
: matlab的优势在于矩阵运算 能不用for循环就不用for循环 你这样效率非常低
: 我稍微按你的要求改了一下 不懂的函数请自行help理解
: ...................
thank you,跪谢!!!大神呀!膜拜
【 在 z2642x 的大作中提到: 】
: 没查rectpuls是干什么用的 用我的稍微修改一下就可以了
: matlab的优势在于矩阵运算 能不用for循环就不用for循环 你这样效率非常低
: 我稍微按你的要求改了一下 不懂的函数请自行help理解
: ...................
help commsrc.pattern
help generate
【 在 zhurui 的大作中提到: 】
: 已知周期矩形脉冲信号周期为4,脉宽为1,求出傅里叶谱系数,并画出信号的双边频谱。
: 跪求答案
: 用了square(t,DUTY)函数,发现差距太大了,不太适合周期过大的函数,可是用rectpuls(t,w)只能产生一个单脉冲,不知道周期性的怎么写,捉摸了很久还是没弄出来,求大神指导呀