Phase shift keying demodulation
z = pskdemod(y,M)
z = pskdemod(y,M,ini_phase)
z = pskdemod(y,M,ini_phase,symbol_order)
z = pskdemod(y,M) demodulates
the complex envelope
y of a PSK modulated signal.
the alphabet size and must be an integer power of 2. The initial phase
of the modulation is zero. If
y is a matrix with
multiple rows and columns, the function processes the columns independently.
z = pskdemod(y,M,ini_phase) specifies
the initial phase of the modulation in radians.
z = pskdemod(y,M,ini_phase,symbol_order) specifies
how the function assigns binary words to corresponding integers. If
'bin' (default), the function uses a natural
binary-coded ordering. If
symbol_order is set to
it uses a Gray-coded ordering.
This example shows how to compare PSK and PAM to demonstrate that PSK is more sensitive to phase noise. This is the expected result because the PSK constellation is circular while the PAM constellation is linear.
len = 10000; % Number of symbols M = 16; % Modulation order msg = randi([0 M-1],len,1); % Original signal
Modulate using both PSK and PAM to compare the two methods.
txpsk = pskmod(msg,M); txpam = pammod(msg,M);
Perturb the phase of the modulated signals by applying a random phase rotation.
phasenoise = randn(len,1)*.015; rxpsk = txpsk.*exp(2i*pi*phasenoise); rxpam = txpam.*exp(2i*pi*phasenoise);
Create scatter plots of the received signals.
scatterplot(rxpsk); title('Noisy PSK Scatter Plot') scatterplot(rxpam); title('Noisy PAM Scatter Plot')
Demodulate the received signals.
recovpsk = pskdemod(rxpsk,M); recovpam = pamdemod(rxpam,M);
Compute number of symbol errors in each case. You can see that the number of errors for the PSK signal is much greater than the number of errors for the PAM signal.
numerrs_psk = symerr(msg,recovpsk); numerrs_pam = symerr(msg,recovpam); [numerrs_psk numerrs_pam]
ans = 343 1