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. M is 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,symbol_order) specifies how the function assigns binary words to corresponding integers. If symbol_order is set to 'bin' (default), the function uses a natural binary-coded ordering. If symbol_order is set to 'gray', 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