【问题标题】:Matlab: How do I implement frequency shifting to a sinusoidal signal?Matlab:如何实现对正弦信号的频移?
【发布时间】:2022-11-25 09:13:48
【问题描述】:
  1. 创建一个您选择的正弦信号 x1(t),基本周期为 T1,a 您选择的正弦信号 x2(t),基本周期为 T2=2T1。
  2. 然后,创建信号 y1(t)=x1(t)+x2(t)。
  3. 之后,将您选择的频移 f0 应用于信号 y1(t),这将导致 在信号 y2(t) 中。
  4. 随后,对信号 y2(t) 进行滤波,以隔离低频 y2(t) 的一部分并使用您选择的滤波器移除高频部分。这 过滤的结果将是信号 y3(t)。
  5. 之后,对信号 y3(t) 应用频移 -f0,这将导致信号 y4(t)。
  6. 最后,将信号 y4(t) 与两个正弦信号 x1(t) 和 x2(t) 进行比较。

    我尝试使用 fftshift() 但我认为那不对。

【问题讨论】:

  • 您可以将信号乘以另一个正弦波 (f0) 来改变频率。 fftshift 用于重新排列 fft 的输出。
  • 所以我需要做的就是将它乘以另一个信号?我还被要求在信号通过低通滤波器后将其频移 -fo。
  • 我相信如果f0 的频移是x_f0 * y_t1,那么逆移是-x_f0 * y_t1。我会发布代码来解决这个小问题,但它对我来说就像家庭作业 ;-)。
  • @dmedine 感谢您的帮助。其实是一道练习题。但是,如果您可以发布解决方案,那将有很大帮助。

标签: matlab signals signal-processing frequency telecommunication


【解决方案1】:

这就是我想出的。如果您想查看低通滤波器,可以在 fvtool 中发表评论。我将单位保持在角频率而不是赫兹。

n = 1000;
t = linspace(0, 2*pi - (2*pi/n), n);
T = 50;
x_t1 = cos(T*t);
x_t2 = cos(2*T*t);
y_t1 = x_t1+x_t2;
f0 = 10;
x_f0 = cos(f0*t);
y_t2 = x_f0.*y_t1;
[b,a] = butter(4,T*2/(n/2), 'low');
% h = fvtool(b,a)
y_t3 = filter(b,a, y_t2);
y_t4 = y_t3.*-x_f0;
figure
subplot(2,2,1)
plot(t, y_t1);
legend('y_t1')
subplot(2,2,2)
plot(t, y_t2);
legend('y_t2')
subplot(2,2,3)
plot(t, y_t3);
legend('y_t3')
subplot(2,2,4)
plot(t, y_t4);
hold
plot(t, x_t1);
plot(t, x_t2);
legend('y_t4', 'x_t1', 'x_t2')

【讨论】:

    猜你喜欢
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多