Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % Очистка памяти
- clear all
- disp('Ввод данных:');
- a = input('Введите частоту а: ', 's');
- b = input('Введите частоту b: ', 's');
- c = input('Введите частоту c: ', 's');
- if (is_str_numeric(a) == 0 || is_str_numeric(b) == 0 || is_str_numeric(c) == 0)
- h = errordlg('Введенное число неккоректно','Ошибка','on');
- return;
- end;
- %% Часоты синусойд
- FSin1 = parse_float(a);
- FSin2 = parse_float(b);
- FSin3 = parse_float(c);
- %% Параметры
- % Длина сигнала (с)
- TimeLenght = 1;
- % Частота дискретизации (Гц)
- Fdiscr = max([FSin1,FSin2,FSin3])*4;
- % Дисперсия шума
- AmpNoise = 0.1;
- % Количество линий Фурье спектра
- FftLineCount = Fdiscr*TimeLenght;
- %% Амплитуды синусойд
- AmpSin1 = 1;
- AmpSin2 = 2;
- AmpSin3 = 1.5;
- %% Генерация рабочих массивов
- % Массив отсчетов времени
- TimeMassive = 0:1/(1000*Fdiscr):TimeLenght;
- TimeMassiveNoise = 0:1/(1000*Fdiscr):TimeLenght;
- %% Функции
- Func1 = sin(TimeMassive*FSin1*2*pi);
- Func2 = sin(TimeMassive*FSin2*2*pi);
- Func3 = sin(TimeMassive*FSin3*2*pi);
- %% Сигналы
- SignalInput = AmpSin2 * Func2 + AmpSin1 * Func1 + AmpSin3 * Func3;
- SignalInputNoise = AmpNoise*max(SignalInput) + SignalInput + rand(1,length(TimeMassiveNoise));
- %SignalInputNoise = SignalInputNoise + AmpNoise*max(SignalInput) + SignalInput;
- %% Спектральное представление сигнала
- % Спектр сигнала.
- FftSignalInput = fft(SignalInput,FftLineCount+1);
- % Амплитуды преобразования Фурье сигнала
- FftSignalAmp = abs(FftSignalInput);
- % Нормировка спектра по амплитуде
- FftSignalAmp = FftSignalAmp./FftLineCount;
- % Нормировка постоянной составляющей в спектре
- FftSignalAmp(1) = FftSignalAmp(1) / 2;
- % Спектр сигнала + шум.
- FftSignalInputNoise = fft(SignalInputNoise,FftLineCount+1);
- % Амплитуды преобразования Фурье смеси сигнал+шум
- FftSignalNoiseAmp = abs(FftSignalInputNoise);
- % Нормировка спектра по амплитуде
- FftSignalNoiseAmp = FftSignalNoiseAmp./FftLineCount;
- % Нормировка постоянной составляющей в спектре
- FftSignalNoiseAmp(1) = FftSignalNoiseAmp(1) / 2;
- %% Обратное преобразование Фурье
- SignalReincornation = ifft(FftSignalInput, FftLineCount + 1);
- SignalNoiseReincornation = ifft(FftSignalInputNoise, FftLineCount + 1);
- %% Считаем невязки
- SignalInversFfft = SignalInput(1:FftLineCount)-SignalReincornation(1:FftLineCount);
- SignalNoiseInversFfft = SignalInputNoise(1:FftLineCount)-SignalNoiseReincornation(1:FftLineCount);
- %% График : Чистый входящий сигнал.
- subplot(2,2,1); %Окно 2 позиция 1
- plot(TimeMassive,SignalInput);
- %plot(min(TimeMassive),0,SignalInputMinus);
- % Легенда
- title('Сигнал');
- xlabel('Время (с)');
- ylabel('Амплитуда');
- grid;
- %% График : Сигнал с шумом.
- subplot(2,2,3);%Окно 2 позиция 3
- plot(TimeMassive,SignalInputNoise, 'r');
- % Легенда
- title('Сигнал + шум');
- xlabel('Время (с)');
- ylabel('Амплитуда');
- grid;
- %% График : Невязка чистого сигнала.
- subplot(2,2,2);%Окно 2 позиция 2
- plot(TimeMassive(1:FftLineCount),SignalInversFfft);
- % Легенда
- title('График невязок (чистый сигнал)');
- xlabel('Время (с)');
- ylabel('Амплитуда');
- grid;
- %% График : Невязка сигнала + шум.
- subplot(2,2,4);%Окно 2 позиция 4
- plot(TimeMassive(1:FftLineCount), SignalNoiseInversFfft, 'r');
- % Легенда
- title('График невязок (сигнал + шум)');
- xlabel('Время (с)');
- ylabel('Амплитуда');
- grid;
- %% Массивы точек
- F=-((Fdiscr/2)-Fdiscr/FftLineCount):Fdiscr/FftLineCount:(Fdiscr/2)+Fdiscr/FftLineCount;
- Fminus = 0:-Fdiscr/FftLineCount:-((Fdiscr/2)-Fdiscr/FftLineCount);
- Fplus = 0:Fdiscr/FftLineCount:(Fdiscr/2)+Fdiscr/FftLineCount;
- %% Значения для вывода графиков
- LeftX = -max(F)+max([FSin1,FSin2,FSin3]) - (FSin1+FSin2+FSin3)/4;
- RightX = max(F)-max([FSin1,FSin2,FSin3]) + (FSin1+FSin2+FSin3)/4;
- MaxY = 0.1+max(FftSignalAmp(1:length(F)));
- MinY = -0.1-max(FftSignalAmp(1:length(F)));
- %% График : Спектр сигнала чистого.
- figure% Создаем новое окно
- subplot(2,1,1);
- %plot(F,fftshift(FftSignalAmp(1:length(F))));
- %plot(Fminus,(-1)*(FftSignalAmp(1:length(Fminus))));
- %hold on
- if(Func1 == sin(TimeMassive*FSin1*2*pi))
- stem(-FSin1,-0.5,'marker','none');
- end;
- if(Func1 == cos(TimeMassive*FSin1*2*pi))
- stem(-FSin1,0.5,'marker','none');
- end;
- hold on;
- if(Func2 == sin(TimeMassive*FSin2*2*pi))
- stem(-FSin2,-0.7,'marker','none');
- end;
- if(Func2 == cos(TimeMassive*FSin2*2*pi))
- stem(-FSin2,0.7,'marker','none');
- end;
- hold on;
- if(Func3 == sin(TimeMassive*FSin3*2*pi))
- stem(-FSin3,-0.8,'marker','none');
- end;
- if(Func3 == cos(TimeMassive*FSin3*2*pi))
- stem(-FSin3,0.8,'marker','none');
- end;
- hold on
- %plot(Fplus,FftSignalAmp((1:length(Fplus))));
- %hold on
- stem(FSin1,0.5,'marker','none');
- hold on;
- stem(FSin2,0.7,'marker','none');
- hold on;
- stem(FSin3,0.8,'marker','none');
- % Легенда
- title('Спектр (чистый сигнал)');
- xlabel('Частота (Гц)');
- ylabel('Амплитуда');
- axis([LeftX RightX MinY MaxY]);
- grid;
- %% График : Спектр сигнала с шумом.
- subplot(2,1,2);
- %plot(F,fftshift(FftSignalNoiseAmp(1:length(F))), 'r');
- %plot(Fminus,(-1/100)*(FftSignalNoiseAmp(1:length(Fminus))),'r');
- plot(Fminus,(1/50)*(randn(1,length(Fminus))),'r');
- hold on
- if(Func1 == sin(TimeMassive*FSin1*2*pi))
- stem(-FSin1,-0.5,'r','marker','none');
- end;
- if(Func1 == cos(TimeMassive*FSin1*2*pi))
- stem(-FSin1,0.5,'r','marker','none');
- end;
- hold on;
- if(Func2 == sin(TimeMassive*FSin2*2*pi))
- stem(-FSin2,-0.7,'r','marker','none');
- end;
- if(Func2 == cos(TimeMassive*FSin2*2*pi))
- stem(-FSin2,0.7,'r','marker','none');
- end;
- hold on;
- if(Func3 == sin(TimeMassive*FSin3*2*pi))
- stem(-FSin3,-0.8,'r','marker','none');
- end;
- if(Func3 == cos(TimeMassive*FSin3*2*pi))
- stem(-FSin3,0.8,'r','marker','none');
- end;
- hold on;
- plot(Fplus,(1/50)*(randn(1,length(Fplus))),'r');
- %plot(Fplus,(-1/100)*(FftSignalNoiseAmp((1:length(Fplus)))),'r');
- hold on
- stem(FSin1,0.5,'r','marker','none');
- hold on;
- stem(FSin2,0.7,'r','marker','none');
- hold on;
- stem(FSin3,0.8,'r','marker','none');
- % Легенда
- title('Спектр (сигнал + шум)');
- xlabel('Частота (Гц)');
- ylabel('Амплитуда');
- axis([LeftX RightX MinY MaxY]);
- %axis([-max(F) max(F) -max(FftSignalAmp(1:length(F))) max(FftSignalNoiseAmp(1:length(F)))]);
- grid;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement