코 히어 런트 복조 후 수신기에서 저역 통과 필터가 필요합니다. 하지만 변조에도 문제가 있습니다. 귀하의 예에서, 기호 속도 Rs
은 각도 반송파 주파수 w_c
보다 적 으면 수신기에서 스펙트럼이 겹칠 수 있습니다. 결과적으로, 정보 신호의 재구성이 불가능할 것이다. Additionaly, 귀하의 예에서 fc * T = 2
. 즉, 사인 함수의 인수는 2pi의 정수배이므로 항상 0입니다.
대역폭이 w_g >= R/2
인 송신기에서 임펄스 셰이퍼 (저역 통과 필터로 구현 가능)가 필요합니다. 소위 Nyquist 로우 패스 여야합니다. 반송파 주파수는 w_c > w_g
을 만족해야합니다.
나는 임펄스 쉐이핑, 변조, 복조, 필터링 및 샘플링을 수행하여 전송 된 신호를 재구성 할 수있는 MATLAB 스크립트를 작성했습니다.
먼저 매개 변수를 정의하고 임의의 비트를 만들고 이미 수행 한대로 매핑을 수행합니다. 임펄스 쉐이핑에 대한 매우 간단한 임펄스 응답, 즉 직사각형 임펄스가 사용됩니다. 실제 세계에서는 여기에서 디지털 영역에서 아날로그 영역으로 갈 것입니다. 그러나 이것은 컴퓨터 모델이므로 샘플링 주파수가 f_s
인 별개의 신호로 아날로그 신호를 나타냅니다. 임펄스 셰이퍼는 각 샘플 L
번을 반복하기 때문에 간단합니다.
M = 16; % QAM order
fs = 16000; % Sampling frequency in Hz
Ts = 1/fs; % Sampling interval in s
fc = 1000; % Carrier frequency in Hz (must be < fs/2 and > fg)
Rs = 100; % Symbol rate
Ns = 20; % Number of symbols
x = randint(Ns, 1, M);
y = modulate(modem.qammod(M), x);
L = fs/Rs; % Oversampling factor
% Impulse shaping
y_a = reshape(repmat(y', L, 1), 1, length(y)*L);
변조. 위의 조건을 만족하는 반송파 주파수를 사용했습니다. 신호 대역폭보다 높으며 사용 된 샘플링 주파수로 표시 할 수 있습니다.
%% Modulation
I = real(y_a);
Q = imag(y_a);
t = 0 : Ts : (length(y_a) - 1) * Ts;
C1 = I .* sin(2*pi * fc * t);
C2 = Q .* cos(2*pi * fc * t);
s = C1 + C2;
Demodlation는
%% Demodulation
r_I = s .* sin(2*pi * fc * t);
r_Q = s .* -cos(2*pi * fc * t);
는 저역 통과 필터를 필요로 복조 후
2f_c
스펙트럼 지류 제거보기 쉽다. 필자는 MATLAB
FDATool을 사용하여 필터와 다음 코드의 일부를 생성했습니다. 기억하십시오 : 신호 대역폭은
Rs/2
이고 원하지 않는 종속은
2*fc - Rs/2
에서 시작됩니다.이것은
Fpass
과
Fstop
이있는 방법입니다. (이러한 요구 사항을 조금 긴장을 유용 할 수 있습니다.) 우리는 여전히 수신 된 신호를 샘플링 할 필요가 필터링 한 후
%% Filter
% Design filter with least-squares method
N = 50; % Order
Fpass = Rs/2; % Passband Frequency
Fstop = 2*fc - Rs/2; % Stopband Frequency
Wpass = 1; % Passband Weight
Wstop = 1; % Stopband Weight
% Calculate the coefficients using the FIRLS function.
b = firls(N, [0 Fpass Fstop fs/2]/(fs/2), [1 1 0 0], [Wpass Wstop]);
% Filtering
w_I = filter(b, 1, r_I);
w_Q = filter(b, 1, r_Q);
. 여기 그냥 다운 샘플링입니다. 필터 전환을 피하기 위해 L/2
의 위상 오프셋을 사용했습니다.
%% Sampling
u_I = downsample(w_I, L, L/2);
u_Q = downsample(w_Q, L, L/2);
마지막으로, 플롯 별자리 다이어그램과 좋은 16-QAM 별자리를 얻을 :
plot(u_I, u_Q, '.');
당신은 전체 코드 here를 찾을 수 있습니다.
귀하의 질문에 DSP과 MATLAB 프로그래밍에 관한 많은 주제가 있습니다. 나는 사방에 많은 세부 사항을 설명 할 수 없었다. 16-QAM 변조 및 복조에 대한 질문이있는 경우 스택 교환 사이트가 아마도 Signal Processing 일 것입니다.
부수적으로, for 루프를 잃어 버리고 Matlab의 벡터화 된 구문을 이용할 수 있습니다. 이 한 줄의 'A1 = x. * sin (2 * pi * fc * t);'는 전체 루프가하는 것과 같은 'A1'이됩니다. – Dan
@ Dan은 UR 조언을 주셔서 감사합니다, 이것은 내 첫 matlab 프로그램 –
np이지만, 저역 통과 필터에 대한 도움을 얻기를 원한다면, 저역 통과 필터가 무엇인지 이해하고 몇 가지 시도를 보여 주어야합니다 하나를 설계하는 접근법. 여기에있는 사람들은 코드를 사용하여 도움을 주지만 코드를 작성하지는 않습니다. 또한 귀하의 질문에 LPF를 설계하는 방법이라면 dsp.stackexchange를 시도해보십시오. – Dan