Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DSP CODES
- EXP 7- ALL FIR FILTERS
- N = input("Enter the number of samples (Filter Length): ");
- Wc = input("Enter the cutoff frequency (in radians, between 0 and pi): "); % Cutoff frequency in radians
- n = 0:1:N-1;
- alpha = (N-1)/2;
- hd = (sin(Wc*(n-alpha))) ./ (pi*(n-alpha));
- hd(alpha+1) = Wc / pi;
- disp('Ideal Impulse Response hd(n):');
- disp(hd);
- Rec = ones(1, N); % Rectangular window
- han = 0.5*(1 - cos(2*pi*n/(N-1))); % Hanning window
- ham = 0.54 - 0.46*cos(2*pi*n/(N-1)); % Hamming window
- bman = 0.42 - 0.5*cos(2*pi*n/(N-1)) + 0.08*cos(4*pi*n/(N-1)); % Blackman window
- beta = 5; % Kaiser window shape parameter, you can adjust this
- kaiser_win = besseli(0, beta * sqrt(1 - ((2*n/(N-1)) - 1).^2)) / besseli(0, beta);
- Hr = hd .* Rec; % Rectangular windowed filter
- Hhan = hd .* han; % Hanning windowed filter
- Hham = hd .* ham; % Hamming windowed filter
- Hbman = hd .* bman; % Blackman windowed filter
- Hkais = hd .* kaiser_win; % Kaiser windowed filter
- % Output the final impulse response h(n)
- disp('Final Impulse Response h(n) with Rectangular Window:');
- disp(Hr);
- disp('Final Impulse Response h(n) with Hanning Window:');
- disp(Hhan);
- disp('Final Impulse Response h(n) with Hamming Window:');
- disp(Hham);
- disp('Final Impulse Response h(n) with Blackman Window:');
- disp(Hbman);
- disp('Final Impulse Response h(n) with Kaiser Window:');
- disp(Hkais);
- Nfft = 512;
- Hr_fft = fft(Hr, Nfft);
- Hhan_fft = fft(Hhan, Nfft);
- Hham_fft = fft(Hham, Nfft);
- Hbman_fft = fft(Hbman, Nfft);
- Hkais_fft = fft(Hkais, Nfft);
- freq_axis = linspace(-pi, pi, Nfft);
- Hr_fft = fftshift(Hr_fft);
- Hhan_fft = fftshift(Hhan_fft);
- Hham_fft = fftshift(Hham_fft);
- Hbman_fft = fftshift(Hbman_fft);
- Hkais_fft = fftshift(Hkais_fft);
- figure;
- subplot(5,2,1);
- plot(freq_axis/pi, abs(Hr_fft));
- xlabel('Normalized Frequency (\omega/\pi)');
- ylabel('Magnitude');
- title('Magnitude Response: Rectangular Window');
- subplot(5,2,3);
- plot(freq_axis/pi, abs(Hhan_fft));
- xlabel('Normalized Frequency (\omega/\pi)');
- ylabel('Magnitude');
- title('Magnitude Response: Hanning Window');
- subplot(5,2,5);
- plot(freq_axis/pi, abs(Hham_fft));
- xlabel('Normalized Frequency (\omega/\pi)');
- ylabel('Magnitude');
- title('Magnitude Response: Hamming Window');
- subplot(5,2,7);
- plot(freq_axis/pi, abs(Hbman_fft));
- xlabel('Normalized Frequency (\omega/\pi)');
- ylabel('Magnitude');
- title('Magnitude Response: Blackman Window');
- subplot(5,2,9);
- plot(freq_axis/pi, abs(Hkais_fft));
- xlabel('Normalized Frequency (\omega/\pi)');
- ylabel('Magnitude');
- title('Magnitude Response: Kaiser Window');
- subplot(5,2,2);
- plot(freq_axis/pi, angle(Hr_fft));
- xlabel('Normalized Frequency (\omega/\pi)');
- ylabel('Phase');
- title('Phase Response: Rectangular Window');
- subplot(5,2,4);
- plot(freq_axis/pi, angle(Hhan_fft));
- xlabel('Normalized Frequency (\omega/\pi)');
- ylabel('Phase');
- title('Phase Response: Hanning Window');
- subplot(5,2,6);
- plot(freq_axis/pi, angle(Hham_fft));
- xlabel('Normalized Frequency (\omega/\pi)');
- ylabel('Phase');
- title('Phase Response: Hamming Window');
- subplot(5,2,8);
- plot(freq_axis/pi, angle(Hbman_fft));
- xlabel('Normalized Frequency (\omega/\pi)');
- ylabel('Phase');
- title('Phase Response: Blackman Window');
- subplot(5,2,10);
- plot(freq_axis/pi, angle(Hkais_fft));
- xlabel('Normalized Frequency (\omega/\pi)');
- ylabel('Phase');
- title('Phase Response: Kaiser Window');
- EXP 6- 4pt DFT AND FFT
- signal = input('Enter unit signal ');
- N = length(signal);
- dft_signal = zeros(1, N);
- idft_signal = zeros(1, N);
- for k = 1:N
- for n = 1:N
- dft_signal(k) = dft_signal(k) + signal(n) * exp(-1i * 2 * pi * (k-1) * (n-1) / N);
- end
- end
- for n = 1:N
- for k = 1:N
- idft_signal(n) = idft_signal(n) + dft_signal(k) * exp(1i * 2 * pi * (k-1) * (n-1) / N);
- end
- idft_signal(n) = idft_signal(n) / N; % Scale by 1/N
- end
- fft_signal = fft(signal);
- disp('DFT Signal:');
- disp(dft_signal);
- disp('IDFT Signal (Recovered Original Signal):');
- disp(idft_signal);
- disp('FFT Signal (Verification):');
- disp(fft_signal);
- frequencies = (0:N-1) / N;
- figure;
- subplot(2, 2, 1);
- stem(frequencies, abs(dft_signal), 'b', 'LineWidth', 1.5);
- xlabel('Frequency');
- ylabel('Magnitude');
- title('4-Point DFT Magnitude');
- grid on;
- subplot(2, 2, 2);
- stem(frequencies, angle(dft_signal), 'r', 'LineWidth', 1.5);
- xlabel('Frequency');
- ylabel('Phase (radians)');
- title('4-Point DFT Phase');
- grid on;
- subplot(2, 2, 3);
- stem(0:N-1, signal, 'g', 'LineWidth', 1.5);
- xlabel('Time Index');
- ylabel('Amplitude');
- title('Original Signal');
- grid on;
- subplot(2, 2, 4);
- stem(0:N-1, real(idft_signal), 'm', 'LineWidth', 1.5);
- xlabel('Time Index');
- ylabel('Amplitude');
- title('Recovered Signal from IDFT');
- grid on;
- EX 5- To plot mag response , freq response and pole zero filter
- num=input("enter signal values of numerator: ");
- den=input("enter signal values of denominator: ");
- w=linspace(-pi,pi,1000);
- tf= polyval(num,exp(1j*w))./ polyval(den,exp(1j*w));
- freq=abs(tf);
- phase=angle(tf);
- zeroes=roots(numerator);
- poles=roots(denominator);
- subplot(3,1,1);
- plot(w,freq);
- xlabel("w");
- ylabel("|h(w)");
- title("Feq Response;");
- subplot(3,1,2);
- plot(w,phase);
- xlabel("w");
- ylabel("phi(w)");
- title("phase Response;");
- subplot(3,1,3);
- plot(real(zeroes),imag(zeroes),'ob');
- hold on;
- plot(real(poles),imag(poles),'xr');
- theta=linspace(-2*pi,2*pi,500);
- plot(cos(theta),sin(theta));
- xlabel("Real");
- ylabel("Imaginary");
- title("POLE ZERO FILTER");
- grid on;
- axis equal;
- legend('Zeros', 'Poles', 'Unit Circle');
- EXP 4- LINEAR AND CIRCULAR CONVOLUTION
- x=input("Enter signal x[n]: ");
- h=input("Enter signal h[n]: ");
- i=input( "Enter 1 for circular and 0 for linear convolution: ");
- if(i==0)
- lin=conv(x,h);
- disp(lin)
- figure;
- stem(lin,'LineWidth',3);
- xlabel('n index');
- ylabel('amplitude ')
- title('Linear Convolution')
- grid on;
- end
- if(i==1)
- T=input("Enter time period: ");
- x_pad=[x zeros(1,T-length(x))];
- h_pad=[h zeros(1,T-length(h))];
- cir=ifft(fft(x_pad).*fft(h_pad));
- figure;
- disp(cir)
- stem(cir);
- xlabel('n')
- ylabel('amplitude')
- title('Circular Convo: ')
- figure;
- grid on;
- end
- EXP 3- EVEN AND ODD FNC
- DT-
- signal = [1,2,3 ,4];
- origin = 3;
- n = (1:length(signal)) - origin;
- signal_even = 0.5 * (signal + flip(signal));
- signal_odd = 0.5 * (signal - flip(signal));
- figure;
- subplot(3,1,1);
- stem(n, signal, 'b');
- title('Original Discrete Signal');
- xlabel('Index (n)');
- ylabel('Amplitude');
- grid on;
- % Plot the even part of the signal
- subplot(3,1,2);
- stem(n, signal_even, 'r');
- title('Even Part of the Discrete Signal');
- xlabel('Index (n)');
- ylabel('Amplitude');
- grid on;
- % Plot the odd part of the signal
- subplot(3,1,3);
- stem(n, signal_odd, 'g');
- title('Odd Part of the Discrete Signal');
- xlabel('Index (n)');
- ylabel('Amplitude');
- grid on;
- CT-
- t=-10:0.01:10;
- u=@(t) double(t>=0);
- r=@(t)t.*u(t);
- signal= 4*u(t + 2) - 2*r(t) + 2*r(t - 2) ;
- n = (1:length(signal)) - origin;
- signal_even = 0.5 * (signal + flip(signal));
- signal_odd = 0.5 * (signal - flip(signal));
- figure;
- subplot(3,1,1);
- plot(n, signal);
- title('Original Discrete Signal');
- xlabel('Index (n)');
- ylabel('Amplitude');
- grid on;
- subplot(3,1,2);
- plot(n, signal_even, 'r');
- title('Even Part of the Discrete Signal');
- xlabel('Index (n)');
- ylabel('Amplitude');
- grid on;
- % Plot the odd part of the signal
- subplot(3,1,3);
- plot(n, signal_odd, 'g');
- title('Odd Part of the Discrete Signal');
- xlabel('Index (n)');
- ylabel('Amplitude');
- grid on;
- EXP 2- Scaling and shifting
- CT-
- t = -5:0.01:5;
- u = @(t) double(t >= 0);
- r = @(t) t .* u(t);
- input_str = input('Enter the function of t (use u(t) for unit step and r(t) for unit ramp): ', 's');
- shift_str = input('Enter the time shift (e.g., 1 for shifting right by 1): ', 's');
- scale_str = input('Enter the time scaling factor (e.g., 2 for compression by 2, 0.5 for stretching by 2): ', 's');
- scale = str2double(scale_str);
- shift = str2double(shift_str);
- input_function = str2func(['@(t, u, r) ' input_str]);
- t_transformed = scale * t - shift;
- x = input_function(t_transformed, u, r);
- figure;
- plot(t, x, 'b', 'LineWidth', 2);
- grid on;
- xlabel('t');
- ylabel('x(t)');
- title('Continuous Signal with Time Scaling and Shifting');
- axis([-3 3 -3 3]);
- legend('x(t)', 'Location', 'Best');
- DT-
- numElements = input('Enter the number of elements in the signal: ');
- sequence_input = input('Enter the signal values as a vector: ');
- if length(sequence_input) ~= numElements
- error('The number of values provided does not match the specified number of elements.');
- end
- origin = input('Enter the origin index: ');
- if origin < 1 || origin > numElements
- error('Origin index must be within the range of the number of elements.');
- end
- start_x = -1 * (origin - 1);
- end_x = numElements - origin;
- x_coordinates = start_x:end_x;
- a = input('Enter the scaling factor a: ');
- b = input('Enter the shifting factor b: ');
- x_new = (x_coordinates - b) / a;
- int_flag = mod(x_new, 1) == 0;
- x_new = x_new(int_flag);
- seq_input_new = sequence_input(int_flag);
- seq_str = sprintf('%d, ', sequence_input);
- n = length(seq_str);
- seq_str = seq_str(1:n-2);
- switch(mod(origin, 10))
- case 1
- if mod(origin, 100) == 11
- ordinal = 'th';
- else
- ordinal = 'st';
- end
- case 2
- if mod(origin, 100) == 12
- ordinal = 'th';
- else
- ordinal = 'nd';
- end
- case 3
- if mod(origin, 100) == 13
- ordinal = 'th';
- else
- ordinal = 'rd';
- end
- otherwise
- ordinal = 'th';
- end
- % Generating Graphs:
- fig = figure;
- subplot(2,1,1)
- stem(x_coordinates, sequence_input, 'filled')
- grid on
- hold on
- plot([0 0], ylim, 'Color', [0 0 0])
- title("Original Signal: x(n)", sprintf("x(n) = [%s]\n%d%s term at Origin", seq_str, origin, ordinal));
- xlabel("Discrete Time (n)");
- ylabel("Amplitude");
- subplot(2,1,2)
- stem(x_new, seq_input_new, 'filled')
- grid on
- hold on
- plot([0 0], ylim, 'Color', [0 0 0])
- title(sprintf("Altered Signal: x(%.2fn%+.2f)", a, b))
- xlabel("Discrete Time (n)");
- ylabel("Amplitude");
- figure(fig);
- EXP 1: CUSTOM
- t=-2:0.01:2;
- u=@(t) double(t>=0);
- r=@(t) t.*u(t);
- inp_string=input("enter string","s");
- inp_func=str2func(['@(t,u,r)' inp_string]);
- y=inp_func(t,u,r);
- figure;
- plot(t,y,LineWidth=3);
- xlabel('time');
- ylabel('x(t)');
- title('Custom Singal: ')
- grid on;
- axis([-5.5,5.5,-5.5,5.5]);
Advertisement
Add Comment
Please, Sign In to add comment