RUSTAMJI INSTITUTE OF TECHNOLOGY
BSF
SF ACADEMY, TEKANPUR
Programming Assignment
Submitted by
RISHITA GUPTA (0902CS241131
(0902CS241131)
[Link]. Computer Science & Engineering3rdSemester
(2024-2028 batch)
Subject Teacher:
[Link] Goen
1. Write a C program to compute Nyquist Sampling Rate.
Given maximum frequency ( f_{max} ), compute [ f_s \ge 2 f_{max} ]
CODE:
#include <stdio.h>
int main() {
double f_max, f_s;
// Input maximum frequency
printf("Enter the maximum frequency (Hz): ");
scanf("%lf", &f_max);
// Nyquist Sampling Rate: fs >= 2 * fmax
f_s = 2 * f_max;
printf("Nyquist Sampling Rate (Hz): %.2lf\n", f_s);
printf("Therefore, sampling frequency fs must be >= %.2lf Hz\n", f_s);
return 0;
}
2. Write a C program to simulate Natural Sampling of an analog signal.
Input: analog samples array
Output: sampled values at specified intervals.
CODE:
#include <stdio.h>
void naturalSampling(double signal[], int length, int interval) {
printf("Sampled values (interval = %d):\n", interval);
for (int i = 0; i < length; i += interval) {
printf("signal[%d] = %.2lf\n", i, signal[i]);
}
}
int main() {
double analogSignal[] = {0.0, 0.5, 0.9, 0.7, 0.2, -0.3, -0.8, -1.0, -0.6, 0.1};
int length = sizeof(analogSignal) / sizeof(analogSignal[0]);
int interval;
printf("Enter sampling interval (e.g., 2, 3, etc.): ");
scanf("%d", &interval);
naturalSampling(analogSignal, length, interval);
return 0;
}
3. Write a C program to implement Time Division Multiplexing (TDM).
Take data from N channels and interleave them into a TDM frame.
CODE:
#include <stdio.h>
int main() {
int N, M; // N = number of channels, M = samples per channel
int i, j;
// Input number of channels
printf("Enter number of channels (N): ");
scanf("%d", &N);
// Input number of samples per channel
printf("Enter number of samples per channel (M): ");
scanf("%d", &M);
int data[N][M]; // 2D array to store channel data
// Input data for each channel
for (i = 0; i < N; i++) {
printf("Enter %d samples for Channel %d:\n", M, i+1);
for (j = 0; j < M; j++) {
scanf("%d", &data[i][j]);
}
}
// Construct TDM frame
printf("\n--- TDM Frame ---\n");
for (j = 0; j < M; j++) {
for (i = 0; i < N; i++) {
printf("Ch%d[%d] = %d ", i+1, j, data[i][j]);
}
printf("\n");
}
return 0;
}
4. Write a C program to implement PCM (Pulse Code Modulation).
Steps: sampling → quantization → binary encoding Show all three stages.
CODE:
#include <stdio.h>
#include <math.h>
void toBinary(int num, int bits) {
for (int i = bits - 1; i >= 0; i--) {
int bit = (num >> i) & 1;
printf("%d", bit);
}
}
int main() {
int i, n, levels, bits;
// Input: number of samples
printf("Enter number of samples: ");
scanf("%d", &n);
double signal[n];
printf("Enter %d sample values (analog signal):\n", n);
for (i = 0; i < n; i++) {
scanf("%lf", &signal[i]);
}
// Input: number of quantization levels
printf("Enter number of quantization levels: ");
scanf("%d", &levels);
// Bits required for encoding
bits = (int)ceil(log2(levels));
// Step 1: Sampling (already represented by input array)
printf("\n--- Sampling Stage ---\n");
for (i = 0; i < n; i++) {
printf("Sample[%d] = %.2lf\n", i, signal[i]);
}
// Step 2: Quantization
double stepSize = 1.0; // assume step size = 1 for simplicity
int quantized[n];
printf("\n--- Quantization Stage ---\n");
for (i = 0; i < n; i++) {
quantized[i] = (int)round(signal[i] / stepSize);
if (quantized[i] < 0) quantized[i] = 0;
if (quantized[i] >= levels) quantized[i] = levels - 1;
printf("Sample[%d] = %.2lf → Quan zed = %d\n", i, signal[i], quantized[i]);
}
// Step 3: Binary Encoding
printf("\n--- Binary Encoding Stage ---\n");
for (i = 0; i < n; i++) {
printf("Quantized[%d] = %d → Binary = ", i, quan zed[i]);
toBinary(quantized[i], bits);
printf("\n");
}
return 0;
}
5. Write a C program to compute Quantization Error & Signal-to-Quantization
Noise Ratio (SQNR).
Given analog input and quantization levels.
CODE:
#include <stdio.h>
#include <math.h>
int main() {
int n, levels, i;
// Input: number of samples
printf("Enter number of samples: ");
scanf("%d", &n);
double signal[n];
printf("Enter %d analog sample values:\n", n);
for (i = 0; i < n; i++) {
scanf("%lf", &signal[i]);
}
// Input: number of quantization levels
printf("Enter number of quantization levels: ");
scanf("%d", &levels);
// Assume signal range is 0 to max(signal)
double maxVal = signal[0];
for (i = 1; i < n; i++) {
if (signal[i] > maxVal) maxVal = signal[i];
}
// Step size for quantization
double stepSize = maxVal / levels;
double quantized[n], error[n];
double signalPower = 0.0, noisePower = 0.0;
// Quantization and error calculation
for (i = 0; i < n; i++) {
quantized[i] = round(signal[i] / stepSize) * stepSize;
error[i] = signal[i] - quantized[i];
signalPower += signal[i] * signal[i];
noisePower += error[i] * error[i];
}
// SQNR calculation
double SQNR = 10 * log10(signalPower / noisePower);
// Output results
printf("\n--- Results ---\n");
for (i = 0; i < n; i++) {
printf("Sample[%d]: %.2lf, Quantized: %.2lf, Error: %.2lf\n",
i, signal[i], quantized[i], error[i]);
}
printf("\nQuantization Error Power = %.4lf\n", noisePower);
printf("Signal Power = %.4lf\n", signalPower);
printf("SQNR = %.2lf dB\n", SQNR);
return 0;
}
6. Write a C program to generate BPSK waveforms (numerical simulation).
Logic:
Bit 1 → +A
Bit 0 → –A Print amplitude array representing modulated signal.
CODE:
#include <stdio.h>
int main() {
int n, i;
double A;
// Input: number of bits
printf("Enter number of bits: ");
scanf("%d", &n);
int bits[n];
printf("Enter %d bits (0 or 1):\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &bits[i]);
}
// Input: amplitude A
printf("Enter amplitude (A): ");
scanf("%lf", &A);
double bpsk[n];
// BPSK modulation
for (i = 0; i < n; i++) {
if (bits[i] == 1)
bpsk[i] = +A; // Bit 1 → +A
else
bpsk[i] = -A; // Bit 0 → -A
}
// Output: amplitude array
printf("\n--- BPSK Modulated Signal ---\n");
for (i = 0; i < n; i++) {
printf("Bit[%d] = %d → Amplitude = %.2lf\n", i, bits[i], bpsk[i]);
}
return 0;
}
7. Write a C program to simulate BFSK modulation.
Bit 1 → frequency f1
Bit 0 → frequency f2
Generate sampled sinusoidal data points.
CODE:
#include <stdio.h>
#include <math.h>
int main() {
int n, i, j, samplesPerBit;
double f1, f2, A, fs; // f1, f2 = frequencies, A = amplitude, fs = sampling frequency
// Input: number of bits
printf("Enter number of bits: ");
scanf("%d", &n);
int bits[n];
printf("Enter %d bits (0 or 1):\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &bits[i]);
}
// Input parameters
printf("Enter amplitude (A): ");
scanf("%lf", &A);
printf("Enter frequency for bit 1 (f1): ");
scanf("%lf", &f1);
printf("Enter frequency for bit 0 (f2): ");
scanf("%lf", &f2);
printf("Enter sampling frequency (fs): ");
scanf("%lf", &fs);
printf("Enter number of samples per bit: ");
scanf("%d", &samplesPerBit);
// Use acos(-1.0) to get PI
double PI = acos(-1.0);
// Generate BFSK waveform
printf("\n--- BFSK Modulated Signal (sampled points) ---\n");
for (i = 0; i < n; i++) {
double freq = (bits[i] == 1) ? f1 : f2;
printf("Bit[%d] = %d → Frequency = %.2lf Hz\n", i, bits[i], freq);
for (j = 0; j < samplesPerBit; j++) {
double t = (double)j / fs; // time index
double sample = A * sin(2 * PI * freq * t);
printf(" Sample[%d] = %.4lf\n", j, sample);
}
}
return 0;
}
8. Write a C program to compute Shannon Channel Capacity.
Input: bandwidth B, SNR Use: [ C = B \log_2(1 + SNR) ]
CODE:
#include <stdio.h>
#include <math.h>
int main() {
double B, SNR, C;
// Input bandwidth and SNR
printf("Enter channel bandwidth B (Hz): ");
scanf("%lf", &B);
printf("Enter signal-to-noise ratio (SNR): ");
scanf("%lf", &SNR);
// Shannon Capacity formula: C = B * log2(1 + SNR)
C = B * (log(1 + SNR) / log(2)); // log base 2 using natural log
// Output result
printf("\n--- Shannon Channel Capacity ---\n");
printf("Bandwidth (B) = %.2lf Hz\n", B);
printf("SNR = %.2lf\n", SNR);
printf("Channel Capacity (C) = %.4lf bits/sec\n", C);
return 0;
}
9. Write a C program to simulate PCM–TDM system.
Combine PCM of multiple channels into a single TDM stream.
CODE:
#include <stdio.h>
#include <math.h>
// Function to convert decimal to binary string
void toBinary(int num, int bits) {
for (int i = bits - 1; i >= 0; i--) {
int bit = (num >> i) & 1;
printf("%d", bit);
}
}
int main() {
int N, M, levels, bits;
int i, j;
// Input: number of channels and samples
printf("Enter number of channels (N): ");
scanf("%d", &N);
printf("Enter number of samples per channel (M): ");
scanf("%d", &M);
printf("Enter number of quantization levels: ");
scanf("%d", &levels);
bits = (int)ceil(log2(levels)); // bits needed for PCM
double data[N][M];
int quantized[N][M];
// Input analog samples for each channel
for (i = 0; i < N; i++) {
printf("Enter %d samples for Channel %d:\n", M, i+1);
for (j = 0; j < M; j++) {
scanf("%lf", &data[i][j]);
}
}
// Quantization (step size assumed = 1 for simplicity)
for (i = 0; i < N; i++) {
for (j = 0; j < M; j++) {
quantized[i][j] = (int)round(data[i][j]);
if (quantized[i][j] < 0) quantized[i][j] = 0;
if (quantized[i][j] >= levels) quantized[i][j] = levels - 1;
}
}
// PCM–TDM Output
printf("\n--- PCM–TDM Stream ---\n");
for (j = 0; j < M; j++) {
printf("Frame %d: ", j+1);
for (i = 0; i < N; i++) {
printf("Ch%d=", i+1);
toBinary(quantized[i][j], bits);
printf(" ");
}
printf("\n");
}
return 0;
}
10. Write a C program that detects and counts bit errors (BER Calculation).
Given a transmitted bit stream and received bit stream.
CODE:
#include <stdio.h>
int main() {
int n, i, errors = 0;
// Input: number of bits
printf("Enter number of bits in the stream: ");
scanf("%d", &n);
int tx[n], rx[n];
// Input transmitted bit stream
printf("Enter transmitted bit stream (%d bits):\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &tx[i]);
}
// Input received bit stream
printf("Enter received bit stream (%d bits):\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &rx[i]);
}
// Compare and count errors
for (i = 0; i < n; i++) {
if (tx[i] != rx[i]) {
errors++;
printf("Error at position %d: Tx=%d, Rx=%d\n", i, tx[i], rx[i]);
}
}
// Compute BER
double BER = (double)errors / n;
// Output results
printf("\n--- BER Results ---\n");
printf("Total bits: %d\n", n);
printf("Bit errors: %d\n", errors);
printf("Bit Error Rate (BER) = %.6lf\n", BER);
return 0;
}