我正在设计一个项目,其中一个阵列通过quadrature amplitude modulation(QAM)调制器,然后进行载波调制,使其可以与sound()命令一起使用,然后解调回到QAM解调。载波调制和解调中的低通滤波器
首先,我已经使用QAM调制的标准方式:到目前为止
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;
没有问题:
M = 16;
x = randint(5000, 1, M);
y = modulate(modem.qammod(M), x);
然后,我写我自己的载波调制功能。但是当我完成解调功能后,我发现结果与原始值(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 2013-04-09 11:03:27
@丹谢谢你的建议,这是我的第一个matlab程序 – 2013-04-09 13:09:55
np,但是如果你希望得到低通滤波器的帮助,你需要展示一些尝试去理解低通滤波器是什么以及如何方法设计一个。这里的人会帮助你使用代码,但他们不会为你编码。另外如果你的问题是如何设计LPF你可能想尝试dsp.stackexchange而不是... – Dan 2013-04-09 13:34:04