2-Amaliy ishi Bajardi: Qarshiboyev s tekshirdi: To‘rayev X



Yüklə 57,42 Kb.
tarix23.12.2023
ölçüsü57,42 Kb.
#154659
Qarshiboyev S


Muhammad al-Xorazmiy nomidagi Toshkent axborot texnologiyalari universiteti Kompyuter injiniring fakulteti 210-20 guruh fakulteti talabasi Qarshiboyev Sirojiddin Parallel ishlov berish fanidan bajargan
2-Amaliy ishi


Bajardi: Qarshiboyev S
Tekshirdi: To‘rayev X

1.Bir o’lchovli signallar ustida qayta ishlash amallarini omp kutubxonasi imkoniyatlaridan foydalanib amalga oshirish. Signallarni qayta ishlash masalalari:


d)Signallarni spektral sohada siqish.
#include
#include // Include the necessary header for file operations
#include
#include
#include
#include

// Signalni tayyorlash
void generateSignal(std::vector& signal, double fs, double duration, double f0) {
int N = static_cast(fs * duration);
signal.resize(N);
for (int i = 0; i < N; ++i) {
signal[i] = sin(2 * 3.14 * f0 * i / fs);
}
}

// Fast Fourier Transform (FFT) uchun rekursiv funksiya
void fft(std::vector>& x) {
int N = x.size();
if (N <= 1) return;

std::vector> even(N / 2);
std::vector> odd(N / 2);

for (int i = 0; i < N / 2; ++i) {
even[i] = x[i * 2];
odd[i] = x[i * 2 + 1];
}

fft(even);
fft(odd);

for (int i = 0; i < N / 2; ++i) {
std::complex t = std::polar(1.0, -2 * 3.14 * i / N) * odd[i];
x[i] = even[i] + t;
x[i + N / 2] = even[i] - t;
}
}

int main() {
double fs = 1000.0; // O'lchovlar tezligi (Hz)
double duration = 1.0; // Signal davomiyligi (s)
double f0 = 5.0; // Signalning boshlang'ich chastoti (Hz)

std::vector signal;
generateSignal(signal, fs, duration, f0);

int N = signal.size();
std::vector> complexSignal(N);
for (int i = 0; i < N; ++i) {
complexSignal[i] = std::complex(signal[i], 0);
}

// FFT amalini parallel qilish
#pragma omp parallel
{
#pragma omp single
{
fft(complexSignal);
}
}

// Siqilgan signalni olish va chiqarish
std::vector siqish(N);
for (int i = 0; i < N; ++i) {
siqish[i] = std::abs(complexSignal[i]);
}

// Siqilgan signalni chiqarish
for (int i = 0; i < N; ++i) {
std::cout << siqish[i] << " ";
}

// File output for the spectral result
std::ofstream outfile("spectral_result.txt");
if (outfile.is_open()) {
for (int i = 0; i < N; ++i) {
outfile << siqish[i] << " ";
}
outfile.close();
std::cout << "\nSpectral result has been saved to 'spectral_result.txt'" << std::endl;
}
else {
std::cerr << "Unable to open the file for writing." << std::endl;
}

// File output for complexSignal (real and imaginary parts)
std::ofstream complexFile("complex_signal.txt");
if (complexFile.is_open()) {
for (int i = 0; i < N; ++i) {
complexFile << complexSignal[i].real() << " " << complexSignal[i].imag() << " ";
}
complexFile.close();
std::cout << "Complex signal has been saved to 'complex_signal.txt'" << std::endl;
}
else {
std::cerr << "Unable to open the complex signal file for writing." << std::endl;
}

return 0;
}

2.Ikki o’lchovli signallarni(tasvirlarni) qayta ishlash masalalarini omp kutubxonasi imkoniyatlaridan foydalanib amalga oshirish. Tasvirlani qayta ishlash masalalari:


d)tasvirlarni siqish.

import concurrent.futures
import matplotlib.pyplot as plt
from PIL import Image

def process_image(pixel):
# Pikselni qayta ishlash misol: masalan, pikselni grayscale qilish
gray_value = sum(pixel) // 3
return (gray_value, gray_value, gray_value)

def main():
# Ikki tasvirni o'qish
image1 = Image.open("image1.jpg")

# Tasvirlarni piksellarga ajratib olish
pixels1 = list(image1.getdata())

# Tasvirlarni qayta ishlash
with concurrent.futures.ThreadPoolExecutor() as executor:
result_pixels = list(executor.map(process_image, pixels1))

# Natijadagi tasvirni yaratish
result_image = Image.new("RGB", image1.size)
result_image.putdata(result_pixels)

# Tasvirni saqlash
plt.imshow(result_image)
plt.show()

plt.imshow(image1)
plt.show()

if __name__ == "__main__":
main()

Rasmning asl holati


Rasmning siqilgan holati
Yüklə 57,42 Kb.

Dostları ilə paylaş:




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©genderi.org 2024
rəhbərliyinə müraciət

    Ana səhifə