BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / matlab / #10558同步于 2013/12/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖

如何画出矩形周期脉冲

zhurui
2013/12/23镜像同步11 回复
已知周期矩形脉冲信号周期为4,脉宽为1,求出傅里叶谱系数,并画出信号的双边频谱。 跪求答案 用了square(t,DUTY)函数,发现差距太大了,不太适合周期过大的函数,可是用rectpuls(t,w)只能产生一个单脉冲,不知道周期性的怎么写,捉摸了很久还是没弄出来,求大神指导呀
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
z2642x机器人#1 · 2013/12/24
可以自己写一个, 直接写的也没运行, 可能存在一些问题, 如果有问题再问吧.. 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)只能产生一个单脉冲,不知道周期性的怎么写,捉摸了很久还是没弄出来,求大神指导呀
z2642x机器人#2 · 2013/12/24
回来试了一下 发现有点小问题 不好意思 把df改成df = fs/(totalCycle*cycle*os);就行了 【 在 zhurui 的大作中提到: 】 : 已知周期矩形脉冲信号周期为4,脉宽为1,求出傅里叶谱系数,并画出信号的双边频谱。 : 跪求答案 : 用了square(t,DUTY)函数,发现差距太大了,不太适合周期过大的函数,可是用rectpuls(t,w)只能产生一个单脉冲,不知道周期性的怎么写,捉摸了很久还是没弄出来,求大神指导呀
zhurui机器人#3 · 2013/12/25
我想让函数在t的取值范围为-20~20区间内显示,可是这个貌似只能产生t>0的周期脉冲,还有,周期好像有点不对,周期是4,脉宽是1,那么就是在-2~2区间内,当t的绝对值小于0.5的时候为1,其余为0,这个该怎么改呢? 【 在 z2642x 的大作中提到: 】 : 可以自己写一个, 直接写的也没运行, 可能存在一些问题, 如果有问题再问吧.. : : : ...................
z2642x机器人#4 · 2013/12/25
只是时间坐标的调整问题 自行调整一下t和单周期信号的位置就可以了 【 在 zhurui 的大作中提到: 】 : 我想让函数在t的取值范围为-20~20区间内显示,可是这个貌似只能产生t>0的周期脉冲,还有,周期好像有点不对,周期是4,脉宽是1,那么就是在-2~2区间内,当t的绝对值小于0.5的时候为1,其余为0,这个该怎么改呢?
zhurui机器人#5 · 2013/12/28
我发现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和单周期信号的位置就可以了
z2642x机器人#6 · 2013/12/28
没查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;
zhurui机器人#7 · 2013/12/28
⊙﹏⊙⊙﹏⊙⊙﹏⊙⊙﹏⊙,看到这个题快要晕了,真的好难呀! 【 在 z2642x 的大作中提到: 】 : 没查rectpuls是干什么用的 用我的稍微修改一下就可以了 : matlab的优势在于矩阵运算 能不用for循环就不用for循环 你这样效率非常低 : 我稍微按你的要求改了一下 不懂的函数请自行help理解 : ...................
zhurui机器人#8 · 2013/12/28
thank you,跪谢!!!大神呀!膜拜 【 在 z2642x 的大作中提到: 】 : 没查rectpuls是干什么用的 用我的稍微修改一下就可以了 : matlab的优势在于矩阵运算 能不用for循环就不用for循环 你这样效率非常低 : 我稍微按你的要求改了一下 不懂的函数请自行help理解 : ...................
iPenny机器人#9 · 2013/12/28
help commsrc.pattern help generate 【 在 zhurui 的大作中提到: 】 : 已知周期矩形脉冲信号周期为4,脉宽为1,求出傅里叶谱系数,并画出信号的双边频谱。 : 跪求答案 : 用了square(t,DUTY)函数,发现差距太大了,不太适合周期过大的函数,可是用rectpuls(t,w)只能产生一个单脉冲,不知道周期性的怎么写,捉摸了很久还是没弄出来,求大神指导呀