0% found this document useful (0 votes)
3 views11 pages

Programming Assignment 05pdf

The document contains a series of programming assignments related to computer science, specifically in C programming. It includes tasks such as computing Nyquist Sampling Rate, simulating Natural Sampling, implementing Time Division Multiplexing, and more, each with provided code examples. The assignments cover various concepts in digital signal processing and communication systems.

Uploaded by

rishitagupta2007
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views11 pages

Programming Assignment 05pdf

The document contains a series of programming assignments related to computer science, specifically in C programming. It includes tasks such as computing Nyquist Sampling Rate, simulating Natural Sampling, implementing Time Division Multiplexing, and more, each with provided code examples. The assignments cover various concepts in digital signal processing and communication systems.

Uploaded by

rishitagupta2007
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

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;
}

You might also like