AmeyJ

Untitled

Nov 26th, 2024 (edited)
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 10.33 KB | Source Code | 0 0
  1. DSP CODES
  2.  
  3. EXP 7- ALL FIR FILTERS
  4. N = input("Enter the number of samples (Filter Length): ");
  5. Wc = input("Enter the cutoff frequency (in radians, between 0 and pi): "); % Cutoff frequency in radians
  6. n = 0:1:N-1;
  7. alpha = (N-1)/2;
  8. hd = (sin(Wc*(n-alpha))) ./ (pi*(n-alpha));
  9. hd(alpha+1) = Wc / pi;                    
  10. disp('Ideal Impulse Response hd(n):');
  11. disp(hd);
  12. Rec = ones(1, N);  % Rectangular window
  13. han = 0.5*(1 - cos(2*pi*n/(N-1)));  % Hanning window
  14. ham = 0.54 - 0.46*cos(2*pi*n/(N-1));  % Hamming window
  15. bman = 0.42 - 0.5*cos(2*pi*n/(N-1)) + 0.08*cos(4*pi*n/(N-1));  % Blackman window
  16. beta = 5;  % Kaiser window shape parameter, you can adjust this
  17. kaiser_win = besseli(0, beta * sqrt(1 - ((2*n/(N-1)) - 1).^2)) / besseli(0, beta);
  18. Hr = hd .* Rec;     % Rectangular windowed filter
  19. Hhan = hd .* han;   % Hanning windowed filter
  20. Hham = hd .* ham;   % Hamming windowed filter
  21. Hbman = hd .* bman; % Blackman windowed filter
  22. Hkais = hd .* kaiser_win; % Kaiser windowed filter
  23. % Output the final impulse response h(n)
  24. disp('Final Impulse Response h(n) with Rectangular Window:');
  25. disp(Hr);
  26. disp('Final Impulse Response h(n) with Hanning Window:');
  27. disp(Hhan);
  28. disp('Final Impulse Response h(n) with Hamming Window:');
  29. disp(Hham);
  30. disp('Final Impulse Response h(n) with Blackman Window:');
  31. disp(Hbman);
  32. disp('Final Impulse Response h(n) with Kaiser Window:');
  33. disp(Hkais);
  34. Nfft = 512;
  35. Hr_fft = fft(Hr, Nfft);
  36. Hhan_fft = fft(Hhan, Nfft);
  37. Hham_fft = fft(Hham, Nfft);
  38. Hbman_fft = fft(Hbman, Nfft);
  39. Hkais_fft = fft(Hkais, Nfft);
  40. freq_axis = linspace(-pi, pi, Nfft);
  41. Hr_fft = fftshift(Hr_fft);
  42. Hhan_fft = fftshift(Hhan_fft);
  43. Hham_fft = fftshift(Hham_fft);
  44. Hbman_fft = fftshift(Hbman_fft);
  45. Hkais_fft = fftshift(Hkais_fft);
  46. figure;
  47. subplot(5,2,1);
  48. plot(freq_axis/pi, abs(Hr_fft));
  49. xlabel('Normalized Frequency (\omega/\pi)');
  50. ylabel('Magnitude');
  51. title('Magnitude Response: Rectangular Window');
  52. subplot(5,2,3);
  53. plot(freq_axis/pi, abs(Hhan_fft));
  54. xlabel('Normalized Frequency (\omega/\pi)');
  55. ylabel('Magnitude');
  56. title('Magnitude Response: Hanning Window');
  57. subplot(5,2,5);
  58. plot(freq_axis/pi, abs(Hham_fft));
  59. xlabel('Normalized Frequency (\omega/\pi)');
  60. ylabel('Magnitude');
  61. title('Magnitude Response: Hamming Window');
  62. subplot(5,2,7);
  63. plot(freq_axis/pi, abs(Hbman_fft));
  64. xlabel('Normalized Frequency (\omega/\pi)');
  65. ylabel('Magnitude');
  66. title('Magnitude Response: Blackman Window');
  67. subplot(5,2,9);
  68. plot(freq_axis/pi, abs(Hkais_fft));
  69. xlabel('Normalized Frequency (\omega/\pi)');
  70. ylabel('Magnitude');
  71. title('Magnitude Response: Kaiser Window');
  72. subplot(5,2,2);
  73. plot(freq_axis/pi, angle(Hr_fft));
  74. xlabel('Normalized Frequency (\omega/\pi)');
  75. ylabel('Phase');
  76. title('Phase Response: Rectangular Window');
  77. subplot(5,2,4);
  78. plot(freq_axis/pi, angle(Hhan_fft));
  79. xlabel('Normalized Frequency (\omega/\pi)');
  80. ylabel('Phase');
  81. title('Phase Response: Hanning Window');
  82. subplot(5,2,6);
  83. plot(freq_axis/pi, angle(Hham_fft));
  84. xlabel('Normalized Frequency (\omega/\pi)');
  85. ylabel('Phase');
  86. title('Phase Response: Hamming Window');
  87. subplot(5,2,8);
  88. plot(freq_axis/pi, angle(Hbman_fft));
  89. xlabel('Normalized Frequency (\omega/\pi)');
  90. ylabel('Phase');
  91. title('Phase Response: Blackman Window');
  92. subplot(5,2,10);
  93. plot(freq_axis/pi, angle(Hkais_fft));
  94. xlabel('Normalized Frequency (\omega/\pi)');
  95. ylabel('Phase');
  96. title('Phase Response: Kaiser Window');
  97.  
  98. EXP 6- 4pt DFT AND FFT
  99.  
  100. signal = input('Enter unit signal ');
  101. N = length(signal);
  102. dft_signal = zeros(1, N);
  103. idft_signal = zeros(1, N);
  104. for k = 1:N
  105.    for n = 1:N
  106.        dft_signal(k) = dft_signal(k) + signal(n) * exp(-1i * 2 * pi * (k-1) * (n-1) / N);
  107.    end
  108. end
  109. for n = 1:N
  110.    for k = 1:N
  111.        idft_signal(n) = idft_signal(n) + dft_signal(k) * exp(1i * 2 * pi * (k-1) * (n-1) / N);
  112.    end
  113.    idft_signal(n) = idft_signal(n) / N; % Scale by 1/N
  114. end
  115. fft_signal = fft(signal);
  116. disp('DFT Signal:');
  117. disp(dft_signal);
  118. disp('IDFT Signal (Recovered Original Signal):');
  119. disp(idft_signal);
  120. disp('FFT Signal (Verification):');
  121. disp(fft_signal);
  122. frequencies = (0:N-1) / N;
  123. figure;
  124. subplot(2, 2, 1);
  125. stem(frequencies, abs(dft_signal), 'b', 'LineWidth', 1.5);
  126. xlabel('Frequency');
  127. ylabel('Magnitude');
  128. title('4-Point DFT Magnitude');
  129. grid on;
  130. subplot(2, 2, 2);
  131. stem(frequencies, angle(dft_signal), 'r', 'LineWidth', 1.5);
  132. xlabel('Frequency');
  133. ylabel('Phase (radians)');
  134. title('4-Point DFT Phase');
  135. grid on;
  136. subplot(2, 2, 3);
  137. stem(0:N-1, signal, 'g', 'LineWidth', 1.5);
  138. xlabel('Time Index');
  139. ylabel('Amplitude');
  140. title('Original Signal');
  141. grid on;
  142. subplot(2, 2, 4);
  143. stem(0:N-1, real(idft_signal), 'm', 'LineWidth', 1.5);
  144. xlabel('Time Index');
  145. ylabel('Amplitude');
  146. title('Recovered Signal from IDFT');
  147. grid on;
  148.  
  149. EX 5- To plot mag response , freq response and pole zero filter
  150. num=input("enter signal values of numerator: ");
  151. den=input("enter signal values of denominator: ");
  152. w=linspace(-pi,pi,1000);
  153. tf= polyval(num,exp(1j*w))./ polyval(den,exp(1j*w));
  154. freq=abs(tf);
  155. phase=angle(tf);
  156. zeroes=roots(numerator);
  157. poles=roots(denominator);
  158.  
  159. subplot(3,1,1);
  160. plot(w,freq);
  161. xlabel("w");
  162. ylabel("|h(w)");
  163. title("Feq Response;");
  164. subplot(3,1,2);
  165. plot(w,phase);
  166. xlabel("w");
  167. ylabel("phi(w)");
  168. title("phase Response;");
  169. subplot(3,1,3);
  170. plot(real(zeroes),imag(zeroes),'ob');
  171. hold on;
  172. plot(real(poles),imag(poles),'xr');
  173. theta=linspace(-2*pi,2*pi,500);
  174. plot(cos(theta),sin(theta));
  175. xlabel("Real");
  176. ylabel("Imaginary");
  177. title("POLE ZERO FILTER");
  178. grid on;
  179. axis equal;
  180. legend('Zeros', 'Poles', 'Unit Circle');
  181.  
  182. EXP 4- LINEAR AND CIRCULAR CONVOLUTION
  183.  
  184. x=input("Enter signal x[n]: ");
  185. h=input("Enter signal h[n]: ");
  186. i=input( "Enter 1 for circular and 0 for linear convolution: ");
  187. if(i==0)
  188.    lin=conv(x,h);
  189.    disp(lin)
  190.    figure;
  191.    stem(lin,'LineWidth',3);
  192.    xlabel('n index');
  193.    ylabel('amplitude ')
  194.    title('Linear Convolution')
  195.    grid on;
  196. end
  197. if(i==1)
  198.    T=input("Enter time period: ");
  199.    x_pad=[x zeros(1,T-length(x))];
  200.    h_pad=[h zeros(1,T-length(h))];
  201.    cir=ifft(fft(x_pad).*fft(h_pad));
  202.    figure;
  203.    disp(cir)
  204.    stem(cir);
  205.    xlabel('n')
  206.    ylabel('amplitude')
  207.    title('Circular Convo: ')
  208.    figure;
  209.    grid on;
  210.  end
  211.  
  212. EXP 3- EVEN AND ODD FNC
  213.  
  214. DT-
  215. signal = [1,2,3 ,4];
  216. origin = 3;
  217. n = (1:length(signal)) - origin;
  218. signal_even = 0.5 * (signal + flip(signal));
  219. signal_odd = 0.5 * (signal - flip(signal));
  220. figure;
  221. subplot(3,1,1);
  222. stem(n, signal, 'b');
  223. title('Original Discrete Signal');
  224. xlabel('Index (n)');
  225. ylabel('Amplitude');
  226. grid on;
  227. % Plot the even part of the signal
  228. subplot(3,1,2);
  229. stem(n, signal_even, 'r');
  230. title('Even Part of the Discrete Signal');
  231. xlabel('Index (n)');
  232. ylabel('Amplitude');
  233. grid on;
  234. % Plot the odd part of the signal
  235. subplot(3,1,3);
  236. stem(n, signal_odd, 'g');
  237. title('Odd Part of the Discrete Signal');
  238. xlabel('Index (n)');
  239. ylabel('Amplitude');
  240. grid on;
  241.  
  242. CT-
  243. t=-10:0.01:10;
  244. u=@(t) double(t>=0);
  245. r=@(t)t.*u(t);
  246. signal= 4*u(t + 2) - 2*r(t) + 2*r(t - 2) ;
  247. n = (1:length(signal)) - origin;
  248. signal_even = 0.5 * (signal + flip(signal));
  249. signal_odd = 0.5 * (signal - flip(signal));
  250. figure;
  251. subplot(3,1,1);
  252. plot(n, signal);
  253. title('Original Discrete Signal');
  254. xlabel('Index (n)');
  255. ylabel('Amplitude');
  256. grid on;
  257. subplot(3,1,2);
  258. plot(n, signal_even, 'r');
  259. title('Even Part of the Discrete Signal');
  260. xlabel('Index (n)');
  261. ylabel('Amplitude');
  262. grid on;
  263. % Plot the odd part of the signal
  264. subplot(3,1,3);
  265. plot(n, signal_odd, 'g');
  266. title('Odd Part of the Discrete Signal');
  267. xlabel('Index (n)');
  268. ylabel('Amplitude');
  269. grid on;
  270.  
  271. EXP 2- Scaling and shifting
  272. CT-
  273. t = -5:0.01:5;
  274. u = @(t) double(t >= 0);
  275. r = @(t) t .* u(t);
  276. input_str = input('Enter the function of t (use u(t) for unit step and r(t) for unit ramp): ', 's');
  277. shift_str = input('Enter the time shift (e.g., 1 for shifting right by 1): ', 's');
  278. scale_str = input('Enter the time scaling factor (e.g., 2 for compression by 2, 0.5 for stretching by 2): ', 's');
  279. scale = str2double(scale_str);
  280. shift = str2double(shift_str);
  281. input_function = str2func(['@(t, u, r) ' input_str]);
  282. t_transformed = scale * t - shift;
  283. x = input_function(t_transformed, u, r);
  284. figure;
  285. plot(t, x, 'b', 'LineWidth', 2);
  286. grid on;
  287. xlabel('t');
  288. ylabel('x(t)');
  289. title('Continuous Signal with Time Scaling and Shifting');
  290. axis([-3 3 -3 3]);
  291. legend('x(t)', 'Location', 'Best');
  292.  
  293. DT-
  294. numElements = input('Enter the number of elements in the signal: ');
  295. sequence_input = input('Enter the signal values as a vector: ');
  296. if length(sequence_input) ~= numElements
  297.    error('The number of values provided does not match the specified number of elements.');
  298. end
  299. origin = input('Enter the origin index: ');
  300. if origin < 1 || origin > numElements
  301.    error('Origin index must be within the range of the number of elements.');
  302. end
  303. start_x = -1 * (origin - 1);
  304. end_x = numElements - origin;
  305. x_coordinates = start_x:end_x;
  306. a = input('Enter the scaling factor a: ');
  307. b = input('Enter the shifting factor b: ');
  308. x_new = (x_coordinates - b) / a;
  309. int_flag = mod(x_new, 1) == 0;
  310. x_new = x_new(int_flag);
  311. seq_input_new = sequence_input(int_flag);
  312. seq_str = sprintf('%d, ', sequence_input);
  313. n = length(seq_str);
  314. seq_str = seq_str(1:n-2);
  315. switch(mod(origin, 10))
  316.    case 1
  317.        if mod(origin, 100) == 11
  318.            ordinal = 'th';
  319.        else
  320.            ordinal = 'st';
  321.        end
  322.    case 2
  323.        if mod(origin, 100) == 12
  324.            ordinal = 'th';
  325.        else
  326.            ordinal = 'nd';
  327.        end
  328.    case 3
  329.        if mod(origin, 100) == 13
  330.            ordinal = 'th';
  331.        else
  332.            ordinal = 'rd';
  333.        end
  334.    otherwise
  335.        ordinal = 'th';
  336. end
  337. % Generating Graphs:
  338. fig = figure;
  339. subplot(2,1,1)
  340. stem(x_coordinates, sequence_input, 'filled')
  341. grid on
  342. hold on
  343. plot([0 0], ylim, 'Color', [0 0 0])
  344. title("Original Signal: x(n)", sprintf("x(n) = [%s]\n%d%s term at Origin", seq_str, origin, ordinal));
  345. xlabel("Discrete Time (n)");
  346. ylabel("Amplitude");
  347. subplot(2,1,2)
  348. stem(x_new, seq_input_new, 'filled')
  349. grid on
  350. hold on
  351. plot([0 0], ylim, 'Color', [0 0 0])
  352. title(sprintf("Altered Signal: x(%.2fn%+.2f)", a, b))
  353. xlabel("Discrete Time (n)");
  354. ylabel("Amplitude");
  355. figure(fig);
  356.  
  357. EXP 1: CUSTOM
  358.  
  359. t=-2:0.01:2;
  360. u=@(t) double(t>=0);
  361. r=@(t) t.*u(t);
  362. inp_string=input("enter string","s");
  363. inp_func=str2func(['@(t,u,r)' inp_string]);
  364. y=inp_func(t,u,r);
  365. figure;
  366. plot(t,y,LineWidth=3);
  367. xlabel('time');
  368. ylabel('x(t)');
  369. title('Custom Singal: ')
  370. grid on;
  371. axis([-5.5,5.5,-5.5,5.5]);
  372.  
  373.  
  374.  
Advertisement
Add Comment
Please, Sign In to add comment