永发信息网

matlab利用希尔伯特变换做SSB调制时的问题

答案:2  悬赏:50  手机版
解决时间 2021-01-27 21:34
  • 提问者网友:感性作祟
  • 2021-01-27 18:30
t=1000e-6; % 信号的时间长度, 单位s
fs=60e6; % 采样频率,单位Hz

ts=1/fs;

fc=17.5e6; % 线性调频信号的起始频率
f0=20e6; % 本振信号的中心频率

B=5e6; % 调频带宽

ft=0:1/fs*200:t-1/fs; % 时间序列步长
N=length(ft);
k=B/fs*2*pi/max(ft); % modulate 函数产生
y=modulate(ft,fc,fs,'fm',k);
y_fft_result=fft(y);
figure,subplot(2,1,1),plot(ft,y),xlabel('t(单位:秒)'),ylabel('y(单位:伏)'),title('线性调频信号y(t)');
subplot(2,1,2),plot((0:fs/N:fs/2-fs/N),10*log(abs(y_fft_result(1:N/2)))),xlabel('频率f(单位:Hz)'),title('线性调频信号y(t)的频谱');
figure(3);
c1=cos(2*pi*fc*t);
c2=sin(2*pi*fc*t);
subplot(3,2,3);
u1=y(1:N).*c1(1:N)+imag(hilbert(y(1:N))).*c2(1:N);
plot(ft,u1);
title('下边带调制信号');
xlabel('t/s');
ylabel('幅度/v');
grid on;

报错说我u1这个函数有问题,出不了图像,这是怎么回事?

是说我u1这一行有错误,我不了解,怎么回事?
报错信息为:
??? Index exceeds matrix dimensions.
Error in ==>
u1=y(1:N).*c1(1:N)+imag(hilbert(y(1:N))).*c2(1:N);
最佳答案
  • 五星知识达人网友:野味小生
  • 2021-01-27 18:40
t不是一个向量,大哥,t=1000e-6; c1=cos(2*pi*fc*t);c1就是一个数值了,后面的 .*c1(1:N) 是啥意思?
当然会说矩阵不平衡了
应该改成:u1=y(1:N)*c1+imag(hilbert(y(1:N)))*c2;
如果你要表达的是向量点乘,那就要把t先linspace一下
t1=linspace(0,t,N)
然后: c1=cos(2*pi*fc*t1);
c2也一样
然后就可以了
全部回答
  • 1楼网友:廢物販賣機
  • 2021-01-27 19:05
你的矩阵下标超限了。 u1=y(1:n).*c1(1:n)+imag(hilbert(y(1:n))).*c2(1:n); 你这句是想画出y中1-n点的图像么??
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯