【发布时间】:2013-04-08 22:33:16
【问题描述】:
我正在设计一个项目,其中一个阵列通过quadrature amplitude modulation (QAM) 调制器,然后进行载波调制,使用sound() 命令使其可播放,然后将其解调回用于 QAM 解调。
首先,我使用了标准的QAM调制方式:
M = 16;
x = randint(5000, 1, M);
y = modulate(modem.qammod(M), x);
然后,我写了自己的载波调制函数:
function [out] = carriermodulation(x)
fs = 16000;
T = 1.0 / 4000;
fc = 8000;
Q = real(x);
I = imag(x);
t = 0:T:(size(x))*T;
C1 = zeros(size(x), 1);
C2 = zeros(size(x), 1);
for i = 1:size(x)
C1(i) = I(i)*sin(2*pi*(fc)*t(i));
C2(i) = Q(i)*sin(2*pi*fc*t(i) + pi/2);
end
out = C1 + C2;
目前没有问题。但是当我完成解调功能后,我发现结果与原始值不同(QAM 调制器输出)。
function [out] = carrierdemodulation(x)
fs = 16000;
T = 1.0 / 4000;
fc = 8000;
t = 0:T:(size(x))*T;
A1 = zeros( size(x), 1);
A2 = zeros( size(x), 1);
for i = 1:size(x)
A1(i) = x(i)*sin( 2*pi*(fc)*t(i));
A2(i) = x(i)*cos( 2*pi*(fc)*t(i));
end
A1 = sqrt(A1);
A2 = sqrt(A2);
out = A1 + A2;
我认为我的调制部分是正确的。我认为我唯一的问题是我没有用于解调的low-pass filter (LPF)。而且我不应该直接计算 A1 和 A2。如何将 LPF 添加到我的解调代码中,以使输出与原始代码相同?
【问题讨论】:
-
附带说明,您可以丢失 for 循环并利用 Matlab 的矢量化语法。这条单行
A1=x.*sin(2*pi*fc*t);将产生与整个循环相同的A1。 -
@Dan 感谢您的建议,这是我的第一个 matlab 程序
-
np,但是如果您希望获得有关低通滤波器的帮助,您需要尝试了解什么是低通滤波器以及如何设计一个低通滤波器。这里的人会帮助你编写代码,但他们不会为你编写代码。此外,如果您的问题是如何设计 LPF,您可能更想尝试 dsp.stackexchange...
标签: matlab signal-processing lowpass-filter