% FMin, FMax - bound of transmission channel % F - carrier frequency % B - baud rate % N - samples per FMax % bits - transmission data function samples = modulation_qpsk(FMin, FMax, F, B, N, bits) % samples per baud k = ceil(FMax * N / B); % convers bits to QPSK symbols symbols = bits_to_symbols_qpsk(bits); % samples up - shift spectrum symbols = symbols_up(symbols, k); % shaping filter symbols = nyquist_filter(symbols, k, 4, 0.5); % show symbols spectrum if 0 spectrum = abs(fft(symbols)); spectrum = dB(spectrum, max(spectrum)); spectrum = circshift(spectrum, floor(length(spectrum) / 2)); hold on; plot(linspace(-pi(), pi(), length(spectrum)), spectrum) hold off; end % QAM modulation t = linspace(0, length(symbols), length(symbols)); p = 2 * pi() * (t / (FMax * N)) * F; %samples = real(symbols.') .* cos(p) + imag(symbols.') .* sin(p); ñ = symbols.' .* exp(complex(0, -p)); samples = real(ñ); hold on; if 1 % show modulation samples % plot(real(symbols)); % plot(imag(symbols)); plot(samples); wavplay(samples, FMax * N); else %add MAX and MIN frequences %samples = samples + cos(2 * pi() * (t / (FMax * N)) * FMin); %samples = samples + cos(2 * pi() * (t / (FMax * N)) * FMax); % show modulation spectrum spectrum = abs(fft(samples)); spectrum = dB(spectrum, max(spectrum)); spectrum = circshift(spectrum.', floor(length(spectrum) / 2)); plot(linspace(-pi(), pi(), length(spectrum)), spectrum); end hold off;