Complete Digital Signal Processing Programs with Code, Input & Output Examples
clc; close all; clear all; n = 0:10; b = [2 0 0]; a = [1 -0.9 0]; y = dimpulse(b, a, length(n)); subplot(2,1,1); stem(n, y); xlabel('n --->'); ylabel('Amplitude'); title('Impulse response of first order system'); b = [1 0 0]; a = [1 0.6 0.8]; y1 = dimpulse(b, a, length(n)); subplot(2,1,2); stem(n, y1); xlabel('n --->'); ylabel('Amplitude'); title('Impulse response of second order system');
clc; clear all; b = input('Enter the numerator coefficients: '); a = input('Enter the denominator coefficients: '); [h, w] = freqz(b, a); subplot(2,1,1); plot(w/pi, abs(h)); grid; xlabel('Normalized Frequency'); ylabel('Magnitude'); title('Magnitude Response'); subplot(2,1,2); plot(w/pi, angle(h)); grid; xlabel('Normalized Frequency'); ylabel('Phase in radians'); title('Phase Response');
Enter the numerator coefficients: [1 0.5] Enter the denominator coefficients: [1 -0.5 0.2]
[Displays magnitude and phase response plots of the system]
clc; clear all; close all; x1 = input('Enter the first sequence x1(n) = '); x2 = input('Enter the second sequence x2(n) = '); yn = conv(x1, x2); disp('The values of y(n) from linear convolution are:'); disp(yn); n1 = 0:length(x1)-1; subplot(3,1,1); stem(n1, x1); grid on; xlabel('n1 --->'); ylabel('Amplitude'); title('First Sequence x1(n)'); n2 = 0:length(x2)-1; subplot(3,1,2); stem(n2, x2); grid on; xlabel('n2 --->'); ylabel('Amplitude'); title('Second Sequence x2(n)');
Enter the first sequence x1(n) = [1 2 3] Enter the second sequence x2(n) = [1 1 1]
The values of y(n) from linear convolution are: 1 3 6 5 3 [Displays plots of both input sequences]
clc; clear all; close all; x1 = input('Enter the first sequence x1(n) = '); x2 = input('Enter the second sequence x2(n) = '); N = length(x1); % Assume x1 and x2 are of equal length yn = cconv(x1, x2, N); disp('The values of y(n) from circular convolution are:'); disp(yn); n1 = 0:N-1; subplot(3,1,1); stem(n1, x1); grid on; xlabel('n1 --->'); ylabel('Amplitude'); title('First Sequence x1(n)'); subplot(3,1,2); stem(n1, x2); grid on; xlabel('n2 --->'); ylabel('Amplitude'); title('Second Sequence x2(n)'); subplot(3,1,3); stem(n1, yn); grid on; xlabel('n --->'); ylabel('Amplitude'); title('Circular Convolution y(n)');
Enter the first sequence x1(n) = [1 2 3] Enter the second sequence x2(n) = [4 5 6]
The values of y(n) from circular convolution are: [32 31 28] Displays three subplots: - First input sequence x1(n) - Second input sequence x2(n) - Circular convolution output y(n)
clc; clear all; close all; xn = input('Enter the sequence x(n): '); ln = length(xn); xk = zeros(1, ln); ixk = zeros(1, ln); for k = 0:ln-1 for n = 0:ln-1 xk(k+1) = xk(k+1) + xn(n+1) * exp(-1i * 2 * pi * k * n / ln); end end t = 0:ln-1; subplot(2,2,1); stem(t, xn); title('Input Sequence x(n)'); grid on; subplot(2,2,2); stem(t, abs(xk)); title('Magnitude Spectrum |X(k)|'); grid on; subplot(2,2,3); stem(t, angle(xk)); title('Phase Spectrum ∠X(k)'); grid on; for n = 0:ln-1 for k = 0:ln-1 ixk(n+1) = ixk(n+1) + xk(k+1) * exp(1i * 2 * pi * k * n / ln); end end ixk = ixk / ln; subplot(2,2,4); stem(t, real(ixk)); title('Reconstructed Sequence (IDFT)'); grid on;
Enter the sequence x(n): [1 2 3 4]
[Displays 4 subplots: - Input sequence - Magnitude spectrum - Phase spectrum - Reconstructed sequence via IDFT]
clc; clear all; close all; x = input('Enter the sequence : '); N = length(x); xK = fft(x, N); xn = ifft(xK); n = 0:N-1; subplot(2,2,1); stem(n, x); xlabel('n'); ylabel('amplitude'); title('Input Sequence'); subplot(2,2,2); stem(n, abs(xK)); xlabel('n'); ylabel('magnitude'); title('Magnitude Response'); subplot(2,2,3); stem(n, angle(xK)); xlabel('n'); ylabel('phase'); title('Phase Response'); subplot(2,2,4); stem(n, xn); xlabel('n'); ylabel('amplitude'); title('IFFT');
Enter the sequence: [1 2 3 4 5]
xK = 15.0000, -2.5000 + 3.4410i, -2.5000 + 0.8123i, -2.5000 - 0.8123i, -2.5000 - 3.4410i xn = 1 2 3 4 5 [Displays 4 subplots showing input sequence, magnitude response, phase response, and IFFT]
clc; clear all; close all; N = 1024; fs = 8000; f = input('Enter the frequency [1 to 5000]: '); n = 0:N-1; x = sin(2*pi*f/fs * n); [pxx, f_axis] = pwelch(x, [], [], N, fs); plot(f_axis, 10*log10(pxx)); xlabel('Frequency (Hz)'); ylabel('Magnitude (dB)'); title('Power Spectrum using pwelch'); grid on;
Enter the frequency [1 to 5000]: 1000
[Displays a power spectrum plot with a peak around 1000 Hz]
clc; clear all; close all; disp('Enter the IIR filter design specifications'); rp = input('Enter the passband ripple (in dB): '); rs = input('Enter the stopband ripple (in dB): '); wp = input('Enter the passband frequency (Hz): '); ws = input('Enter the stopband frequency (Hz): '); fs = input('Enter the sampling frequency (Hz): '); w1 = 2 * pi * wp; w2 = 2 * pi * ws; [n, wn] = buttord(w1, w2, rp, rs, 's'); disp(['Calculated filter order: ', num2str(n)]); [b, a] = butter(n, wn, 'low', 's'); w = linspace(0, 2*w2, 1000); [h, om] = freqs(b, a, w); m = 20*log10(abs(h)); an = angle(h); figure; subplot(2,1,1); plot(om/(2*pi), m, 'b'); grid on; xlabel('Frequency (Hz)'); ylabel('Gain (dB)'); title('Magnitude Response of IIR Low-Pass Filter'); subplot(2,1,2); plot(om/(2*pi), an, 'r'); grid on; xlabel('Frequency (Hz)'); ylabel('Phase (radians)'); title('Phase Response of IIR Low-Pass Filter');
Enter the passband ripple (in dB): 3 Enter the stopband ripple (in dB): 40 Enter the passband frequency (Hz): 1000 Enter the stopband frequency (Hz): 1500 Enter the sampling frequency (Hz): 8000
Calculated filter order: 6 [Displays magnitude and phase response plots]
clc; clear all; close all; n = 20; fp = 200; fs = 1000; fn = 2 * fp / fs; window = blackman(n + 1); b = fir1(n, fn, window); [H, W] = freqz(b, 1, 128); subplot(2,1,1); plot(W/pi, abs(H)); title('Magnitude Response of FIR LPF'); ylabel('Gain'); xlabel('Normalized Frequency (\times\pi rad/sample)'); grid on; subplot(2,1,2); plot(W/pi, angle(H)); title('Phase Response of FIR LPF'); ylabel('Phase (radians)'); xlabel('Normalized Frequency (\times\pi rad/sample)'); grid on;
No user input required (parameters are predefined)
[Displays FIR Low-Pass Filter magnitude and phase response plots]
clc; clear all; close all; n = 20; fp = 300; fs = 1000; fn = 2 * fp / fs; window = blackman(n + 1); b = fir1(n, fn, 'high', window); [H, W] = freqz(b, 1, 128); subplot(2,1,1); plot(W/pi, abs(H)); title('Magnitude Response of FIR HPF'); ylabel('Gain'); xlabel('Normalized Frequency (\times\pi rad/sample)'); grid on; subplot(2,1,2); plot(W/pi, angle(H)); title('Phase Response of FIR HPF'); ylabel('Phase (radians)'); xlabel('Normalized Frequency (\times\pi rad/sample)'); grid on;
No user input required (parameters are predefined)
[Displays FIR High-Pass Filter magnitude and phase response plots]
clc; clear all; close all; D = input('enter the downsampling factor'); L = input('enter the length of the input signal'); f1 = input('enter the frequency of first sinusodal'); f2 = input('enter the frequency of second sinusodal'); n = 0:L-1; x = sin(2*pi*f1*n) + sin(2*pi*f2*n); y = decimate(x, D, 'fir'); subplot(2,1,1); stem(n, x(1:L)); title('Input Sequence'); xlabel('time(n)'); ylabel('amplitude'); subplot(2,1,2); m = 0:(L/D)-1; stem(m, y(1:L/D)); title('Decimated Sequence'); xlabel('time(n)'); ylabel('amplitude');
enter the downsampling factor = 5 enter the length of the input signal = 100 enter the frequency of first sinusoidal = 0.01 enter the frequency of second sinusoidal = 0.03
[Displays two subplots: - Input sequence (original signal) - Decimated sequence (downsampled signal)]
clc; clear all; close all; L = input('enter the upsampling factor: '); N = input('enter the length of the input signal: '); f1 = input('enter the frequency of first sinusoidal: '); f2 = input('enter the frequency of second sinusoidal: '); n = 0:N-1; x = sin(2*pi*f1*n) + sin(2*pi*f2*n); y = interp(x, L); subplot(2,1,1); stem(n, x(1:N)); title('Input Sequence'); xlabel('time(n)'); ylabel('amplitude'); subplot(2,1,2); m = 0:N*L-1; stem(m, y(1:N*L)); title('Output (Upsampled) Sequence'); xlabel('time(n)'); ylabel('amplitude');
enter the upsampling factor: 5 enter the length of the input signal: 9 enter the frequency of first sinusoidal: 0.1 enter the frequency of second sinusoidal: 0.3
[Displays two subplots: - Input sequence (original signal) - Output sequence (upsampled signal with inserted zeros)]
clc; clear all; close all; Fs = 8000; % Sampling frequency N = 800; % 100ms worth of samples t = (0:N-1)/Fs; pit = 2*pi*t; symbol = {'1','2','3','4','5','6','7','8','9','*','0','#'}; f = [697 697 697 770 770 770 852 852 852 941 941 941; 1209 1336 1477 1209 1336 1477 1209 1336 1477 1209 1336 1477]; tones = zeros(N, size(f,2)); for toneChoice = 1:12 tones(:,toneChoice) = sum(sin(f(:,toneChoice) * pit))'; subplot(4,3,toneChoice); plot(t*1e3, tones(:,toneChoice)); title(['Symbol "', symbol{toneChoice}, '": [' ... num2str(f(1,toneChoice)), ',', num2str(f(2,toneChoice)), ']']); set(gca, 'Xlim', [0 25]); ylabel('Amplitude'); if toneChoice > 9 xlabel('Time (ms)'); end end set(gcf, 'Color', [1 1 1], 'Position', [1 1 1280 1024]); annotation(gcf,'textbox', 'Position',[0.38 0.96 0.45 0.026], ... 'EdgeColor',[1 1 1], ... 'String', '\bf Time response of each tone of the telephone pad', ... 'FitHeightToText','on');
No user input needed — tone frequencies are predefined for 12 phone symbols.
Displays a 4×3 subplot grid: - Each plot shows the DTMF tone waveform for a keypad symbol - X-axis in milliseconds (0–25 ms) - Title with symbol and corresponding frequency pair - An annotation at the top: "Time response of each tone of the telephone pad"