StudyAce – Custom Writing & Research Support for All Levels

Plagiarism-Free Academic Help by Real Experts – No AI Content

StudyAce – Custom Writing & Research Support for All Levels

Plagiarism-Free Academic Help by Real Experts – No AI Content

CEN/EEN330 Course Project Title: Signal Mixing and Source Separation Tools: MATLAB

CEN/EEN330 Course Project
Title:
Signal Mixing and Source Separation
Tools: MATLAB
Due Date: 4 June 2025

Project Overview

This project introduces students to the concepts of random signal mixing and source separation through a simplified version of the Cocktail Party Problem. Using MATLAB, you will explore how signals can be mixed using a known matrix, and how they can be recovered using two statistical methods: Principal Component Analysis (PCA) and Independent Component Analysis (ICA).

The project focuses on key probabilistic concepts such as Gaussianity, the Central Limit Theorem (CLT), statistical independence vs. correlation, and the effect of additive white Gaussian noise on signal recovery.


Learning Objectives

By completing this project, you will:

  • Apply MATLAB to analyze and process noisy signal data.
  • Simulate random signal mixing and investigate the role of mixing matrices.
  • Understand the impact of Gaussian noise on signal quality and recovery.
  • Compare PCA and ICA in terms of their probabilistic assumptions and performance.
  • Use histogram analysis, kurtosis, and correlation to interpret results.

Task Breakdown

1. Setup and Signal Mixing

  • You will be provided with source signals (.wav files), chose one voice and one music, or get your own from any source (keep them short ~few seconds).
  • Load the signals and make sure they are of the same sampling rate.
  • Normalize the signals in the range [-1,1] and do the same for each signal at each step to avoide clipping.
  • Use a predefined 2×2 mixing matrix to linearly mix the signals.
  • Add Gaussian noise to the mixed signals (one level, e.g., PSNR = 20 dB).

2. Signal Recovery

  • Apply PCA using MATLAB’s built-in functions.
  • Apply ICA using MATLAB’s fastica() function.

·        Save all signals (original, mixed, ICA, PCA) as .wav files.

3. Analysis and Comparison

  • Plot waveforms of original, mixed, and separated signals.
  • Plot histograms of the recovered signals.
  • Calculate Correlation coefficients between original and recovered signals
  • Calculate Kurtosis values of the recovered signals
  • Use results to explain why ICA can recover original signals, while PCA may fail.

Expected Report Structure

Section 1: Introduction

  • Brief explanation of the Cocktail Party Problem
  • Purpose of the project in the context of randomness and noise

Section 2: Methodology

  • Description of the mixing process and noise addition
  • Overview of PCA and ICA techniques
  • Tools and MATLAB functions used

Section 3: Results

  • Plots of mixed and separated signals
  • Histograms and statistical measures (correlation, kurtosis)

·        Observations on saved .wav files

Section 4: Discussion

  • Why ICA works under the CLT and non-Gaussian assumptions
  • Why PCA fails to separate independent sources
  • How Gaussian noise affects the recovery process

Section 5: Conclusion

  • Summary of findings
  • Relevance to course topics in EEN330

Provided Materials

  • Source signals in .wav format
  • MATLAB starter code for signal loading, mixing, recovery and plotting
  • Template for fastica() and PCA implementation

Submission Requirements

  • Report.
  • MATLAB code (.m files).
  • All signals in (.wav files)

MATLAB Starter Code Snippets

Loading a Source Signal

[s1, fs1] = audioread(voice.wav’);

Adjust Length of a signal

minLen = min(length(x1), length(x2));

x1 = x1(1:minLen);

Convert a signal to a row vector

x1 = x1(:)’;

Normalize a signal to [-1,1]:

x1 = x1 / max(abs(x1));

Combine the voice and music signals

S = [x1; x2];

S = S – mean(S, 2);

S = S ./ std(S, 0, 2);

Mixing and Noise Addition

A = [1 0.5; 0.4 1];

X = A * S;

Add Gaussian Noise

noise_power = 0.01 * var(X, 0, 2); % Adjust scale as needed

noise = sqrt(noise_power) .* randn(size(X));

X_noisy = X + noise;

Apply ICA

r = 2;

[Zica, ~, ~, ~] = fastICA(X_noisy, r);

Apply PCA

[coeff, score, ~] = pca(X_noisy’);

pca_sig = score(:,1:2)’;

Results Examples

figure;

time = (0:minLen-1) / fs1;

subplot(4,2,5); plot(time, Zica(1,:)); title(‘Recovered Signal 1 (ICA)’);

audiowrite(fullfile(audio_path,’ica_recovered1.wav’), Zica(1,:)’, fs1);

fprintf(‘ICA1 vs Original Voice: %.3fn’, corr(Zica(1,:)’, S(1,:)’));

fprintf(‘PCA Signal 1: %.3fn’, kurtosis(pca_result(1,:)));

figure;

subplot(4,2,1); histogram(S(1,:), 100); title(‘Histogram: Original Signal 1’);


CEN/EEN330 Course Project Title: Signal Mixing and Source Separation Tools: MATLAB
Scroll to top