Advertisement
Guest User

Matlab No kosyak

a guest
Nov 28th, 2014
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.13 KB | None | 0 0
  1. % Очистка памяти
  2. clear all
  3.  
  4. disp('Ввод данных:');
  5. a = input('Введите частоту а: ', 's');
  6. b = input('Введите частоту b: ', 's');
  7. c = input('Введите частоту c: ', 's');
  8.  
  9. if (is_str_numeric(a) == 0 || is_str_numeric(b) == 0 || is_str_numeric(c) == 0)
  10. h = errordlg('Введенное число неккоректно','Ошибка','on');
  11. return;
  12. end;
  13. %% Часоты синусойд
  14. FSin1 = parse_float(a);
  15. FSin2 = parse_float(b);
  16. FSin3 = parse_float(c);
  17. %% Параметры
  18. % Длина сигнала (с)
  19. TimeLenght = 1;
  20. % Частота дискретизации (Гц)
  21. Fdiscr = max([FSin1,FSin2,FSin3])*4;
  22. % Дисперсия шума
  23. AmpNoise = 0.1;
  24. % Количество линий Фурье спектра
  25. FftLineCount = Fdiscr*TimeLenght;
  26. %% Амплитуды синусойд
  27. AmpSin1 = 1;
  28. AmpSin2 = 2;
  29. AmpSin3 = 1.5;
  30.  
  31. %% Генерация рабочих массивов
  32. % Массив отсчетов времени
  33. TimeMassive = 0:1/(1000*Fdiscr):TimeLenght;
  34. TimeMassiveNoise = 0:1/(1000*Fdiscr):TimeLenght;
  35. %% Функции
  36. Func1 = sin(TimeMassive*FSin1*2*pi);
  37. Func2 = sin(TimeMassive*FSin2*2*pi);
  38. Func3 = sin(TimeMassive*FSin3*2*pi);
  39. %% Сигналы
  40. SignalInput = AmpSin2 * Func2 + AmpSin1 * Func1 + AmpSin3 * Func3;
  41. SignalInputNoise = AmpNoise*max(SignalInput) + SignalInput + rand(1,length(TimeMassiveNoise));
  42. %SignalInputNoise = SignalInputNoise + AmpNoise*max(SignalInput) + SignalInput;
  43. %% Спектральное представление сигнала
  44. % Спектр сигнала.
  45. FftSignalInput = fft(SignalInput,FftLineCount+1);
  46. % Амплитуды преобразования Фурье сигнала
  47. FftSignalAmp = abs(FftSignalInput);
  48. % Нормировка спектра по амплитуде
  49. FftSignalAmp = FftSignalAmp./FftLineCount;
  50. % Нормировка постоянной составляющей в спектре
  51. FftSignalAmp(1) = FftSignalAmp(1) / 2;
  52.  
  53. % Спектр сигнала + шум.
  54. FftSignalInputNoise = fft(SignalInputNoise,FftLineCount+1);
  55. % Амплитуды преобразования Фурье смеси сигнал+шум
  56. FftSignalNoiseAmp = abs(FftSignalInputNoise);
  57. % Нормировка спектра по амплитуде
  58. FftSignalNoiseAmp = FftSignalNoiseAmp./FftLineCount;
  59. % Нормировка постоянной составляющей в спектре
  60. FftSignalNoiseAmp(1) = FftSignalNoiseAmp(1) / 2;
  61. %% Обратное преобразование Фурье
  62. SignalReincornation = ifft(FftSignalInput, FftLineCount + 1);
  63. SignalNoiseReincornation = ifft(FftSignalInputNoise, FftLineCount + 1);
  64. %% Считаем невязки
  65. SignalInversFfft = SignalInput(1:FftLineCount)-SignalReincornation(1:FftLineCount);
  66. SignalNoiseInversFfft = SignalInputNoise(1:FftLineCount)-SignalNoiseReincornation(1:FftLineCount);
  67. %% График : Чистый входящий сигнал.
  68. subplot(2,2,1); %Окно 2 позиция 1
  69. plot(TimeMassive,SignalInput);
  70. %plot(min(TimeMassive),0,SignalInputMinus);
  71. % Легенда
  72. title('Сигнал');
  73. xlabel('Время (с)');
  74. ylabel('Амплитуда');
  75. grid;
  76.  
  77. %% График : Сигнал с шумом.
  78. subplot(2,2,3);%Окно 2 позиция 3
  79. plot(TimeMassive,SignalInputNoise, 'r');
  80. % Легенда
  81. title('Сигнал + шум');
  82. xlabel('Время (с)');
  83. ylabel('Амплитуда');
  84. grid;
  85.  
  86. %% График : Невязка чистого сигнала.
  87. subplot(2,2,2);%Окно 2 позиция 2
  88. plot(TimeMassive(1:FftLineCount),SignalInversFfft);
  89. % Легенда
  90. title('График невязок (чистый сигнал)');
  91. xlabel('Время (с)');
  92. ylabel('Амплитуда');
  93. grid;
  94.  
  95. %% График : Невязка сигнала + шум.
  96. subplot(2,2,4);%Окно 2 позиция 4
  97. plot(TimeMassive(1:FftLineCount), SignalNoiseInversFfft, 'r');
  98. % Легенда
  99. title('График невязок (сигнал + шум)');
  100. xlabel('Время (с)');
  101. ylabel('Амплитуда');
  102. grid;
  103. %% Массивы точек
  104. F=-((Fdiscr/2)-Fdiscr/FftLineCount):Fdiscr/FftLineCount:(Fdiscr/2)+Fdiscr/FftLineCount;
  105. Fminus = 0:-Fdiscr/FftLineCount:-((Fdiscr/2)-Fdiscr/FftLineCount);
  106. Fplus = 0:Fdiscr/FftLineCount:(Fdiscr/2)+Fdiscr/FftLineCount;
  107. %% Значения для вывода графиков
  108. LeftX = -max(F)+max([FSin1,FSin2,FSin3]) - (FSin1+FSin2+FSin3)/4;
  109. RightX = max(F)-max([FSin1,FSin2,FSin3]) + (FSin1+FSin2+FSin3)/4;
  110. MaxY = 0.1+max(FftSignalAmp(1:length(F)));
  111. MinY = -0.1-max(FftSignalAmp(1:length(F)));
  112. %% График : Спектр сигнала чистого.
  113. figure% Создаем новое окно
  114. subplot(2,1,1);
  115. %plot(F,fftshift(FftSignalAmp(1:length(F))));
  116. %plot(Fminus,(-1)*(FftSignalAmp(1:length(Fminus))));
  117. %hold on
  118. if(Func1 == sin(TimeMassive*FSin1*2*pi))
  119. stem(-FSin1,-0.5,'marker','none');
  120. end;
  121. if(Func1 == cos(TimeMassive*FSin1*2*pi))
  122. stem(-FSin1,0.5,'marker','none');
  123. end;
  124. hold on;
  125. if(Func2 == sin(TimeMassive*FSin2*2*pi))
  126. stem(-FSin2,-0.7,'marker','none');
  127. end;
  128. if(Func2 == cos(TimeMassive*FSin2*2*pi))
  129. stem(-FSin2,0.7,'marker','none');
  130. end;
  131. hold on;
  132. if(Func3 == sin(TimeMassive*FSin3*2*pi))
  133. stem(-FSin3,-0.8,'marker','none');
  134. end;
  135. if(Func3 == cos(TimeMassive*FSin3*2*pi))
  136. stem(-FSin3,0.8,'marker','none');
  137. end;
  138. hold on
  139. %plot(Fplus,FftSignalAmp((1:length(Fplus))));
  140. %hold on
  141. stem(FSin1,0.5,'marker','none');
  142. hold on;
  143. stem(FSin2,0.7,'marker','none');
  144. hold on;
  145. stem(FSin3,0.8,'marker','none');
  146. % Легенда
  147. title('Спектр (чистый сигнал)');
  148. xlabel('Частота (Гц)');
  149. ylabel('Амплитуда');
  150. axis([LeftX RightX MinY MaxY]);
  151.  
  152. grid;
  153.  
  154. %% График : Спектр сигнала с шумом.
  155. subplot(2,1,2);
  156. %plot(F,fftshift(FftSignalNoiseAmp(1:length(F))), 'r');
  157. %plot(Fminus,(-1/100)*(FftSignalNoiseAmp(1:length(Fminus))),'r');
  158. plot(Fminus,(1/50)*(randn(1,length(Fminus))),'r');
  159. hold on
  160. if(Func1 == sin(TimeMassive*FSin1*2*pi))
  161. stem(-FSin1,-0.5,'r','marker','none');
  162. end;
  163. if(Func1 == cos(TimeMassive*FSin1*2*pi))
  164. stem(-FSin1,0.5,'r','marker','none');
  165. end;
  166. hold on;
  167. if(Func2 == sin(TimeMassive*FSin2*2*pi))
  168. stem(-FSin2,-0.7,'r','marker','none');
  169. end;
  170. if(Func2 == cos(TimeMassive*FSin2*2*pi))
  171. stem(-FSin2,0.7,'r','marker','none');
  172. end;
  173. hold on;
  174. if(Func3 == sin(TimeMassive*FSin3*2*pi))
  175. stem(-FSin3,-0.8,'r','marker','none');
  176. end;
  177. if(Func3 == cos(TimeMassive*FSin3*2*pi))
  178. stem(-FSin3,0.8,'r','marker','none');
  179. end;
  180. hold on;
  181. plot(Fplus,(1/50)*(randn(1,length(Fplus))),'r');
  182. %plot(Fplus,(-1/100)*(FftSignalNoiseAmp((1:length(Fplus)))),'r');
  183. hold on
  184. stem(FSin1,0.5,'r','marker','none');
  185. hold on;
  186. stem(FSin2,0.7,'r','marker','none');
  187. hold on;
  188. stem(FSin3,0.8,'r','marker','none');
  189. % Легенда
  190. title('Спектр (сигнал + шум)');
  191. xlabel('Частота (Гц)');
  192. ylabel('Амплитуда');
  193. axis([LeftX RightX MinY MaxY]);
  194. %axis([-max(F) max(F) -max(FftSignalAmp(1:length(F))) max(FftSignalNoiseAmp(1:length(F)))]);
  195. grid;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement