我正在設計一個項目,其中一個陣列通過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