Open In App

Hearing aids for Impaired People using MATLAB

Last Updated : 24 Feb, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

In this article, we are going to discuss how to develop a digital hearing aid using MATLAB.

MATLAB stands for Matrix Laboratory. It is a high-performance language that is used for technical computing. It allows matrix manipulations, plotting of functions, implementation of algorithms and creation of user interfaces. It is both a programming language and a programming environment. It allows the computation of statements in the command window itself.

Step-by-step approach:

  • We give an input speech signal to the MATLAB model.
  • Then we add noise to the input speech signal because for this system the input signal is a clean signal, some noise is added in order to simulate a real situation.
  • Now we use the Wavelet filter to reduce the noise.
  • We use frequency shaper to correct the loss of hearing certain frequencies.
  • The amplitude compression is used to improve the gain of the signal.

Flow Diagram based on the above approach:

Here we are using AWGN(additive white gaussian noise) because AWGN is a fundamental model utilized in data hypothesis to emulate the impact of numerous arbitrary cycles that happen in nature. AWGN has a continuous and uniform frequency spectrum over a specified frequency band and has equal power per Hertz of this band.

Algorithm

MATLAB




clc
 
clear
 
close all
 
% disp('recording...');
% recObj = audiorecorder;
% recordblocking(recObj,5);
% disp('recorded');
% %%
 
% disp('playing recorded sound...');
% play(recObj);
% pause(7);
%%
 
% y = getaudiodata(recObj);
% input= 'Counting-16-44p1-mono-15secs.wav';
 
disp('input sound')
 
% input = 'audio.wav';
% [in,fs] = audioread(input);
% [y,fs] = audioread(input);
 
load handle.mat
 
fs=Fs;
 
y = y(:, 1);
 
% info = audioinfo(input);
 
sound(y);
pause(10);
 
figure,plot(y);
title('input');
xlabel('samples');
ylabel('amplitude');
 
y = awgn(y,40);
noi = y;
figure,plot(y);
 
xlabel('samples');
ylabel('amplitude');
title('awgn');
disp('playing added noise...');
sound(y);
pause(10)
 
%'Fp,Fst,Ap,Ast' (passband frequency, stopband frequency, passband ripple, stopband attenuation)
 
hlpf = fdesign.lowpass('Fp,Fst,Ap,Ast',3.0e3,3.5e3,0.5,50,fs);
D = design(hlpf);
freqz(D);
x = filter(D,y);
 
disp('playing denoised sound');
figure,plot(x);
title('denoise');
sound(x,fs);
 
xlabel('samples');
ylabel('amplitude');
pause(10)
 
% freq shaper using band pass
 
T = 1/fs;
len = length(x);
p = log2(len);
p = ceil(p);
N = 2^p;
f1 = fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2',2000,3000,4000,5000,60,2,60,2*fs);
hd = design(f1,'equiripple');
y = filter(hd,x);
freqz(hd);
y = y*100;
 
disp('playing frequency shaped...');
sound(y,fs);
pause(10);
 
% amplitude shaper
 
disp('amplitude shaper')
out1=fft(y);
phase=angle(out1);
mag=abs(out1)/N;
[magsig,~]=size(mag);
threshold=1000;
out=zeros(magsig,1);
 
for i=1:magsig/2
 
   if(mag(i)>threshold)
       mag(i)=threshold;mag(magsig-i)=threshold;
 
   end
 
   out(i)=mag(i)*exp(j*phase(i));
   out(magsig-i)=out(i);
 
end
 
outfinal=real(ifft(out))*10000;
disp('playing amplitude shaped...');
sound(outfinal,fs);
pause(10);
 
load handle.mat
figure;
subplot(2,1,1);
specgram(noi);
title('Spectrogram of Original Signal');
 
subplot(2,1,2);
specgram(outfinal);
title('Spectrogram of Adjusted Signal');


 
 

Output:

 

 



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads