Phase shift keying is used to transmit digital data for instance on wireless LAN or RFID technology. The digital information is transmitted by shifting the phase of the carrier signal by a given angle.
see https://en.wikipedia.org/wiki/Phase-shift_keying
Phase-shift keying signal with 180° phase shift
Phase-shift keying signal with 270° phase shift
Phase-shift keying signal with 90° phase shift
![Psk](ImgDataPsk/Psk.jpg)
![Psk](ImgDataPsk/ImgPsk01.jpg)
For the bk components:
![Psk](ImgDataPsk/ImgPsk02.jpg)
as
![Psk](ImgDataPsk/ImgPsk03.jpg)
![Psk](ImgDataPsk/ImgPsk04.jpg)
and
![Psk](ImgDataPsk/ImgPsk05.jpg)
![Psk](ImgDataPsk/ImgPsk06.jpg)
![Psk](ImgDataPsk/ImgPsk07.jpg)
For the ak components
![Psk](ImgDataPsk/ImgPsk08.jpg)
![Psk](ImgDataPsk/ImgPsk09.jpg)
![Psk](ImgDataPsk/ImgPsk10.jpg)
(See ASK signal
![:-)](../Smileywink.gif)
Both put together:
![Psk](ImgDataPsk/ImgPsk11.jpg)
In code with ak as real parts and bk as imaginary parts:
private void Psk180(double peak, int n)
{
int
j;
c[0].real = 0;
for (j = 1; j < 500; j++)
{
}c[0].real = 0;
for (j = 1; j < 500; j++)
{
c[j].imag
= 0;
if ((n + j) % 2 == 0)
c[j].real = 0;
else
{
}if ((n + j) % 2 == 0)
c[j].real = 0;
else
{
if
(j != n)
c[j].real = peak / Math.PI * 4.0 * (double)n / ((double)n * (double)n - (double)j * (double)j);
else
c[j].real = 0;
}c[j].real = peak / Math.PI * 4.0 * (double)n / ((double)n * (double)n - (double)j * (double)j);
else
c[j].real = 0;
That creates for n=4 a spectrum like:
![Psk](ImgDataPsk/PskSpectrum.jpg)
The blue bars are the real elements and red the imaginary parts.
And if all the harmonics are put together, we get the origin signal shape.
![Psk](ImgDataPsk/Psk_harmonics.jpg)
The brightest line is the base frequency. The next darker is the base frequency plus the first harmonic, then comes the same plus the next harmonic … and so on. The more harmonics are included, the closer the shape approximates the origin shape
![:-)](../Smileywink.gif)
For a 270° phase shift I combine a sinus signal and a negative cosine signal:
![Psk](ImgDataPsk/Psk270.jpg)
![Psk](ImgDataPsk/ImgPsk12.jpg)
For the bk components
![Psk](ImgDataPsk/ImgPsk13.jpg)
From above
If k <> n
![Psk](ImgDataPsk/ImgPsk14.jpg)
And from the FSK calculations:
If k = n
![Psk](ImgDataPsk/ImgPsk141.jpg)
If k <> n
![Psk](ImgDataPsk/ImgPsk15.jpg)
That means
If k = n
![Psk](ImgDataPsk/ImgPsk16.jpg)
If k <> n and k is odd
![Psk](ImgDataPsk/ImgPsk17.jpg)
Else bk = 0
For the ak components
![Psk](ImgDataPsk/ImgPsk18.jpg)
If k <> n
![Psk](ImgDataPsk/ImgPsk19.jpg)
From the FSK calculations:
If k = n
![Psk](ImgDataPsk/ImgPsk20.jpg)
If k <> n
![Psk](ImgDataPsk/ImgPsk21.jpg)
![Psk](ImgDataPsk/ImgPsk22.jpg)
![Psk](ImgDataPsk/ImgPsk23.jpg)
If k = n
![Psk](ImgDataPsk/ImgPsk24.jpg)
![Psk](ImgDataPsk/ImgPsk25.jpg)
![Psk](ImgDataPsk/ImgPsk26.jpg)
And finally
If k = n
![Psk](ImgDataPsk/ImgPsk27.jpg)
If k <> n and k is odd
![Psk](ImgDataPsk/ImgPsk28.jpg)
Else ak = 0
This put into a c# function
private
void Psk270(double
peak, int n)
{
{
int
j;
c[0].real = 0;
for (j = 1; j < 500; j++)
{
}c[0].real = 0;
for (j = 1; j < 500; j++)
{
c[j].imag
= 0;
{
}{
if
(j != n)
{
else
{
}{
if
((n + j) % 2 == 0)
{
else
{
}{
c[j].real
= 0;
c[j].imag = 0;
}c[j].imag = 0;
else
{
c[j].real
= peak / 3.141596 * 2.0 * (double)n
/ ((double)n * (double)n
- (double)j * (double)j);
c[j].imag = -peak / 3.141596 * 2.0 * (double)j / ((double)n * (double)n - (double)j * (double)j);
}c[j].imag = -peak / 3.141596 * 2.0 * (double)j / ((double)n * (double)n - (double)j * (double)j);
else
{
c[j].real
= -peak * 0.5;
c[j].imag = peak * 0.5;
}c[j].imag = peak * 0.5;
And that creates the following spectrum
![Psk](ImgDataPsk/Psk270_spectrum.jpg)
Phase-shift keying signal with 90° phase shift
![Psk](ImgDataPsk/Psk90.jpg)
and
If k = n
![Psk](ImgDataPsk/ImgPsk29.jpg)
If k <> n and k is odd
![Psk](ImgDataPsk/ImgPsk30.jpg)
That changes the look of the spectrum one more time
![Psk](ImgDataPsk/Psk90_spectrum.jpg)
C# Demo Project Fourier signals